About虛擬&實際

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

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的合併使用