About虛擬&實際

@分享虛擬與實際的世界中所遊玩的心得紀錄,從物理化學到生命科學、從人文藝術到現代科技、從虛擬介面到實際生命體。享受的只是一種學習與體驗。若文章內容有誤,歡迎提出以供修改,對文章的回饋,歡迎寄信給我!一起分享,互相學習成長的環境。
@個人簡介在『關於韃靼』
@我是韃靼~我的信箱:chenyuquan at gmail dot com

2013年5月27日 星期一

LabVIEW Projects_ 個人帳務系統-part II

前言:
在經過五個多星期後,帳務系統再次地慢慢升級與改進,目前已經可以成功地秀出單一項目的每月累積,以及總和,然後還有其他可以改進的地方仍需持續努力。

Code:
目前利用List可以將項目資料匯入,然後選擇單一項目後,將項目的每個月資料利用Graph呈現出來。

改進:
1. 可以在Graph上面的bar就呈現數值,就不用額外的使用Month Selector選擇單一月份來呼叫資料。
2. 輸出整理好的raw data,可以進一步使用IGOR繪圖(可以做更正式的圖表用!~哈~)
3. Item Selector可以嘗試多重選擇並在Graph上面採用疊加顯示(月份分隔),
4. 利用可以產生每個月每個項目的總額(原本已經有每個項目整年的總額),分支出與收入項目。
5. 直接在LabVIEW內建立Table,可以輸入每日記帳資料,而不需在額外使用筆記本來匯入。但還是可以將資料匯出。

參考:
LabVIEW Projects_ 個人帳務系統-part I
有關String的紀錄
有關Array的紀錄

2013年5月23日 星期四

[學習紀錄] 論壇教學&技術文章等等

前言:
這邊記錄在網路論壇上面提供的教學&技術文章的學習心得與練習相關的。

1. LabVIEW Pro 的基礎教學(2013/05 all review)
基礎教學的項目列了這些:
Chapter 1 - LabVIEW 簡介
1-1 圖形化系統設計 (GSD) 介紹
1-2 LabVIEW 介紹
Chapter 2 - LabVIEW 程式撰寫
2-1 Getting Started - 歡迎畫面
2-2 LabVIEW Project - 專案管理
2-3 LabVIEW 程式架構
2-4 Front Panel - 人機介面
2-5 Block Diagram - 程式設計區
2-6 Tools Palette - 工具面板
2-7 Example Finder - 範例搜尋工具
Chapter 3 - LabVIEW 程式執行架構
3-1 While 迴圈
3-2 For 迴圈
3-3 Shift Register - 移位暫存器
3-4 Sequence Structure - 循序架構
3-5 Case Structure - 條件架構
3-6 Formula Node - 方程式節點
3-7 MathScript Node
3-8 程式執行時間控制
Chapter 4 - 陣列與叢集
4-1 Array 陣列
4-2 Cluster 叢集
Chapter 5 - 波形繪製
5-1 Waveform Chart
5-2 Waveform Graph
5-3 XY Graph
5-4 3D Graph
Chapter 6 - 檔案輸入與輸出
6-1 檔案 I/O
6-2 高階檔案 I/O
6-3 ASCII 檔案型態
6-4 Binary 檔案型態
6-5 TDMS 檔案型態
Chapter 7 - 除錯技巧
7-1 修復錯誤的 VI
7-2 Highlight Executation - 執行狀態
7-3 Probe - 探針工具
7-4 Retain Wire Values - 保留資料
7-5 Signal Stepping - 單步執行
7-6 Break Point - 中斷點
Chapter 8 - 變數介紹
8-1 Local Variable - 區域變數
-2 Global Variable - 全域變數
8-3 Shared Variable - 共享變數
Chapter 9 - 屬性與方法
9-1 Property Node - 屬性節點
9-2 Invoke Node - 方法節點
Chapter 10 - 執行檔、安裝檔及動態連結檔
10-1 建立執行檔
10-2 建立安裝檔
10-3 建立動態連結檔 DLL

2. LabVIEW Pro 的每月專題分享(更新到2013/10)
目前專題分享的主題大概有這些:

[2013.10] XControl 製作(二)
[2013.09] XControl 製作(一)
[2013.07] TCP/IP 通訊一把罩 (二)
[2013.06] TCP/IP 通訊一把罩 (一)
[2013.05] VI Server 基礎介紹-進階篇

---20131009 done
[2013.04] VI Server 基礎介紹-初階篇
---20131009 done
[2013.03] Database II : 資料存取的進階應用

---20131015 done
[2013.01] Database I : 高效率資料儲存方法

---20131015 done
---公司電腦沒有裝Access,安裝在家裡測試看看好了!!
[2012.12] DAQ IV -使用 NI 的 DAQ 卡來擷取/輸出 Digital 的訊號
---20131015 done
[2012.10] DAQ III - 如何使用 DAQmx 的 API 來建構出量測的程式
---20131015 done
[2012.9] DAQ II - 使用 LabVIEW 擷取訊號
---20131015 done
[2012.8] DAQ 資料擷取 - 前言
---20131015 done
[2012.2] Picture Control 物件(六) - Event Structure 三
[2012.1] Picture Control 物件(五) - Event Structure 二
[2011.12] Picture Control 物件(四) - Event Structure
[2011.12] 寫好 LabVIEW 程式的利器(四): Event Producer/Consumer
---20131014 done
---若在"Start"執行過程中按下"Stop"會導致"Producer"停止,但是"Consumer"卻不會停止的狀況。
[2011.11] 寫好 LabVIEW 程式的利器(三):模組化 VI 以及 State Machine 的進階應用
---20131011 done
[2011.11] Picture Control 物件(三) - 範例說明
[2011.10] 寫好 LabVIEW 程式的利器(二): State Machine
---20131011 done
[2011.10] 寫好 LabVIEW 程式的利器(一):模組化功能 VI
---20131011 done
[2011.10] Picture Control 物件(二)

---20131030 done
---練習中的設定如下方圖201110001的設定才會出現右邊填滿的方塊。
[2011.9] Picture Control 物件(一)
---20131030 done
[2011.8] MathScript Node深入專訪(四)
---20131015 done
[2011.7] MathScript Node深入專訪(三)

---20131015 done
---有提到濾波的應用(影像與聲音),可以考慮使用之前建立的TOEFL程式來玩玩。
[2011.6] MathScript Node深入專訪(二)

---20131015 done
[2011.5] MathScript Node深入專訪(一)

---20131015 done
[2011.4] LabVIEW和儀器溝通教學

---20131015 done
[2011.3] Producer/Consumer Design Pattern教學-Event Base
---20130522 done
---範例程式讓使用者可以按Test 1~3任一按鈕,然後按下多數後,會"依序"執行,每個為兩秒鐘。
[2011.2] 如何改善程式執行效能
---20130522 done
[2011.1] LabVIEW 64 位元與 LabVIEW 32 位元有何不同?
---20130516 done
[2010.12] 如何用 LabVIEW 關閉 Windows 下的應用程式?
---20130516 done
[2010.11] 將 LabVIEW VI 發佈為網頁
---20130516 done
[2010.10] LabVIEW 設計模式 (Design Pattern) 簡介
---20130516 done
[2010.9] LabVIEW 2010 讓你的程式變得更有效率
---20130516 done
[2010.8] 和世界的 LabVIEW 高手分享你的 LabVIEW 創意!
---20130515 done
[2010.7] 多核心程式設計於 For Loop 上之應用實例
---20130515 done
[2010.6] 於不同螢幕解析度下維持人機介面排版
---20130515 done

圖:


3. IT360-LabVIEW基礎教學
單元00:虛擬儀控簡介
單元01:LabVIEW簡介
單元02:重複及迴圈
單元03:陣列(Array)
單元04:叢集(Cluster)
單元05:模組化程式設計
單元06:繪製資料圖
單元07:在LabVIEW做決策
單元08:字串與檔案存取
單元09:區域變數與廣域變數
單元10:人機介面設計技術
單元11:事件結構
單元12:專案管理
單元13:遠端資料管理
單元14:自行設定 VI
單元15:DAQ與資料擷取
單元16:GPIB與儀器自動控制

2013年5月21日 星期二

(悼念文章-相機) 第一台數位相機_ KODAK-DX4330

前言:
這篇是整合之前打在無名跟WordPress的文章兩篇。


2006-4-13

可憐的小DX(my Kodak)
你的頭壞掉了~工程師報價2300(最低)
好吧~如果真的不行要換整個頭~那~
我也真不知道該怎樣了~等~
工程師回價吧~~ㄚ們!

2008-1-11


ㄚ犬我的K~DX4330第二次往生了~
一樣的毛病~唉唉~都是鏡頭開不了~

還要修嗎?~看樣子答案是很明確的~

俢一次要四千多~以現在來說都可以快買到同等級的了~真是"逼哀"

還沒照到六千張的說~可見我不是一個很愛照相的人~遜掉了

買了快六年~咦~平均一年一千張~哈哈~...(咻....咻...)

等當完兵再說囉~既然他壞去了~就自己拆開來玩玩看吧~

----------------------------------------------------

1樓
我的相機破三萬了....
alnwick 於 January 12, 2008 11:57 PM

2樓
你是相機宅~~
我可以相信這個數據是對的~
再多個五倍我也很認同~
chenyuquan 於 January 13, 2008 12:06 AM

3樓
話說,我剛買F50不到2個星期就公布3月中要出F100-.-
重點是他前面都是小改,這一次整個大躍進-.-
讓我現在超級嘔跟悶中,唉~~失落呀
NICEALAN 於 January 26, 2008 07:44 PM

4樓
是唷~別傷心~
我的像機買的時候~
才過半年就降價快四千~那也很嘔~~
chenyuquan 於 January 26, 2008 10:38 PM

5樓
我的應該也差不多吧,2個月而已-.-跌幅更慘-.-
NICEALAN 於 January 27, 2008 11:00 AM

使用LabVIEW控制Webcam以及IMAQdx & IMAQ的合併使用

前言:
新專題中會使用到光學顯微鏡觀察DNA,然後使用CCD去截取影像。用LabVIEW去控制儀器與截取影像是我第一次接觸。除了參考資料外也實際學了不少實戰經驗。而自從NI在LabVIEW增加了IMAQdx後,大大的增加了USB Camera的便利性質,這對想要從事影像處理的研究者來說,更是大大的方便了。

程式設計:
參考了LabVIEW內的範例外,也上網搜尋了幾個基本的設定。大體而言,跟VISA的設定都是如出一轍的,"初始化"---"硬體設定"---"讀 / 寫"---"關閉硬體",目前先寫好的功能為:
1. 擷取並顯示
2. 框選特定區域(ROI)並顯示
3. (特定)區域局部放大(Expand)
4. (特定)區域灰階顯示(Grayscale)
Code:
列出幾個設定如下:
當要抓取ROI的區域,設定IMAQ的ImageControl (Invoke node)可以針對Front Panel的動作輸入/傳回狀態。


而基本的Image擷取大概就如下:
(from LabVIEW example)

而每個新增的IMAQ處理過程就必須新增加一個IMAQ的設定:



然後處理程序結束後一定要用"IMAQ dispose" vi將記憶體中的Image消除。
而下圖就是簡易的影像擷取以及處理抓取特定ROI並顯示:




後記:
上述的部分都是第一次接觸,瞭解了基本概念後其實還蠻容易上手的,不過有些影像處理的基礎還是需要多學習才能更深入VISION的核心。另外接著有想要增加的功能(對專案不是直接的用途,純屬興趣)是:
1. 多個ROI選取並顯示
2. 設定固定ROI(輸入數值)然後顯示在IMAGE上面
3. 設定任意長度(line)並回傳其距離(或者pixel)以及面積等等的資訊
4. (思考中)

參考:
(Book) 
Image Acquisition and Processing with LabVIEW-Christopher G. Relf.
[學習紀錄] LabVIEW- Image Acquisition Processing with LabVIEW

(Web) 
IT 360
LabVIEW Pro

Maker Faire: Taipei-2013

前天(20130519)去參加了第一次在台灣舉辦的Maker Faire:Taipei,由馥林文化主要執行單位舉辦的。還記得去年參與在花博的Maker Faire預展覽,增廣見聞了不少,雖然那時候的東西較少,但是可以跟幾個參展的人聊蠻多的。

當天天氣很好,運氣真是不錯,中南部都身陷暴雨之苦。

這次展覽是在華山文創園區,之前參與過許多活動都是在這邊,例如:
M.I.C IV_微型點子對撞機 , 文創園區真是一個新形態的有趣地方,希望可以長久經營下去。

到了之後就可以看到非常醒目的招牌:



展場內的人非常的多!!




還有些照片整理後再放上來,不過沒拍很多,因為人真的很多~~~!!!!

2013/5/25照片補充:
補放了一些覺得很不錯的照片,雖然也只有幾張。
大門入口,非常顯眼,也有不少到華山的旅客順道過來參觀

很大的Maker Faire看板

天氣好,也吸引了多爆的人潮

這個是我覺得比較值得看的,自製的音樂器具,很有趣

這攤位擺的成品真的是高手級數,好厲害的“紙”機械人

這個是用3D printer所印製出來的小型傢俱。惟妙惟肖~

雖然天氣陰陰,但是是好天氣的感覺,真棒。

後記:
這次的展覽很棒,除了參與人數多外,展出內容項目也是挺新穎的。不過小小的缺點是:會場雖然大,卻容不下這麼多人潮,顯得有點壅擠。另外重複性有點高,例如3-D Printer & LEGO機械人,雖然實際的專題是不一樣的,但是主體一樣就顯得不夠多元化。再來就是參展的個人少了點,大多數是廠商還有學校研究團隊,參展的那幾位都已是網路知名或者有出過書籍之類等等。民眾的參與度還可以再期待,當然也希望自己下一次可以一起參與這樣的盛大活動。

參考:
Maker Faire " 預展覽“
We are Maker 系列講座
Make 國際中文版 (這裡有活動的精采摘錄)

2013年5月19日 星期日

NOKIA LUMIA 620-New Phone, new life

因緣巧合,所以被女友聳動換了手機,從稍為智障型手機改變成些為智障型手機,而在女友的認知裡,就手機NOKIA E66不是智慧型手機的唯一原因就是不能觸控!

在一直使用偉哉台北市免費的WIFI多年後,終於自己也順便升級可以使用3G上網,申請的不是吃到飽(有這麼多免費&覆蓋率頗高的台北市),每個月繳的基本總額也比之前多不到兩百(平均值),算是非常划算。

廢話說多了,這次辦的是NOKIA的LUMIA 620,黑色。
非常不專業的拍了兩張如上,黑色的總是百看不厭,可惜沒有類似LUMIA920的黃色,否則我一定會買下去。

至於後來選擇這隻大概有幾個吸引我決定的點是:
Window Phone 8
---Window 8是我還沒玩過的系統,藉由入門機620可以初探此系統的優缺點。
500 萬像素鏡頭
---雖然這階級的像素到處都有,但是NOKIA系列的相機一向都讓我滿意,從NOKIA E66就可以得知。
系統整合能力
----MAC系統地整合能力強一樣是我欣賞的,而WINDOW這次推出的WINDOW 8也有許多地方整合的很不錯,例如多種社群平台的整合,還有NOKIA自家推出的地圖等等。
至於蠻多人推崇的Dolby&我覺得一項是NOKIA強項的藍牙通訊,還有很先進的NFC(但是台灣好像還沒用處),還有A-GPS等等,都還要再持續的測試才知道整體的效能。

另外下面是測試的拍照:
室內,有點糊,但還蠻清晰

室外陽光充足,即使是陰天也很清晰

今天台北難得沒有淹大水,希望中南部災情可以早日修補

夜拍也是挺清晰,雖然只比E66高一些(E66為3.2M),但是畫質已經是數倍之上了

後記:
還有個很重要的原因是,因為女友希望自己可以熱衷于分享生活,而且我常常有在外面隨時需要查詢資料的需求,所以強烈的要求我轉換上網且換手機(手機是她的約,且才五百元有找的“好”手機)。甜蜜蜜!

2013年5月16日 星期四

有關其他暫時未分類的紀錄-LabVIEW

前言:
這邊記錄了一些學習到的技巧與觀念,但還不確定要分類在哪個項目。等到相似領域累積夠多再另外開一個文件做紀錄。

---20130516---
Close Window application
這個練習學習到使用Call Library Function Node的觀念。
建立一個VI呼叫call library function node並關掉window的應用程式。

其中的Msg是使用十進位(輸入16)的設定,教學文件中使用的是十六進位。



---20131016---
每次重灌了LabVIEW後,都有很多習慣要再改回,例如一些Function/ Control面板的顯示等等,因為會重灌或新灌LabVIEW的頻率不會很高,所以都會忘了要去哪裡修改,例如在Block Diagram裡面的Control顯示是否為Icon,我是習慣只顯示Icon,因為體積小便於排版。目前公司Lab用到的是LabVIEW2012,所以又要找了:
在Tools/ Options// Block Diagram--General內的第一個:
Place front panel terminals as icons,將前面的勾選取消,就可以顯示小小體積的Icon了。

有關String的紀錄

前言:
這邊紀錄了跟string相關的知識與技巧。

20130516
Trim WhiteSpace vi.
說實話的,一開始還以為是去除String中的空白(or Tab, CR, etc...)之類的元件,後來才發現是去除"一開頭"或者"最後端"的空白(or Tab, CR, etc...),實在是搞笑了,的確是自己誤解說明文章涵義了。
衍生參考:自定義字串(數字)的長度


20130526
之前研究了這個"傳回 Boolean array 對應的 index number",提到如何將資料匯到List中,現在想起來了,其實就很簡單的使用property node中的ItemNames即可(change to write)。不過原本是想用Enum來建立,但是會出現一些問題是我目前不知道如何解決,傻傻分不清....!
錯誤的訊息:

2013年5月14日 星期二

有關Array的紀錄

前言:
這裡記錄一些跟array相關的小知識與學到的技巧。


20130514
A: 在撰寫記帳程式的時候,有遇到一個小問題是要將二維陣列給切割,不過array並沒有內建二維分割,只有一維分割(split 1D array),所以根據原理,我想應該是通用的。我首先使用了如下的"Delete from array"

裡面有三個設定: length, index (row), disable index (col),比較重要的是當使用 "length"的時候,VI的deleted portion的輸出就會變成(2D)二維陣列,連結另外兩個都是一維陣列。

注意到的事情是,只有接"length"時候是以"row (列)"做為切割依據,若想要以"col (行)"作為依據只要將"disable index (col)的線接上即可,而在有接上"length"的時候,disable index (col)就失去了原有的功能,就只是觸發事件用的設定而已。

B: 另一個分割二維陣列的方式則是應用到剛剛提到的 split 1D array如下圖:

就可以設定想要切割(分割)的位置"Split place",這樣就可以達到跟A部分一樣的結果了。

C: 三維陣列的每一分頁(page)都要求一樣長度的col & row


有關Event structure的紀錄

前言:
這裡記錄一些跟Event structure相關的小知識與學到的技巧。

20130514:


設定Timeout,然後一個Value Change,在timeout內改變Numeric的話,輸出NewVal;若超過timeout則NewVal & Numeric 2皆會變成10。這個部分可以設計幾個事件變化,若超過等待時間則略過所有事件。

2013年5月11日 星期六

[學習紀錄] LabVIEW- Image Acquisition Processing with LabVIEW

前言: (內文進度持續中......)
主要是因為研究到了影像處理的計畫,想到了這本書可說是老牌的好書(雖然也才十年多),書中最大的好處是很多基本觀念都有講解到,還有一些技巧很實用。雖然NI的LabVIEW近十年來已經增加了更多強大的功能(例如Usb Camera已經有IMAQdx可以直接控制之),不過好書的本質就是觀念可以一直通用且隨著時代的考驗還是顯示出其價值。

Chapter 1: Image Types and File Management

提到了很多影像的形式,還有檔案形式的選擇(JPEG, TIFF, GIF...etc)。
影像的檔案大小(即儲存所需要的記憶體)公式可以用以下的計算之:

MemoryRequired = Resolution(x) * Resolution(y) * BitDepth


For example, 1024*768 8 bit的灰階(grayscale)需要:

1024*768*8 = 6291456 Bits = 786432 Bytes (1 byte = 8 bits) = 768 kBtyes

"Lossy or Lossless" 兩種壓縮格式:

Lossy 會去除一些資料來達到減少檔案的大小,但會保持最佳的可辨識度。
Lossless 不會失去任何原始資訊,只是將檔案大小減少,且包持原本的精確度(accuracy)。

TIFF file format需要特定的設定,在LabVIEW 2011(目前我用的版本)可以找到特定的VI來設定其檔案存檔所需的一切功能。


Chapter 2: Setting Up

提到了硬體到軟體的基本觀念: Cameras (以及其成像機制),Image Acquisition Hardware(連接的種類,From Object to Camera (Resolution, DOF, Contrast, Perspective...),Lighting...等等。

Hardware:

介紹有National Instrument Frame Grabbers, IEEE 1394 (FireWire) systems, USB systems, 基本上我只用過後兩個,加上現在已經有IMAQdx的出現,很多USB systems簡直就是插了就用,真的是統一化了。

Resolution:

通常都可以用Barcode作為參考。設定要辨識的最好距離(好像單位都是用mm)
Sensor Resolution(1D) = [ 2 * (Field of View / Smallest Feature)]

DOF (depth of field): 

在這個區域內的物件才會清晰,超過的話就會超過Blur Diameter然後就模糊了。可用Iris (虹膜, 在光學系統內應該就是個小孔徑的光圈)去增加DOF但是相對的也會是光強度減少。

Contrast (or Modulation, called resolution's brother)跟解析強度有關。

Contrast = (I,brightest - I,darkest) / (I,brightest - I,darkest), where I,brightest > I,darkest, I,darkest != 0


Perspective(parallax, 視差) 透視圖法:
對於多物件會產生的誤差之一,提供了兩種解決方案:software calibration & Telecentricity (物體的倍率誤差)。
基本上軟體方式就是先放入標準影像,然後使用演算法記錄後就可以將實際的觀測物體“回推”應該正確的影像了。
而Telecentricity還不是很懂,大概就是只考慮物體的邊緣形狀,而不考量其三維度原始扭曲後的影像吧!!而有提到Telecentric lenses並不是因為其具有巨大的DOFs,DOF只跟“focal length(f-number)” 和 ”resolution" 有關係。

Lighting 光源:

原來使用的光源還可以有這麼多形狀,大概有以下幾種:
Area arrays, Ring, Dark field, Dome, Backlights, Continuous Diffuse Illuminator (CDI), Diffuse on Axis Lights (DOAL) & Collimated on Axis Lights (COAL), Square Continuous Diffuse Illuminators (SCDI),只能說真是多彩多姿多樣化!!端看需要怎麼樣的效果,或者避免什麼樣的誤差而選擇不同的光源。

Chapter 3: Image Acquisition

這一章節開始描述影像的擷取,大概從幾個方向敘述:
設定(configuring),,擷取型態(types),介面以及其他方式跟使用者解決方案

3.2~3.4節說明在擷取型態中,提到了snap, Grab, Sequence,都是使用IMAQ。
而不知道從LabVIEW開始提供了IMAQdx後,USB(或IEEE1394)都可以直接使用IMAQdx做通訊了。

3.5~3.7節有提到第三方擷取軟體跟擷取VGA的可能性,還有TWAIN的影像擷取,有些現在已經有更直接或者更方便的方式取代。當然我都沒有過這邊提到的經驗,並不準確。

有句話描述得很好如下:
---Few tests are performed erroneously, leading to less scrap and lower testing costs.
---越少錯誤地進行測試,就能減少垃圾以及降低測試成本。

Chapter 4: Displaying Images
這章節開始作者先提出了為什麼要顯示影像,因為顯示影像對於工程師來說並不是很重要,關鍵的地方是擷取的數據以及後續的處理,所以比較不偏好在"擷取過程中"顯示立即的影像,也是給不同使用者的身分一些建議。

4.1節中提到最基本讀取影像的方式就是:建立暫存記憶體空間---讀取影像---顯示影像---關閉影像
大概就如同:
這邊比較有趣的是當我讀取的"Image Type"選擇Grayscale或者RGB就會自動地將圖片變成灰階或者彩圖。另外我修改成Multiple image display的時候,window不會自動分開,試了幾次才發現真的不會分開,真是奇怪!?

4.2節開始提到以上的部分是建立floating windows的方式,而有時候是希望影響可以內嵌至VI內(Front Panel),同樣的設計模式即可以讀取影像,有三種:
1. (Graph)而使用的是放入Intensity Graph,設定可以使用0-255(8 bit)的解析度。
2. (Indicator)但是若讀入的是彩色圖片呢?所以接著有說明可以使用IMAQ的過程讀取影像資料,再轉換成影像(因為要先讀取影像檔案轉變為陣列數值,才會再近一步地轉換成在VI可以看到的影像),所以作者建議使用"GraphicsFormats"函數即可已將影像讀取並顯示在VI上了。另外有提到也可以直接從網路位置讀取圖片資料,在顯示在VI上面,使用DataSocket Read,這個我想跟之前我在擷取網頁資料用的方式是差不多的。
3. (IMAQ Display window)

4.3節提到了 The Image Browser:
這個章節提出了使用Browser的方式顯示影像,但是要注意是否會超過原VI的邊界,另外也可以叫出多重browser的方式(一個browser裡面內嵌數個影像)。

4.4節提到好用的工具 Overlay Tools:
這個章節提供了一個很重要的工具(其實我真的沒想過!!),就是重疊工具,這個重疊工具可以將"文字","圖形"給放置在原本的影像上面,為什麼強調"放置"呢,因為這個重疊影像的方式"並不會"改變原本影像的檔案,亦即原始檔案並不會增加或刪除。可以為影像增加如公司資料,框選特定位置等等。

4.5節介紹常用的 Vision Window Tools Palette:
這裡簡介了Vision常用的工具面板,我確認過跟2011版本沒甚麼改變。

Chapter 5: Image Processing

前面的章節已經介紹了如何擷取影像,影像顯示,當然不是這樣就結束了,否則跟直接用儀器現成的商用軟體觀察有甚麼兩樣,進一步的當然就是要將擷取到的影像進行處理(分析的話在第七章會提到)。

5.1節一開始提到的當然就是最重要的觀念(或者我覺得最重要的!),就是框選對影像之間有興趣的部分,也稱呼為ROI(Region of Interest)。

可以圈選的形狀大概有Line, square & rectangle, oval(前三個稱為simple ROIs), rotated rectangle, annulus arc, ROI tracing example (這三個被歸為complex ROIs), 還有手動建立ROI區域(使用到了所謂的ROI Descriptor)。框選的目的不外乎:進一步分析特定區域,OCR圖形文字辨識等等。
(註解)我比較想知道的是,如果我框選不規則區域,是否可以"extract"出不規則區域的影像呢??書中並沒有解答,只能自己測試了。

5.2節是個使用者解決方案,談到大腦研究的。

5.3節提到了Connectivity(連結性!?),大概提到點選Pixel時候通常是會有一個區域都被選到(不會是一個點!?,但是在ImageJ裡面明明可以選擇一個,LabVIEW的Image Graphy也是有顯示的說!?),而有三種連結性:4, 6, 8像素連結。簡單的說就是Cardinal(十字),hexagonal(六角)還有3*3的正方形。

5.4節介紹了基本的影像操作,例如加減乘除之類的,還有一個是Modulo(中文很難描述,只能意會不能言傳),有點類似餘數之類的,最近在學Python裡面也有提到這個指令,感覺應該是個被常用的功能。另外也提到了平均,有講到一個重點是,是影像先相加再平均,還是個別先除一半再平均。文中提出先個別的先縮減(Scale down,表示不一定是除一半)再相加(或合併),為什麼要這樣呢?因為先相加(或合併)可能會超過像素上限(0~255, 8 bit)。

5.5節又是個使用者解決方案,就是提到了上節最後的平均。P112提到的觀念我目前還無法理解!!接下來的章節越來越硬了,真是需要實戰經驗搭配啊!!

5.6節提了一些工具如:Symmetry (Mirroring an Image), Rotate, Unwrap, 3D view, Thresholding和 Equalization等等。
其中前三項比較好理解;
而第四項的3D view可以將iamge中的第三個維度(即強度, intensity)給立體化,可以提供不一樣的角度去呈現圖片。
而接著的Thresholding,有點類似設定boundary value,藉此強調某個想要的區域。
最後一個Equalization (應該叫做均等化)有點類似thresholding,但是結果的呈現好像會將特定區域的對比(contrast)強化,而其他地方則弱化到將近黑色(pixel number ~ 0),而這個動作應該是使用者選擇區域(在圖上面選擇位置-Cursor legend)

5.7是個使用QuickTime內嵌至LabVIEW的應用,是呼叫QuickTime的CIN (Code Interface Node),另外QuickTime一組跨平台的API (Application Programming Interface, 應用程式介面),可以在不同的平台下被使用,如MacOS跟在Window下的DLL (Dynamic Link Library)。利用QuickTime取代IMAQ來Write & Read Movie跟進行Video Grabbing等等的功能。

5.8節開始提到了Filter的使用,image filter的目的常用來抑制或增強影像數據來達到特定的要求。基本的filter使用"高對比"、"邊緣偵測"和"平滑。而使用Filter有個比較重要的地方就是要注意"上限"數值,通常使用8 bit的影像的話,最大值只到255,所以要特別注意是否會破表,否則就會被鎖定在255了!~而文中介紹幾個常用的filter如:
a. Gaussian- 去除noise
b. Gradient- 有點類似邊緣銳利化,又被稱為一階導數 (first-order derivative)。
c. Laplacian- 定義為omni-directional gradient filter,指全部影像都強化(就是沒有不變的數值,跟gradient有不同之處),主要是用來偵測邊緣 (edge detector)。
d. Smoothing- 為一averaging filter.
最後也提到可以自行客製化需要的Filter。

Chapter 6: Morphology
前一章節講完了影像處理的過程後,這章節開始介紹影像的形態學 (morphology)
Chapter 7: Image Analysis


Chapter 8: Machine Vision

結論:



參考:
(Book, resource from University Library) 
Image Acquisition Processing with LabVIEW
(Web) 
National Instrument
IT360.tw
LabVIEW Pro
Modulo 模除

延伸閱讀:
使用LabVIEW控制Webcam以及IMAQdx & IMAQ的合併使用

2013年5月9日 星期四

[學習紀錄] LabVIEW

前言:
這裡紀錄研讀過的相關書籍或者技術文件,供自己需要查詢的時候有個資料庫備用。

1. LabVIEW 7.1 Express圖控程式應用:含自動量測及硬碟應用_全華_惠汝生

---這本是之前在當專題生的時候,實驗室專用的書籍,因為也沒人在看,所以就拿來學習了,也因為這樣打了基礎的底子。

2. 虛擬儀控程式設計-LabVIEW 7X_高立_蕭子健

---這本是碩士班的時候自己買的,感受到原本的那本內容已經不敷使用,除了網路上取得的資訊外,還是習慣買一本紙本書籍來閱讀,這本算是蠻齊全且講述內容比較詳述的一本書。不過從開始學LabVIEW到現在,發現中文書籍(繁體)的"廣度"與"深度"大概就這樣了!!!有點可惜,既然使用的人與領域這麼多,卻沒幾本堪用的。我想這跟國內的教授(或者專科老師)不願意花時間在寫書上面吧!!!!

3. The LabVIEW Style BooK_ Peter Blume
_ Prentice Hall
---這本在對岸都已經出簡體中文版本的書籍,甚至被尊稱為LabVIEW聖經(從這邊更可以看到國內出版商與專業者的出書態度)實在是一本好書,目前網路上也可以找到很多"綠色"版本,不過我還是想要將這本書買來好好研讀。

4. Image Acquisition and Processing with LabVIEW_ Christopher G. Relf
_ CRC PRESS
---最近(2013)在進行跟影像相關的專題,這本書講述了很多基本的概念,也開始補足我的很多不足之處,也許想要購入的清單之一。
參考網址:[學習紀錄] LabVIEW- Image Acquisition Processing with LabVIEW

5. LabVIEW Pro 的基礎教學

---事隔多年(2011-2013)又開始撰寫程式,除了將高立的那本書本又翻過一遍後,在快速地瀏覽與複習LabVIEW Pro提供的基礎教學,還是一樣有很多收穫的!!!
參考網址:[學習紀錄] 論壇教學&技術文章等等

6. LabVIEW Pro 的每月專題分享
---網站有駐站工程師大約每個月會分享一個深入的技術專題,雖說深入,但也是使用淺顯易懂的敘述來提供撰寫程式的靈感以及樣本。很多都是初學者會疏忽或者還不知道的Know-how。
參考網址:[學習紀錄] 論壇教學&技術文章等等


7. IT360-LabVIEW基礎教學
---這是IT360(之前為LabVIEW360)版大整理出來的基礎教學,搭配豐富的圖集,以及詳細的內容,也是非常適合初學者瀏覽建立初步的概念。
參考網址:[學習紀錄] 論壇教學&技術文章等等

8. 介面設計與實習,使用LabVIEW(NI-VISA)_2nd_許永和_全華
---LabVIEW雖然接觸了不少,但是基於LabVIEW的重心就是與儀器溝通,而硬體部分卻是我比較少觸及的領域,套句Feynman說的:這下面的空間還很大*,還有很多值得花時間學習的。*註:原文是針對奈米世界的描述。

9. Image Processing with LabVIEW and IMAQ Vision_ Thomas Klinger_ Prentice Hall
---這本書是借來跟"Image Acquisition and Processing with LabVIEW"搭配使用的,有些地方是前述的書中沒提到的,不過基本上這兩本都是舊書了,使用的都是IMAQ擷取影像,而目前都可以使用IMAQdx進行擷取。時代的進步真的是很快啊!,不過很多觀念都還是通用就是了。

10. 我和LabVIEW 一個NI工程師的十年編程經驗_阮奇楨_北京航空航天大學出版社
---這本書是在論壇或者網路都有人介紹,作者本身就俱有在NI十年以上的經驗,所以寫出中文為主的LabVIEW書籍實在是名符其實,可惜台灣並不多,除了幾個常見的作者外,也很少有專家願意花時間在“寫書”上面。但是我覺得這個跟此LabVIEW在台灣的普及度也是有關,畢竟使用的人不多也不深入的話,對出版社來講,就沒有這個市場。

11. LabVIEW寶典_陳樹學&劉萱_電子工業出版社
---

2013年5月8日 星期三

自定義字串(數字)的長度

前言:
在撰寫數據存檔中時,會遇到一個不怎麼"要緊"的問題,就是時間格式。若存檔如-14:5:16 & 14:12:25 在note(.txt)裡面會對齊不一致,不過其實在Excel裡面打開就沒問題啦。只是想說可以寫個小小的轉換器來定義固定長度的字串。

Code:
後記:
這樣在需要定義某個input string的長度時,就可以自動補足位數。注意!只能增加,不能減少啊!

Save data with file head information

前言:
通常存檔都是直接存數據即可,不過有時候若要完整的檔案格式,可以加上檔案抬頭(file head)這個也是這一年接觸較多不同儀器才比較瞭解的。

問題:
若自己想要寫個檔案抬頭怎麼辦呢?好像在低階的檔案格式可以設定!??

Code:
這個想法是接觸Arduino後,開始寫Wiring的語法開始慢慢建立的觀念所衍生的,就是一開始的宣告。或者講初始化吧,對於這些專有名詞並不是很統一,自己先瞭解意義就好。


後記:
以後類似的需求,應該就可以以這樣的方式套用之,方便許多了,也許我也可以將這個加到之前替RH meter所寫的程式中。

使用loop中的iteration來建立可歸零的變數

前言:
這個小方法是從時間歸零的方式修改而來,有時候在程式中需要存檔或者有個固定遞增的數字,雖然一般情形下用iteration就可以了,可是也許有時候中途會暫停,然後想要使用的時候再用,這樣就要考慮到歸零的問題囉。

Code:
後記:
其實這個應該不算是subVI,因為有用到for/ while loop所以並不適合額外建立subVI,不過可以直接應用在主程式內。

2013年5月2日 星期四

String with comma to be converted to the string array

前言:
SubVI系列的第一篇,因為發現在怎麼整理資料,還是會遺漏,所以寫的subVI都發表成文章,然後標簽"SubVI"作為索引好了。這樣以後想到什麼來這邊找會比較快。

問題:
跟儀器溝通取回來的資料,有時候都是comma分隔(至少目前都是),所以每次都要選取特定資料或者事後切割都是個不小的問題,因此寫了個可以將一整串字串讀取,將其分割(有另寫個分割dash的部分)在組合成陣列(array)。
在LabVIEW裡面好像沒有現成的.vi可以使用的樣子,希望"已經有"或者"以後會有"。

Code:

後記:
這個VI只會將comma分隔的所有string分成string array,所以若每個element中有"空白(space)"的話並不會刪除,雖然撰寫的時候有想過是否要再進一步處理,不過想說這樣又太過複雜,所以決定就簡易一點,若有需求再額外處理即可。

2013年5月1日 星期三

傳回 Boolean array 對應的 index number

前言:
因為修改程式所需,想要設計一個布林陣列,然後可能會選擇其中幾個,用這幾個的index number去對另一個陣列取出相對應位置的資料。

程式設計:
一開始想了好一陣子,後來用兩個陣列,一個String array和一個Boolean array。因為若使用"Boolean to (0-1)",只會出現相對應位置為0/1而已。而使用"Boolean array to number"也只會出現對於二進制(0/1)換算後的總值,要再進一步的換算都有點複雜度,"決定!"用最簡易的方式寫一個VI。

Code:
後記:
這樣就可以任選某幾個布林按鈕,然後回傳所選擇的位置(index number)囉。

PS:
20130502
將此VI設定為SubVI後,放在主要的VI中,覺得輸入的資料太長(有21個item)非常的占版面,而且要將選項(item)與布林(Boolean bottom)對齊(若使用Vertical scrollbar的話),有對應上的小麻煩。忽然想起來之前碩班寫的程式中,可以使用"List Box"解決,因為"List Box"可以輸入文字,然後輸出其對應的index number,真是健忘,以前用的這麼好用的小方法呢!!

不過真的忘了之前是如何將"一大堆"資料"貼上"List box了。還好這次只有21項,所以就先手動貼上囉。

Code:
後記:
這個部分是使用在DMA的設計,因為與儀器的溝通可以呼叫所有的Data但並不是全部都需要,因此事前的篩選也許是個好方法(當然也可以事後篩選就是了)。