天天看點

LabVIEW圖像增強算法(基礎篇—5)

目錄

1、空間域圖像增強算法

1.1、線性卷積

1.1.1、一維卷積

1.1.2、二維卷積

1.2、領域增強

1.2.1、線性濾波

1.2.2、非線性濾波

2、頻率域圖像增強算法

2.1、傅裡葉變換算法

2.2、圖像頻域濾波

在采集或傳遞圖像的過程中常會受到各種噪聲的影響,這會導緻其中包含的重要資訊很難被讀取和識别。例如,不均勻的光照會使圖像灰階過于集中;攝像頭的數模轉換電路所産生的噪聲會使圖像品質降低;圖像顯示裝置的局限性會造成圖像顯示顔色減少等。

是以,在對圖像進行分析處理之前,必須對圖像進行增強,使其更适合人或機器進一步分析處理。

圖像增強是圖像處理的一個重要分支。它針對給定圖像的應用場合,通過各種算法增強圖像中的有用資訊,有目的地強調圖像的整體或局部特性,抑制不感興趣的區域,擴大圖像中不同特征之間的差别,改善圖像品質,加強圖像判讀和識别效果,使圖像更能滿足分析或機器決策的需要。

圖像增強一般并不能增加原圖像資訊,但是能針對一些成像條件,突出微弱信号,使資訊更容易分辨。圖像增強算法根據處理過程所在的空間不同,可分為基于空間域的算法和基于頻率域(變換域)的算法兩大類,如下圖所示:

LabVIEW圖像增強算法(基礎篇—5)

在空域中,圖像增強主要通過對不同位置的像素灰階及其變化方向進行操作來實作,而在頻域中圖像增強則主要通過對空間頻率(spatial frequency)進行操作來實作。

除了為圖像了解和機器識别、決策作準備外,圖像增強自身的應用領域也十分廣闊。例如:在軍事應用中,可增強紅外圖像中感興趣的敵軍目标;在醫學應用中,可增強X射線所拍攝的患者腦部、胸部圖像來确定病症的準确位置;在空間應用中,對用太空照相機傳回的圖像進行增強處理以改善圖像的品質;在農業應用中,增強遙感圖像以了解農作物的分布;在交通應用中,對大霧天氣圖像進行增強以加強車牌、路标等重要資訊進行識别等。

空間域圖像增強算法直接對圖像進行點運算或鄰域處理。

點運算直接對像素灰階進行點對點映射,常見的點運算包括:灰階變換、直方圖比對(修正)和直方圖均衡,以及某些圖像的算數或邏輯運算等。圖像的鄰域增強則以某一像素為中心,綜合該像素及其周圍某一範圍内(鄰域)像素的灰階值進行計算,并将計算結果作為中心像素新的灰階值。

根據輸出像素是否是輸入像素及其鄰域内像素的線性組合,可将圖像鄰域增強方法分為線性和非線性兩大類。每一類方法又可分為低通濾波和高通濾波方法。低通濾波算法可以濾除圖像中的高頻噪聲,使其變得更平滑;高通濾波則可以增強圖像中目标的輪廓或邊緣等高頻細節,使其更銳化。

圖像在空間域的增強常通過線性卷積運算來實作,它通過在圖像中滑動一個模闆,不斷根據鄰域像素的值計算各個像素的新值來完成計算過程。

根據信号處理理論,線性時不變系統可通過其傳遞函數來描述。如果忽略線性系統的内部細節,則線性系統在時域可抽象為輸入信号f(t)與其傳遞函數沖擊響應h(t)的卷積(Convolution),在頻域則可抽象為輸入信号F(s)與其傳遞函數沖擊響應h(s)的乘積。下圖顯示了基于傳遞函數的線性系統模型:

LabVIEW圖像增強算法(基礎篇—5)

卷積運算為積分運算,它反映了函數h(T)被反轉為h (-T)後,沿r軸在另一個函數f(T)上移動時,與其所重疊部分乘積的積分。下圖顯示了兩個函數進行卷積計算時的反轉、平移及相乘和積分過程。

LabVIEW圖像增強算法(基礎篇—5)

對于離散信号來說,假定有兩個長度分别為m和n的序列f(i)和h(j),則它們的積分将輸入長度為(m+n-1)的序列,可表示為:

LabVIEW圖像增強算法(基礎篇—5)

離散信号的卷積過程與連續信号類似,不同之處在于其中一個序列被反轉、平移後,與另一序列重疊的對應點相乘後是進行求和運算。下圖顯示了兩個離散序列的卷積計算過程:

LabVIEW圖像增強算法(基礎篇—5)

如果換個角度,将其中一個序列反轉後的值看作是它與另一序列重疊時對應點的權重,則卷積可以被看作是“權重求和”操作。

若再進一步,反轉後的序列的值均為歸一化後的值,則卷積可以被看作是對一組序列進行“權重平均"操作。若線性時不變系統為二維系統,則可表示為以下連續和離散形式:

連續形式為:

LabVIEW圖像增強算法(基礎篇—5)

離散形式為:

LabVIEW圖像增強算法(基礎篇—5)

此外,如果二維線性系統可分離,即h (x, y) =h1(x)h2 (y),則線性系統可分解為兩個一維卷積:

LabVIEW圖像增強算法(基礎篇—5)
LabVIEW圖像增強算法(基礎篇—5)

這意味着在進行二維卷積計算時,可以将其分解為連續的兩次一維卷積計算。在工程實踐中,這種分解往往會極大地降低程式算法的計算量,提高計算速度。

二維連續信号的卷積計算過程與一維卷積邏輯上類似。

計算時可以先将其中一個信号h(u,v)沿其原點旋轉180°,然後以原點為中心沿u軸和v軸平移該信号(u軸平移x,v軸平移y)再将兩個信号重疊部分相乘并積分,即得到原點處的輸出。若信号為二維離散信号,則可以先将其中一個離散點陣序列h(m,n)沿其中心點旋轉180°,然後以中心點沿另一離散點陣序列f(m,n)的橫向和縱向滑動,每到一個位置,就把兩個序列重疊的對應元素(中心點的鄰域)相乘并且求和,即可得到該點的卷積。

若将離散二維信号f (m,n)看作是待處理的數字圖像,并使h(m,n)點陣沿其中心對稱(即旋轉180°前後結果相同),就可以通過直接在數字圖像f(m,n)中滑動h(m,n)完成圖像的卷積運算。此時,被旋轉180°後的h(-m,-n)點陣或沿中心對稱的離散點陣h(m,n)被稱為模闆或卷積核(converlution kernel)。

圖像卷積計算屬于一種鄰域處理方法。理論上來說,卷積核可以為任意尺寸,但是為了處理友善,它實際上常被設計為3×3、5×5或7×7等方形陣列。卷積核的類型決定了卷積運算對圖像中的像素如何進行變換,卷積核中的元素值(權重)定義了它所覆寫的像素對中心像素的影響。在計算時,将卷積核由圖像的左上角到右下角逐點平滑移動,每次滑動至一個新像素,都将卷積核中的每一因子作為權重值(絕對值越大,對中心點的影響越大),與它所覆寫的圖像範圍内的像素做權重求和,得到的結果作為它所覆寫的圖像部分中心點的像素值。

下圖顯示了使用一個大小為3×3的卷積核對圖像進行卷積運算時的過程。卷積核沿着圖像左上角逐行、逐列滑動至右下角最後一個像素點。對于每次移動,卷積核中的9個元素P(x,y)都會和它覆寫的圖像中對應的像素K(x,y)相乘并求和,得到的結果∑K (x, y)·P (x,y)将作為卷積核中心點在圖像中所覆寫的像素P(x,y)的新值。當卷積核沿着所有像素滑動,并均完成前述計算後,圖像的卷積計算即完成。

LabVIEW圖像增強算法(基礎篇—5)

在機器視覺和圖像處理系統開發過程中,卷積運算常用于對圖像在空間域進行增強。具體是濾除圖像中的噪聲還是增強目标的輪廓或邊緣等高頻細節,由所選擇的卷積核決定。

圖像的鄰域增強,就是在空間域對其進行高通或低通濾波,以消除其中的噪聲,銳化圖像的輪廓,沿某一方向銳化目标的邊緣等。

圖像的空間域濾波直接根據像素及其周圍鄰域内的像素值,通過某種計算或變換得到新的像素值來實作濾波功能。如果輸出像素是輸入像素及其鄰域像素的線性組合,則稱為線性濾波,否則稱為非線性濾波(中值濾波、邊緣保持濾波等)。例如,基于卷積的圖像鄰域權重求和濾波就是一種空間域的線性濾波方法,而中值濾波等非權重計算形式的濾波則為非線性濾波。

一般來說,線性平滑濾波對去除各種噪聲(如高斯噪聲)較為有效。但是當信号頻譜與噪聲頻譜混疊,或者當信号中含有非疊加性噪聲時(如由系統非線性引起的噪聲或非高斯噪聲等),線性濾波在濾除噪聲時,總會以某種方式模糊圖像中的邊緣和細節,進而降低圖像中線性特征的可識别性。非線性濾波器常基于某種非線性映射關系,把某一特定的噪聲近似地映射為零而保留信号的重要特征,因而其在一定程度上能克服線性濾波器的不足之處。

NI Vision為圖像的鄰域增強提供了衆多濾波函數,它們位于LabVIEW的Vision and Motion→Image Processing→Filters圖像空間域濾波函數選闆中。使用這些函數可以對圖像進行線性或非線性高通、低通濾波,實作銳化圖像中目标邊緣、輪廓和細節或對其進行平滑降噪的功能。位置如下所示:

LabVIEW圖像增強算法(基礎篇—5)

函數說明及使用可參見幫助手冊:

LabVIEW圖像增強算法(基礎篇—5)

機器視覺系統開發過程中,常用的基于卷積計算的線性濾波方法有線性梯度算子(Linear Gradient)、拉普拉斯算子(Laplacian)、平滑濾波(Smoothing)和高斯算子(Gaussian)4種。其中,前兩種方法用于銳化圖像中灰階變化較快的高頻邊緣或紋理細節;後兩種方法則用于濾除高頻噪聲和細節,使圖像更平滑。下表對常用的線性濾波方法進行了彙總:

LabVIEW圖像增強算法(基礎篇—5)

鄰域增強中的線性濾波多基于卷積運算,卷積核的尺寸限定了處理時的鄰域大小,卷積核中的元素值設定了各鄰域像素對中心像素影響的權重值,其絕對值越大,對中心像素的影響越大。如果卷積核中的因子有正有負,則濾波過程相當于鄰域像素求權重差,其效果相當高通濾波;而如果卷積核中隻有正因子,那麼濾波過程相當相當于鄰域像素求權重和,其效果相當低通濾波。線性梯度、Laplacian算子屬于前一類,而高斯和平滑濾波屬于後者。

Nl Vision使用IMAQ Convolute和IMAQ GetKernel或IMAQ BuildKernel配合,在空間域對圖像進行線性濾波。

IMAQ Convolute可使用由Kernel參數指定的卷積核對圖像進行卷積運算,而IMAQ GetKernel和IMAQ BuildKernel則用于擷取Nl Vision預定義的卷積核,或由字元串建構卷積核,以傳遞給IMAQ Convolute的Kernel參數,如下圖所示:

LabVIEW圖像增強算法(基礎篇—5)

IMAQ BuildKernel搜尋由逗号或分号分隔的字元串(各行由換行符分隔),将其中的數字轉換為卷積核;IMAQ GetKernel通過卷積核的編碼(Kernel Code)來索引NIVision預定義的卷積核。卷積核的編碼由4位數字構成,其中千位代表卷積核的分類碼(Kernel family),百位代表卷積核的尺寸(Kernel Size),個位和十位共同代表卷積核的編号(Kernel Number)。例如,大小為3×3的梯度算子中,第14個算子編碼為1314。

Nl Vision共預定義了梯度、拉普拉斯、平滑和高斯4大類卷積核,不同卷積核的大小、作用各不相同,且都能通過卷積核的類别、尺寸及編号進行索引。

非線性濾波方法也可分為進行邊緣檢測的高通濾波和去除圖像中雜散點的低通濾波兩大類。

常用的非線性邊緣檢測(高通)方法有非線性梯度(Nonlinear Gradient)、Roberts、內插補點(Differentiation) 、Sobel、Prewitt、Sigma和Canny 7種。非線性低通濾波方法則有中值(Median)濾波、N階(order)濾波器、低通(Lowpass)濾波3種。下表對常用的非線性濾波方法進行了彙總:

LabVIEW圖像增強算法(基礎篇—5)

與線性濾波方法類似,空間域的非線性濾波方法也常使用濾波算子,基于像素的鄰域進行計算,但是其計算函數往往并非線性函數。若用P (x,y)格式表坐标為(x,y)的像素值,則可通過像素灰階的非線性函數來表示各種非線性濾波算法。

非線性梯度、Roberts和內插補點濾波過程均基于像素左上方2×2的鄰域進行。非線性梯度濾波對該鄰域内的像素兩兩沿垂直方向求其內插補點的絕對值,并取其中較大者作為新像素值。Roberts濾波過程與非線性梯度濾波計算過程類似,但它是沿對角線方向,對像素左上方向2×2鄰域内的像素兩兩求內插補點的絕對值,并取其中較大者作為新元素值。內插補點濾波過程則對像素左上方向2×2鄰域内的像素,沿各個方向兩兩求內插補點的絕對值,并取其中較大者作為新元素值。

通過使用IMAQ Convolute對圖像進行平滑濾波、IMAQ EdgeDetection對圖像進行非線性高通濾波(包括非線性梯度、Roberts、內插補點、Sobel、Prewitt濾波和下面将要講到的Sigma濾波)、IMAQ LowPass和IMAQ NthOrder實作圖像的非線性低通濾波、IMAQ CannyEdgeDetection實作Canny算法的執行個體程式了解線性濾波、非線性濾波和Canny算法的使用方法,由于這是一個程式中內建了多個圖像處理功能,分别講講各個功能設計思路。

線性濾波功能子產品設計思路如下所示:

程式一開始先為圖像處理配置設定記憶體,并将圖像fig.tif讀入記憶體緩沖區,然後進入While循環;

While循環首次執行時,将比較使用者所選擇的濾波方式Filter及各圖像增強VI的參數Kernel Size、Kernel#、Size & Tolerance及Size & Order是否與Parameter簇常量中的預設值不同,若有變化,程式即進入包含各種濾波Vl的分支;

當從Filter控件中選擇Smooth濾波方式時,分支結構中的代碼将調用IMAQ GetKernel,根據輸入參數擷取NIVision預定義的卷積核,并傳遞給IMAQ Convolute對圖像進行卷積運算;

當循環繼續執行時,程式将比較使用者的輸入與上次循環執行時是否有變化,若任何輸入發生變化,程式都會再次進入包含濾波代碼的分支;

當使用者單擊STOP按鈕時,程式将退出循環釋放緩沖區,結束程式執行;

執行個體中,使用者選擇了對圖像進行平滑濾波,所選用的卷積核大小為5×5,編号為#0。

非線性高通濾波功能子產品設計思路如下所示:

隻需通過它的Method參數選擇所需的濾波方式即可。程式結構與線性濾波功能代碼結構相同,隻是從樹形清單控件中選擇了Differentiation濾波方式,進而代碼也相應執行非線性內插補點高通濾波分支。由程式的運作結果可以看出,濾波後的圖像邊緣沿多個方向被增強。

非線性低通濾波功能子產品設計思路如下所示:

程式中顯示了基于3×3鄰域對圖像進行N階非線性低通濾波的執行個體;

由于N取4,恰好為鄰域内像素排序後中間值的索引,是以相當于對圖像進行中值濾波;

由程式的運作效果可以看出,原圖像中的椒鹽噪聲幾乎均被濾除;

還使用IMAQ LowPass對圖像濾波,以及使用IMAQ NthOrder取N=1和N=7時對圖像濾波的結果。可以看出,當N階濾波器的階值小于4時,暗區域被膨脹,亮區域被腐蝕,而階值大于4時則恰好相反。

Canny算法功能子產品設計思路如下所示:

Canny算法采用高、低雙門檻值法減少假邊緣點的數量;

若某一像素位置的值超過高門檻值,該像素被保留為邊緣點;

若小于低門檻值,則被去除;若在兩個門檻值之間,則僅當像素與一個高于高門檻值的像素連接配接時才被保留;

Canny算法推薦高、低門檻值的比例在2:1到3:1之間。可以較為準确、有效地确定圖像的邊緣。

程式實作如下所示:

LabVIEW圖像增強算法(基礎篇—5)

程式效果如下所示:

LabVIEW圖像增強算法(基礎篇—5)

程式下載下傳請參見:

https://download.csdn.net/download/m0_38106923/19208174

與空域濾波的工作方式不同,頻率濾波器并不直接對圖像像素資料進行操作,而是先通過快速傅裡葉變換将圖像轉換至頻率域,經濾波處理後再由傅裡葉逆變換(InverseFFT)轉換回空域,以達到圖像增強的目的,如下圖所示:

LabVIEW圖像增強算法(基礎篇—5)

相對于空域濾波來說,頻域濾波有以下兩點主要優勢:

1、空域在處理某問題時比較困難,甚至幾乎難以處理;

2、将圖像處理問題從空域轉換到頻率域上處理時,可以使用一系列成熟的數字信号處理方法和工具集。

Nl Vision為傅裡葉變換以及圖像頻域計算提供了現成的函數,它們位于LabVIEW的Vision and Motion→lmage Processing→Frequency Domain函數選闆中,如下圖所示:

LabVIEW圖像增強算法(基礎篇—5)

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

LabVIEW圖像增強算法(基礎篇—5)

通過對一幅圖像進行FFT的執行個體,了解傅裡葉變換的使用方法,程式設計思路如下所示:

程式一開始先将圖像讀入記憶體,并使用IMAQ Cast lmage将其轉換為複圖像;

函數IMAQ FFT對複圖像進行FFT後,其輸出被連接配接到圖像顯示控件進行顯示;

IMAQ ComplexPlaneTolmage用于提取複圖像的實部、虛部、幅度或相位,并以8位、16位或32位浮點數圖像格式表示;

在本例中,在它從FFT的變換結果中提取出幅度資料并顯示在控件MagF中後,程式将釋放所有緩沖區并退出。

程式設計如下所示:

LabVIEW圖像增強算法(基礎篇—5)

效果如下所示:

LabVIEW圖像增強算法(基礎篇—5)

對比程式運作結果可以發現,使用圖像顯示控件直接顯示複數圖像與提取出幅度譜後再顯示的效果完全不同。這是因為Nl Vision在記憶體中使用标準方式組織FFT的計算結果(複數)。這意味着從FFT計算得到的幅度資料中,高頻部分将分布在圖像的四角,低頻區域在圖像的中心。但是,當使用圖像顯示控件直接顯示複數圖時,Nl Vision會自動計算圖像的幅度譜,并反轉高頻和低頻資料,以中心對稱模式顯示。即高頻部分居中,低頻部分分布在四角。不僅如此,為了增強幅度的顯示效果,NI Vision還會為計算得到的幅度資料乘以一個與圖像長M和寬N相關的系數m,其計算公式如下:

LabVIEW圖像增強算法(基礎篇—5)
https://download.csdn.net/download/m0_38106923/19211156

在圖像進行中,圖像的銳化與平滑處理可通過空間濾波或頻域濾波來完成。從數學角度看,空間濾波是将信号與濾波算子進行卷積等運算的結果,具有方法直覺、操作簡便等優點。但當要處理的圖像資料較大時,若沒有發現比較高效的算法,就會有計算量大、計算時間長以及實時性差等缺點。

在頻域對圖像進行分析、增強時,不僅無須求解較難的微分方程,而且利用頻譜圖可直覺地揭示系統性能,并可友善地選擇有效抑制噪聲的濾波器。此外,在頻率域上進行圖像處理時,還可以使用數字信号處理的一系列成熟方法和工具快速解決問題。

下表對常見的頻域低通濾波器的特點進行了彙總和比較,可以看出:

理想低通濾波器處理的圖像極為模糊,且含有很嚴重的振鈴現象,但其對噪聲的平滑效果好;

梯形低通濾波器的振鈴現象不像理想濾波器那樣嚴重;

巴特沃斯低通濾波器與指數低通濾波器相比,圖像模糊程度低,但對噪聲的平滑效果也差些;

高斯低通濾波器能在有效抑制噪聲的情況下盡可能減小圖像的模糊程度,是以它相對其他濾波器有較為廣泛的應用。

LabVIEW圖像增強算法(基礎篇—5)

比較下表所列出的幾個高通濾波器可以發現:

理想高通濾波器處理的圖像邊緣抖動現象嚴重,且同時保留了邊緣和噪聲;

梯形高通濾波器會産生輕微抖動現象,但因計算簡單經常被使用;

巴特沃斯濾波器銳化效果較好,邊緣抖動不明顯,但計算複雜;

指數高通濾波器比巴特沃斯濾波器效果差些,無邊緣抖動現象;

高斯高通濾波器能在圖像邊緣抖動和銳化效果之間獲得較好的平衡。

LabVIEW圖像增強算法(基礎篇—5)

帶通濾波器可以使某一下限和上限截止頻率範圍内的信号通過,但衰減低于下限截止頻率和高于上限截止頻率的信号。帶阻濾波器則可以衰減某一下限和上限截止頻率範圍内的信号,但允許低于下限截止頻率和高于上限截止頻率的信号通過。下圖顯示了理想帶通和帶阻濾波器的時頻響應:

LabVIEW圖像增強算法(基礎篇—5)

在實際中,帶阻濾波器常用于濾除圖像中的周期性噪聲。周期性噪聲在圖像的頻譜中常以對稱的形式出現,可使用帶阻濾波器濾除頻率在環形區域内的信号,以消除噪聲。可以看出,帶阻濾波器在去除周期噪聲時還會濾除噪聲以外的成分,使圖像中的有用資訊減少。如下圖所示:

LabVIEW圖像增強算法(基礎篇—5)

在LabVIEW中使用NI Vision進行圖像濾波的方法可以歸納為4類:

IMAQ ComplexTruncate和IMAQ Mask可以使圖像中指定比例的頻率範圍通過或衰減,使用它們可以對圖像進行理想低通、理想高通、理想帶通和理想帶阻濾波;

IMAQComplexAttenuate可對圖像進行三角形高通或低通濾波;

IMAQ Mask除了可實作理想低通、理想高通、理想帶通和理想帶阻濾波器的功能外,還能實作理想陷波濾波器;

公式法則可以實作任何形式的頻域濾波器。

如下表所示:

LabVIEW圖像增強算法(基礎篇—5)

NI Vision為頻域濾波操作提供了專門函數,它們位于LabVIEW的視覺與運動→lmage Processing→Frequency Domain函數選闆中,如下圖所示:

LabVIEW圖像增強算法(基礎篇—5)
LabVIEW圖像增強算法(基礎篇—5)

通過一個圖像濾波示例,了解各類型濾波方法的使用方法,程式設計思路如下所示:

程式先将圖像讀入記憶體并對其進行傅裡葉變換;

随後使用IMAQ ComplexTruncate生成的理想低通濾波器對圖像進行濾波,其中參數Truncation Frequency%将低通濾波的截止頻率設定為圖像頻率範圍的5%處;

濾波完成後對圖像進行傅裡葉反變換,獲得濾波後的圖像;

程式在為傅裡葉反變換配置設定緩沖區時指定圖像類型為16位灰階圖,這樣NI Vision會自動對傅裡葉反變換的結果進行轉換;

觀察程式運作結果,可以發現,使用理想低通濾波器對圖像進行濾波時會出現明顯的振鈴現象。

LabVIEW圖像增強算法(基礎篇—5)

将IMAQ ComplexTruncate實作的理想低通和高通濾波器進行組合,可以實作理想帶通或帶阻濾波器。具體來說,當用其實作的低通和高通濾波器連續對某圖像進行濾波,且低通濾波器的截止頻率大于高通濾波器的截止頻率時,這種類似串聯的連續濾波結果等效于帶通濾波;當用其實作的低通和高通濾波器分别對原圖像進行濾波後将二者結果疊加,且低通濾波器的截止頻率小于高通濾波器的截止頻率時,這種類似并聯的濾波疊加效果等效于帶阻濾波。

LabVIEW圖像增強算法(基礎篇—5)
https://download.csdn.net/download/m0_38106923/19212673

圖像增強一般并不能增加原圖像資訊,但是能突出微弱信号,使資訊更容易分辨。圖像增強不僅可以在空域進行,還能在頻率域進行。在頻域處理圖像時,需要先通過傅裡葉變換将圖像轉換至頻域,經濾波處理後再由傅裡葉逆變換轉換回空域,以實作圖像增強。

繼續閱讀