博客專欄

        EEPW首頁 > 博客 > LabVIEW灰度圖像操作與運算(基礎篇—2)

        LabVIEW灰度圖像操作與運算(基礎篇—2)

        發布人:美男子玩編程 時間:2022-06-22 來源:工程師 發布文章

        完成機器視覺系統的搭建、校準并且確認其可以采集檢測目標的圖像后,就可以集中精力開發各種圖像分析、處理以及模式識別算法。


        為了設計準確性和魯棒性都較高的算法,并提高其執行速度,一般需要事先對整幅圖像或部分像素進行操作,使圖像尺寸或形狀更適合計算機處理。某些時候還要對圖像進行算術和邏輯運算,以消除噪聲或提高圖像的對比度。這些前期的圖像操作或運算不僅會在空間域增強圖像,還能極大地提高后續算法的執行速度及其有效性。



        1


        像素操作



        像素操作(Pixel Manipulation)通常用在各種圖像處理算法之前,為算法的順利執行做準備。像素操作具體包括:讀取或設置圖像中的某個像素值、更改某個區域的所有像素值、逐行或逐列讀取或更改像素值等。下圖顯示了NI Vision提供的像素操作函數,它們位于LabVIEW的視覺與運動→Vision Utilities→Pixel Manipulation函數選板中。


        圖片


        函數的說明和使用可參見幫助文檔:


        圖片


        使用LabVIEW更改單點像素值、行列像素值、線段所覆蓋像素值以及圖像填充的實際例子,加深對像素操作的理解和應用。


        程序設計思路如下所示:

        • 程序開始從文件中讀入圖像Lena,此后IMAQ SetPixelValue將坐標為(200,200)的像素值更改為255(白色),并用IMAQ GetPixelValue讀取改動后的值,以確認更改成功。

        • IMAQ SetRowCol可以更改圖像中某一行或某一列的數據,由于設置了行參數Row為FALSE,因此它將使用Pixels (U8)數組中的值更改編號為50的一列數據。

        • 程序中Pixels (U8)數組中僅有兩個元素,此時,進行替換時只有前兩個像素被更改。

        • IMAQ GetRowCol可以讀取更改后的第50列像素值,以確認像素更改操作的結果。

        • IMAQ GetPixelLine可以返回 (10,10)和(60,60)兩點所確定的線段覆蓋的像素值,這些返回的像素值被Replace Array Subset用含有100個元素的子數組替換后,再次作為IMAQ SetPixelLine的輸入,用于更改線段所覆蓋的像素值。

        • 程序中IMAQ Filllmage會用黑色(像素值為0)對圖像進行填充,由于使用了圖像遮罩,因此只有遮罩圖像中非零像素所覆蓋的部分會被填充。默認情況下,圖像遮罩會被放置在使用它的圖像原點,程序并未使用默認值,而是用IMAQ SetOffset將圖像遮罩左上角移動到使用它的圖像中(220,220)位置。


        程序設計如下所示:


        圖片


        程序運行效果如下所示:


        圖片



        2


        灰度圖像操作



        圖像操作(Image Manipulation)是指對圖像執行的平移(Shift/Translation)、旋轉(Rotate)、縮放(Zoom)、拉直(Unwrap)等幾何變換以及重新采樣、對稱(Symmetry)變換、提取(Extract)圖像某一區域的操作等。大多數圖像操作函數并不直接改變圖像的像素值,而只是在空間上對它們進行重新組織或插值。


        下圖顯示了NI Vision提供的圖像操作函數,它們位于LabVIEW的視覺與運動→Vision Utilities→lmage Manipulation函數選板中。


        圖片


        函數的說明和使用可參見幫助文檔:


        圖片


        2.1、圖像平移、旋轉


        圖像平移是指將圖像中所有的點都沿著水平或垂直方向移動一定的距離。若假定像素的初始坐標為(x,yo),經平移后其對應的坐標為(x,yt),圖像在x、y方向的平移量分別為xoffset和yoffset,則有:


        圖片


        圖像旋轉是指圖像像素以某一點為旋轉點,沿逆時針(角度為正)或順時針(角度為負)轉動一定角度。多數情況下,圖像旋轉操作都以圖像中心點作為旋轉點。和圖像平移類似,旋轉操作也會引起圖像大小的改變。圖像中部分像素可能會移動到原圖范圍之外,此時可以丟棄這部分像素,以保持原圖的尺寸,也可以擴展圖像尺寸以匹配旋轉后的圖像,如下圖所示:


        圖片


        接下來使用LabVIEW實現圖像平移和旋轉,程序設計思路如下所示:

        • 程序先在內存中為源圖像和圖像處理過程分配了緩沖區Src和Dst,并從圖像文件中讀入大小為512×512的待處理圖像Lena。

        • 隨后使用IMAQ Shift進行圖像平移操作時,由于Dst緩沖被連接至VI的ImageDst參數,因此平移操作會保持源圖數據不變,而只是基于其數據將圖像延水平和垂直方向均移動80像素的結果保存在Dst緩沖區中。

        • 對于那些因平移操作變為空白的區域,根據Replace Value參數的值,VI將其灰度值填充為200。

        • 程序中的IMAQ Rotate可將圖像沿順時針方向旋轉30°(-30°)。

          對于那些因旋轉無法在源圖像中找到對應值的像素,VI使用了雙線性插值方法計算其值;

          而對于空白區域,則使用了默認值0進行填充。

        • 由于圖像旋轉后的尺寸會有變化,部分圖像數據可能會移動到源圖像尺寸之外,因此需要通過Maintain Size參數來選擇是保持原圖像尺寸不變(True),還是要保留所有圖像數據(False)。


        程序設計如下所示:


        圖片


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


        圖片


        2.2、圖像縮小、放大


        使用IMAQ Resample、IMAQ Expand和IMAQ Extract 2實現圖像縮放功能。程序設計思路如下:

        • 程序先在內存中為源圖像和圖像處理過程分配了緩沖區Src和Dst,并從圖像文件中讀入大小為512×512的待處理圖像Lena。

        • 緊接著IMAQ Resample和IMAQ Extract 2分別將圖像尺寸縮小至64×64。

          雖然兩個VI均將圖像縮小至同樣尺寸,但它們使用的方法和圖像縮小后的效果卻完全不同。

        • IMAQResample在縮小圖像時基于三次樣條插值方法填充新圖像中的數據,而IMAQ Extract2則每隔8行、8列抽取數據行列。

        • 完成圖像縮小后,程序又使用IMAQ Resample和IMAQ Expand將縮小后的圖像放大至512×512。


        程序設計如下所示:


        圖片


        程序運行效果如下所示:


        圖片


        2.3、圖像對稱變換


        Nl Vision使用IMAQ Symmetry實現各種類型的圖像對稱變換。開發人員只需根據需要選擇對稱變換的類型,而無須關心各種矩陣計算的細節,即可得到想要的結果。需要注意的是,主次對角線對稱操作僅適用于長、寬相等的圖像。


        程序設計如下所示:


        圖片


        程序運行效果如下所示:


        圖片


        2.4、3D可視化


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


        圖片


        程序運行效果如下所示:


        圖片



        3


        灰度圖像運算



        圖像運算是指對一幅或多幅圖像執行加(Add)、減(Subtract)、乘(Multiply)、除(Divide)等代數運算,與(And)、或(Or)、非(Not)、異或(Xor)等邏輯運算,兩幅圖像的比較(Compare)以及求模(Modulo)、求差值的絕對值(AbsoluteDifference)等操作的過程。它們不僅可用于圖像采集過程中的延時比較、圖像背景中的光線偏移矯正、相互連接或相互交疊圖像目標的識別以及多幅圖像與某一圖像模型之間的對比等,還可用于圖像的閾值化或遮罩處理、亮度或對比度的調節等。此外,通過對多幅相同場景的圖像求平均,還能實現圖像的濾波功能。


        下圖顯示了Nl Vision提供的圖像運算函數,它們位于LabVIEW的視覺與運動→lmageProcessing→Operator函數子選板中。


        圖片


        函數的說明和使用可參見幫助文檔:


        圖片


        圖像運算過程遵循以下規則:

        1、兩幅灰度圖像進行運算時,圖像中的像素逐―進行點對點運算。

        2、一幅灰度圖像與某一常量進行運算時,圖像中的所有像素均與該常量進行該運算。

        3、當RGB彩色圖像與灰度圖像或某一常量進行運算時,將灰度圖像或常量與RGB圖像的每一分量進行運算。

        4、兩幅RGB圖像進行運算時,對應分量進行運算。


        此外,當參與運算的兩幅圖像類型不同時,運算后所得圖像的類型將與位深度較大的圖像類型保持一致。例如,類型為U8的灰度圖像與類型為I16的灰度圖像相加時,所得到的圖像類型為I16;當某一灰度圖像減去某一常量時,所得圖像的類型仍為灰度圖像;U8類型的灰度圖像或常量與RGB32彩色圖像進行運算時,得到的圖像仍為RGB32彩色圖像;RGB32與RGB64圖像進行運算時,將得到類型為RGB64的圖像。


        3.1、圖像平均降噪


        圖像加法運算最常見的用途是實現圖像的疊加功能。利用此功能,可以將不同圖像中的目標合并到同一圖像中。圖像和一個常量相加可以提高圖像的整體亮度。此外,利用圖像相加運算可以實現圖像的空間濾波功能。


        具體來說,可以對同一場景的多幅圖像求平均,以便有效地降低加性(additive)隨機噪聲。對于經過長距離模擬通信方式傳送的圖像(如航天器傳回的星際圖像),這種處理必不可少。


        接下來使用圖像加法運算實現圖像平均降噪,程序設計思路如下所示:

        • 程序先在內存分配了Average和temp兩個緩沖區。

        • 然后枚舉出保存噪聲圖像的文件夾中所有.png圖文件名,并將第一幅圖像讀入Average緩沖區中。

        • 此后,For循環逐個將其他噪聲圖像讀入temp緩沖區,并與Average中的圖像進行相加。

          相加的結果將替換Average緩沖區中的原有圖像,而且其圖像引用會被shift寄存器傳遞至下一次循環。

          在后續循環中,新讀入temp緩沖區的圖像將繼續與之前Average緩沖區中的計算結果相加,直到所有圖像都加到一起。

        • 循環結束后,只要將Average緩沖區中的圖像相加結果與圖像總數相除,即可得到圖像的平均結果。

        • 由于圖像相加過程可能出現計算結果超出原圖像的數據類型范圍的情況,因此在循環開始前,先將保存計算結果的Average緩沖區中圖像的類型由U8轉換為I16,再在計算完成后轉換為原類型。


        程序實現如下所示:


        圖片


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


        圖片


        3.2、提取夜視儀閃光故障點


        圖像相減運算又稱為圖像差分運算,常用于去除不需要的疊加性圖案或檢測場景的變化或運動目標。在工業環境下,如果圖像背景可控,差分運算和閾值化處理結合能快速有效地建立機器視覺系統。如果將同一景物在不同時間拍攝的圖像或同一景物在不同波段的圖像相減,即可獲得圖像的差影。圖像差影可用于動態監測、運動目標的檢測和跟蹤、圖像背景的消除及目標識別等。差影技術還可以用于消除圖像中不必要的疊加圖像,將混合圖像中重要的信息分離出來。


        接下來使用圖像相減運算實現提取夜視儀閃光故障點,士兵常用夜視設備在夜間進行偵察瞄準等活動,為避免出現誤判,必須對設備進行穩定性試驗,確保生產設備的可靠性,即正常工作環境下,輸出的圖像能在足夠長的時間內保持穩定,且無黑斑或閃光出現。為了提取閃光點,程序在濾除兩幅圖像中的高頻噪聲后將它們相減。為了便于觀察,程序還使用IMAQ Inverse對計算結果中的圖像灰度進行了反轉。


        程序實現如下所示:


        圖片


        效果如下所示:


        圖片


        3.3、人體骨骼圖像增強


        圖像的乘法和除法運算可用來擴展或壓縮圖像的灰度級,實現灰度級變換。常見的用法是圖像與一個常數相乘或相除,以調整圖像灰度。


        乘法運算也可用來遮住或提取圖像的某些部分,其典型應用是通過遮罩提取圖像。提取時,對于需要保留下來的區域,掩模圖像的值置為1;而在需要被抑制掉的區域,掩模圖像的值置為0。此外,由于時域的卷積和相關運算對應于頻域的乘積運算,因此乘法運算也被用作一種技巧來實現卷積或相關處理。


        圖像的除法運算可被看作一幅圖像取反后與另一幅圖像相乘的結果,它不但可用于改變圖像的灰度級,還能用來檢測圖像間的差別。圖像絕對值運算計算的是兩幅圖像中對應像素相減后的絕對值,而除法運算則計算對應像素的比率變化,因此也常稱圖像除法為“比率變換”。


        接下來使用乘法運算增強人體骨骼圖像,原圖像中的人體骨骼很難看清,有必要將圖像和一個常量相乘以擴展其灰度級,從而增強圖像的亮度和對比度。


        程序設計思路如下所示:

        • 程序先為圖像讀取分配了緩沖區Src,并從文件PET.tif中讀入灰度圖像數據。

        • 為了避免乘法運算過程中數據溢出,程序將讀入的灰度圖像類型從U8轉換為I16,并且分配了I16類型的緩沖區以保存計算結果。

        • IMAQ Multiply將I16類型的源圖像與常量4相乘,將其灰度級放大4倍。

        • 此后再由IMAQ Cast lmage將計算結果轉換為U8類型并顯示在圖像控件中。

        • 程序結束前釋放所有分配的緩沖區。

          由程序運行結果可以看出,倍乘后的圖像明顯比原圖像易于觀察。


        程序實現如下所示:


        圖片


        效果如下所示:


        圖片


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        攝像頭相關文章:攝像頭原理


        關鍵詞: LabVIEW

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安龙县| 夏津县| 板桥市| 颍上县| 密山市| 门源| 抚松县| 敦煌市| 黄浦区| 新营市| 城市| 南城县| 公安县| 明光市| 江门市| 玉林市| 吉首市| 汤原县| 浙江省| 栾城县| 盐亭县| 休宁县| 镇安县| 灵宝市| 忻州市| 合作市| 勐海县| 洞头县| 华池县| 乌兰察布市| 建昌县| 武宣县| 阿克陶县| 垦利县| 湄潭县| 乾安县| 海城市| 赣榆县| 达州市| 大英县| 名山县|