LabVIEW灰度圖像操作與運算(基礎篇—2)
完成機器視覺(jué)系統的搭建、校準并且確認其可以采集檢測目標的圖像后,就可以集中精力開(kāi)發(fā)各種圖像分析、處理以及模式識別算法。
為了設計準確性和魯棒性都較高的算法,并提高其執行速度,一般需要事先對整幅圖像或部分像素進(jìn)行操作,使圖像尺寸或形狀更適合計算機處理。某些時(shí)候還要對圖像進(jìn)行算術(shù)和邏輯運算,以消除噪聲或提高圖像的對比度。這些前期的圖像操作或運算不僅會(huì )在空間域增強圖像,還能極大地提高后續算法的執行速度及其有效性。
1
像素操作
像素操作(Pixel Manipulation)通常用在各種圖像處理算法之前,為算法的順利執行做準備。像素操作具體包括:讀取或設置圖像中的某個(gè)像素值、更改某個(gè)區域的所有像素值、逐行或逐列讀取或更改像素值等。下圖顯示了NI Vision提供的像素操作函數,它們位于LabVIEW的視覺(jué)與運動(dòng)→Vision Utilities→Pixel Manipulation函數選板中。
函數的說(shuō)明和使用可參見(jiàn)幫助文檔:

使用LabVIEW更改單點(diǎn)像素值、行列像素值、線(xiàn)段所覆蓋像素值以及圖像填充的實(shí)際例子,加深對像素操作的理解和應用。
程序設計思路如下所示:
程序開(kāi)始從文件中讀入圖像Lena,此后IMAQ SetPixelValue將坐標為(200,200)的像素值更改為255(白色),并用IMAQ GetPixelValue讀取改動(dòng)后的值,以確認更改成功。
IMAQ SetRowCol可以更改圖像中某一行或某一列的數據,由于設置了行參數Row為FALSE,因此它將使用Pixels (U8)數組中的值更改編號為50的一列數據。
程序中Pixels (U8)數組中僅有兩個(gè)元素,此時(shí),進(jìn)行替換時(shí)只有前兩個(gè)像素被更改。
IMAQ GetRowCol可以讀取更改后的第50列像素值,以確認像素更改操作的結果。
IMAQ GetPixelLine可以返回 (10,10)和(60,60)兩點(diǎn)所確定的線(xiàn)段覆蓋的像素值,這些返回的像素值被Replace Array Subset用含有100個(gè)元素的子數組替換后,再次作為IMAQ SetPixelLine的輸入,用于更改線(xiàn)段所覆蓋的像素值。
程序中IMAQ Filllmage會(huì )用黑色(像素值為0)對圖像進(jìn)行填充,由于使用了圖像遮罩,因此只有遮罩圖像中非零像素所覆蓋的部分會(huì )被填充。默認情況下,圖像遮罩會(huì )被放置在使用它的圖像原點(diǎn),程序并未使用默認值,而是用IMAQ SetOffset將圖像遮罩左上角移動(dòng)到使用它的圖像中(220,220)位置。
程序設計如下所示:

程序運行效果如下所示:

2
灰度圖像操作
圖像操作(Image Manipulation)是指對圖像執行的平移(Shift/Translation)、旋轉(Rotate)、縮放(Zoom)、拉直(Unwrap)等幾何變換以及重新采樣、對稱(chēng)(Symmetry)變換、提取(Extract)圖像某一區域的操作等。大多數圖像操作函數并不直接改變圖像的像素值,而只是在空間上對它們進(jìn)行重新組織或插值。
下圖顯示了NI Vision提供的圖像操作函數,它們位于LabVIEW的視覺(jué)與運動(dòng)→Vision Utilities→lmage Manipulation函數選板中。

函數的說(shuō)明和使用可參見(jiàn)幫助文檔:

2.1、圖像平移、旋轉
圖像平移是指將圖像中所有的點(diǎn)都沿著(zhù)水平或垂直方向移動(dòng)一定的距離。若假定像素的初始坐標為(x,yo),經(jīng)平移后其對應的坐標為(x,yt),圖像在x、y方向的平移量分別為xoffset和yoffset,則有:
圖像旋轉是指圖像像素以某一點(diǎn)為旋轉點(diǎn),沿逆時(shí)針(角度為正)或順時(shí)針(角度為負)轉動(dòng)一定角度。多數情況下,圖像旋轉操作都以圖像中心點(diǎn)作為旋轉點(diǎn)。和圖像平移類(lèi)似,旋轉操作也會(huì )引起圖像大小的改變。圖像中部分像素可能會(huì )移動(dòng)到原圖范圍之外,此時(shí)可以丟棄這部分像素,以保持原圖的尺寸,也可以擴展圖像尺寸以匹配旋轉后的圖像,如下圖所示:

接下來(lái)使用LabVIEW實(shí)現圖像平移和旋轉,程序設計思路如下所示:
程序先在內存中為源圖像和圖像處理過(guò)程分配了緩沖區Src和Dst,并從圖像文件中讀入大小為512×512的待處理圖像Lena。
隨后使用IMAQ Shift進(jìn)行圖像平移操作時(shí),由于Dst緩沖被連接至VI的ImageDst參數,因此平移操作會(huì )保持源圖數據不變,而只是基于其數據將圖像延水平和垂直方向均移動(dòng)80像素的結果保存在Dst緩沖區中。
對于那些因平移操作變?yōu)榭瞻椎膮^域,根據Replace Value參數的值,VI將其灰度值填充為200。
程序中的IMAQ Rotate可將圖像沿順時(shí)針?lè )较蛐D30°(-30°)。
對于那些因旋轉無(wú)法在源圖像中找到對應值的像素,VI使用了雙線(xiàn)性插值方法計算其值;
而對于空白區域,則使用了默認值0進(jìn)行填充。
由于圖像旋轉后的尺寸會(huì )有變化,部分圖像數據可能會(huì )移動(dòng)到源圖像尺寸之外,因此需要通過(guò)Maintain Size參數來(lái)選擇是保持原圖像尺寸不變(True),還是要保留所有圖像數據(False)。
程序設計如下所示:

由程序的運行結果可以看出,當選擇保持圖像尺寸不變時(shí),旋轉到源圖像之外的數據會(huì )被丟棄;而當選擇保留所有圖像數據時(shí),旋轉后的圖像尺寸會(huì )比源圖像尺寸大。效果如下所示:

2.2、圖像縮小、放大
使用IMAQ Resample、IMAQ Expand和IMAQ Extract 2實(shí)現圖像縮放功能。程序設計思路如下:
程序先在內存中為源圖像和圖像處理過(guò)程分配了緩沖區Src和Dst,并從圖像文件中讀入大小為512×512的待處理圖像Lena。
緊接著(zhù)IMAQ Resample和IMAQ Extract 2分別將圖像尺寸縮小至64×64。
雖然兩個(gè)VI均將圖像縮小至同樣尺寸,但它們使用的方法和圖像縮小后的效果卻完全不同。
IMAQResample在縮小圖像時(shí)基于三次樣條插值方法填充新圖像中的數據,而IMAQ Extract2則每隔8行、8列抽取數據行列。
完成圖像縮小后,程序又使用IMAQ Resample和IMAQ Expand將縮小后的圖像放大至512×512。
程序設計如下所示:

程序運行效果如下所示:

2.3、圖像對稱(chēng)變換
Nl Vision使用IMAQ Symmetry實(shí)現各種類(lèi)型的圖像對稱(chēng)變換。開(kāi)發(fā)人員只需根據需要選擇對稱(chēng)變換的類(lèi)型,而無(wú)須關(guān)心各種矩陣計算的細節,即可得到想要的結果。需要注意的是,主次對角線(xiàn)對稱(chēng)操作僅適用于長(cháng)、寬相等的圖像。
程序設計如下所示:

程序運行效果如下所示:

2.4、3D可視化
Nl Vision還提供了一個(gè)以3D方式顯示灰度圖像數據的圖像顯示函數IMAQ 3DView VI。它在顯示圖像數據時(shí),用OXY平面表示像素位置坐標,而用Z軸表示像素,程序實(shí)現如下所示:

程序運行效果如下所示:

3
灰度圖像運算
圖像運算是指對一幅或多幅圖像執行加(Add)、減(Subtract)、乘(Multiply)、除(Divide)等代數運算,與(And)、或(Or)、非(Not)、異或(Xor)等邏輯運算,兩幅圖像的比較(Compare)以及求模(Modulo)、求差值的絕對值(AbsoluteDifference)等操作的過(guò)程。它們不僅可用于圖像采集過(guò)程中的延時(shí)比較、圖像背景中的光線(xiàn)偏移矯正、相互連接或相互交疊圖像目標的識別以及多幅圖像與某一圖像模型之間的對比等,還可用于圖像的閾值化或遮罩處理、亮度或對比度的調節等。此外,通過(guò)對多幅相同場(chǎng)景的圖像求平均,還能實(shí)現圖像的濾波功能。
下圖顯示了Nl Vision提供的圖像運算函數,它們位于LabVIEW的視覺(jué)與運動(dòng)→lmageProcessing→Operator函數子選板中。

函數的說(shuō)明和使用可參見(jiàn)幫助文檔:

圖像運算過(guò)程遵循以下規則:
1、兩幅灰度圖像進(jìn)行運算時(shí),圖像中的像素逐―進(jìn)行點(diǎn)對點(diǎn)運算。
2、一幅灰度圖像與某一常量進(jìn)行運算時(shí),圖像中的所有像素均與該常量進(jìn)行該運算。
3、當RGB彩色圖像與灰度圖像或某一常量進(jìn)行運算時(shí),將灰度圖像或常量與RGB圖像的每一分量進(jìn)行運算。
4、兩幅RGB圖像進(jìn)行運算時(shí),對應分量進(jìn)行運算。
此外,當參與運算的兩幅圖像類(lèi)型不同時(shí),運算后所得圖像的類(lèi)型將與位深度較大的圖像類(lèi)型保持一致。例如,類(lèi)型為U8的灰度圖像與類(lèi)型為I16的灰度圖像相加時(shí),所得到的圖像類(lèi)型為I16;當某一灰度圖像減去某一常量時(shí),所得圖像的類(lèi)型仍為灰度圖像;U8類(lèi)型的灰度圖像或常量與RGB32彩色圖像進(jìn)行運算時(shí),得到的圖像仍為RGB32彩色圖像;RGB32與RGB64圖像進(jìn)行運算時(shí),將得到類(lèi)型為RGB64的圖像。
3.1、圖像平均降噪
圖像加法運算最常見(jiàn)的用途是實(shí)現圖像的疊加功能。利用此功能,可以將不同圖像中的目標合并到同一圖像中。圖像和一個(gè)常量相加可以提高圖像的整體亮度。此外,利用圖像相加運算可以實(shí)現圖像的空間濾波功能。
具體來(lái)說(shuō),可以對同一場(chǎng)景的多幅圖像求平均,以便有效地降低加性(additive)隨機噪聲。對于經(jīng)過(guò)長(cháng)距離模擬通信方式傳送的圖像(如航天器傳回的星際圖像),這種處理必不可少。
接下來(lái)使用圖像加法運算實(shí)現圖像平均降噪,程序設計思路如下所示:
程序先在內存分配了Average和temp兩個(gè)緩沖區。
然后枚舉出保存噪聲圖像的文件夾中所有.png圖文件名,并將第一幅圖像讀入Average緩沖區中。
此后,For循環(huán)逐個(gè)將其他噪聲圖像讀入temp緩沖區,并與Average中的圖像進(jìn)行相加。
相加的結果將替換Average緩沖區中的原有圖像,而且其圖像引用會(huì )被shift寄存器傳遞至下一次循環(huán)。
在后續循環(huán)中,新讀入temp緩沖區的圖像將繼續與之前Average緩沖區中的計算結果相加,直到所有圖像都加到一起。
循環(huán)結束后,只要將Average緩沖區中的圖像相加結果與圖像總數相除,即可得到圖像的平均結果。
由于圖像相加過(guò)程可能出現計算結果超出原圖像的數據類(lèi)型范圍的情況,因此在循環(huán)開(kāi)始前,先將保存計算結果的Average緩沖區中圖像的類(lèi)型由U8轉換為I16,再在計算完成后轉換為原類(lèi)型。
程序實(shí)現如下所示:

運行程序并觀(guān)察程序運行過(guò)程中圖像的顯示,不難發(fā)現經(jīng)平均計算后的圖像明顯比原圖像含有較少的噪聲,效果如下所示:

3.2、提取夜視儀閃光故障點(diǎn)
圖像相減運算又稱(chēng)為圖像差分運算,常用于去除不需要的疊加性圖案或檢測場(chǎng)景的變化或運動(dòng)目標。在工業(yè)環(huán)境下,如果圖像背景可控,差分運算和閾值化處理結合能快速有效地建立機器視覺(jué)系統。如果將同一景物在不同時(shí)間拍攝的圖像或同一景物在不同波段的圖像相減,即可獲得圖像的差影。圖像差影可用于動(dòng)態(tài)監測、運動(dòng)目標的檢測和跟蹤、圖像背景的消除及目標識別等。差影技術(shù)還可以用于消除圖像中不必要的疊加圖像,將混合圖像中重要的信息分離出來(lái)。
接下來(lái)使用圖像相減運算實(shí)現提取夜視儀閃光故障點(diǎn),士兵常用夜視設備在夜間進(jìn)行偵察瞄準等活動(dòng),為避免出現誤判,必須對設備進(jìn)行穩定性試驗,確保生產(chǎn)設備的可靠性,即正常工作環(huán)境下,輸出的圖像能在足夠長(cháng)的時(shí)間內保持穩定,且無(wú)黑斑或閃光出現。為了提取閃光點(diǎn),程序在濾除兩幅圖像中的高頻噪聲后將它們相減。為了便于觀(guān)察,程序還使用IMAQ Inverse對計算結果中的圖像灰度進(jìn)行了反轉。
程序實(shí)現如下所示:

效果如下所示:

3.3、人體骨骼圖像增強
圖像的乘法和除法運算可用來(lái)擴展或壓縮圖像的灰度級,實(shí)現灰度級變換。常見(jiàn)的用法是圖像與一個(gè)常數相乘或相除,以調整圖像灰度。
乘法運算也可用來(lái)遮住或提取圖像的某些部分,其典型應用是通過(guò)遮罩提取圖像。提取時(shí),對于需要保留下來(lái)的區域,掩模圖像的值置為1;而在需要被抑制掉的區域,掩模圖像的值置為0。此外,由于時(shí)域的卷積和相關(guān)運算對應于頻域的乘積運算,因此乘法運算也被用作一種技巧來(lái)實(shí)現卷積或相關(guān)處理。
圖像的除法運算可被看作一幅圖像取反后與另一幅圖像相乘的結果,它不但可用于改變圖像的灰度級,還能用來(lái)檢測圖像間的差別。圖像絕對值運算計算的是兩幅圖像中對應像素相減后的絕對值,而除法運算則計算對應像素的比率變化,因此也常稱(chēng)圖像除法為“比率變換”。
接下來(lái)使用乘法運算增強人體骨骼圖像,原圖像中的人體骨骼很難看清,有必要將圖像和一個(gè)常量相乘以擴展其灰度級,從而增強圖像的亮度和對比度。
程序設計思路如下所示:
程序先為圖像讀取分配了緩沖區Src,并從文件PET.tif中讀入灰度圖像數據。
為了避免乘法運算過(guò)程中數據溢出,程序將讀入的灰度圖像類(lèi)型從U8轉換為I16,并且分配了I16類(lèi)型的緩沖區以保存計算結果。
IMAQ Multiply將I16類(lèi)型的源圖像與常量4相乘,將其灰度級放大4倍。
此后再由IMAQ Cast lmage將計算結果轉換為U8類(lèi)型并顯示在圖像控件中。
程序結束前釋放所有分配的緩沖區。
由程序運行結果可以看出,倍乘后的圖像明顯比原圖像易于觀(guān)察。
程序實(shí)現如下所示:

效果如下所示:

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
攝像頭相關(guān)文章:攝像頭原理