天天看點

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

       本文主要講述基于vc++6.0 mfc圖像處理的應用知識,主要結合自己大三所學課程《數字圖像處理》及課件進行講解,主要通過mfc單文檔視圖實作顯示bmp圖像增強處理,包括圖像普通平滑、高斯平滑、不同算子的圖像銳化知識。希望該篇文章對你有所幫助,尤其是初學者和學習圖像處理的學生。

        免費資源下載下傳位址:

        圖像增強是對圖像進行處理,使其比原始圖像更适合于特定的應用,它需要與實際應用相結合。對于圖像的某些特征如邊緣、輪廓、對比度等,圖像增強是進行強調或銳化,以便于顯示、觀察或進一步分析與處理。圖像增強的方法是因應用不同而不同的,研究内容包括:(參考課件和左飛的《數字圖像處理》)

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        圖像平滑是一種區域增強的算法,平滑算法有鄰域平均法、中指濾波、邊界保持類濾波等。在圖像産生、傳輸和複制過程中,常常會因為多方面原因而被噪聲幹擾或出現資料丢失,降低了圖像的品質(某一像素,如果它與周圍像素點相比有明顯的不同,則該點被噪聲所感染)。這就需要對圖像進行一定的增強處理以減小這些缺陷帶來的影響。

       1.簡單平滑-鄰域平均法

        圖像簡單平滑是指通過鄰域簡單平均對圖像進行平滑處理的方法,用這種方法在一定程度上消除原始圖像中的噪聲、降低原始圖像對比度的作用。它利用卷積運算對圖像鄰域的像素灰階進行平均,進而達到減小圖像中噪聲影響、降低圖像對比度的目的。

        但鄰域平均值主要缺點是在降低噪聲的同時使圖像變得模糊,特别在邊緣和細節處,而且鄰域越大,在去噪能力增強的同時模糊程度越嚴重。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        2.高斯平滑

        為了克服簡單局部平均法的弊端(圖像模糊),目前已提出許多保持邊緣、細節的局部平滑算法。它們的出發點都集中在如何選擇鄰域的大小、形狀和方向、參數加平均及鄰域各店的權重系數等。

        圖像高斯平滑也是鄰域平均的思想對圖像進行平滑的一種方法,在圖像高斯平滑中,對圖像進行平均時,不同位置的像素被賦予了不同的權重。

        在圖像簡單平滑中,算法利用卷積模闆逐一處理圖像中每個像素,這一過程可以形象地比作對原始圖像的像素一一進行過濾整理,在圖像進行中把鄰域像素逐一處理的算法過程稱為濾波器。平滑線性濾波器的工作原理是利用模闆對鄰域内像素灰階進行權重平均,也稱為均值濾波器。

        高斯平滑與簡單平滑不同,它在對鄰域内像素進行平均時,給予不同位置的像素不同的權值,下圖的所示的3*3和5*5領域的高斯模闆。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        模闆越靠近鄰域中心位置,其權值越高。在圖像細節進行模糊時,可以更多的保留圖像總體的灰階分布特征。下圖是常用的四個模闆和matlab代碼實作:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        代碼如下:

        運作效果如下圖所示:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        3.中值濾波

        在使用鄰域平均法去噪的同時也使得邊界變得模糊。而中值濾波是非線性的圖像處理方法,在去噪的同時可以兼顧到邊界資訊的保留。

        選一個含有奇數點的視窗w,将這個視窗在圖像上掃描,把視窗中所含的像素點按灰階級的升或降序排列,取位于中間的灰階值來代替該點的灰階值。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        例如選擇濾波的視窗如下圖,是一個一維的視窗,待處理像素的灰階取這個模闆中灰階的中值,濾波過程如下:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        常用的視窗還有方形、十字形、圓形和環形。不同形狀的視窗産生不同的濾波效果,方形和圓形視窗适合外輪廓線較長的物體圖像,而十字形視窗對有尖頂角狀的圖像效果好。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        4.邊界保持類濾波

        k近鄰均值濾波器(knnf)是指在m*m的視窗中,屬于同一集合類的像素,它們的灰階值将高度相關。被處理的像素(對應于視窗中心的像素)可以用視窗内與中心像素灰階最接近的k個近鄰像素的平均灰階來替代。步驟如下:

        (1).作一個m*m的作用模闆

        (2).在其中選擇k個與待處理像素的灰階差為最小的像素

        (3).用這k個像素的灰階均值替換掉原來的值

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        在k近旁均值濾波器(knnmf)中,不選k個鄰近像素的平均灰階來替代,而選k個鄰近像素的中值灰階來替代,上圖中2,3,3中選擇3即可。

        下面介紹具體mfc vc++6.0代碼實作過程。

        第一步:在資源視圖的menu中添加子菜單“圖像增強”,然後添加“圖像平滑”四個選項如下圖所示:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        第二步:打開類向導,在imageprocessingview類中添加相應的四個實作函數:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        第三步:就是具體的平滑實作函數。

        1.普通平滑 模闆一

        該算法采用的模闆如下:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        運作效果如圖所示,圖像平滑模糊了,但效果不是很好。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        其中實作的具體原理如下:

        首先将圖像像素矩陣轉換為(x,y)的二維矩陣進行操作,同時擷取(x,y)坐标為中心的3*3矩陣,再通過它與3*3模闆進行像素平均操作,就是兩個3*3矩陣互乘。需要注意的是矩陣一個格子是rgb三位元組(24位bmp),同時擷取該中心點位置時,通過兩層循環for(k=n-1;k<=n+1;k++)實作擷取矩陣中九個點的像素。最後對該點(x,y)的rgb進行指派操作即可。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

       2.普通平滑 模闆二

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        你可能注意到了,在圖像處理過程中,如果每行的位元組數不是4的倍數,可能會出現斜線之類的處理bug,是以需要手動補0籌齊4的倍數,代碼中補0後運作效果如下圖所示,我也一直沒找到原因,可能是思想和深度還沒有達到,以後有機會在解決吧!同時後面的算法都不準備再進行補0處理,主要講述算法的思想!

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

         3.高斯平滑

         采用的模闆如下:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        代碼如下圖所示:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        4.中值濾波

        中值濾波我的了解是:它不但可以去除孤點噪聲,而且可以保持圖像的邊緣特性,不會産生顯著的模糊;它的方法是把局部區域的像素按灰階等級進行排序,再取該鄰域中灰階的中值作為目前像素的灰階值。其步驟如下:

        (1).将濾波模闆(含若幹個點的滑動視窗)在圖像中漫遊,并将模闆中心與圖像中的某個像素位置重合;

        (2).讀取模闆中各對應像素的灰階值;

        (3).将這些灰階值從小到大排序;

        (4).取這一列資料的中間資料,将其指派給對應模闆中心位置的像素。

        我采用的是3*3的模本,取矩陣中間位置像素替代原像素。代碼如下:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        ps:這部分總算講述完成,算法都是根據自己的了解用底層代碼實作的,而不是向其它的通過調用gdi+庫實作。可能存在因為了解不夠或其它的錯誤,歡迎提出修改~

        推薦資料:

       有時還需要加強圖像中景物的邊緣和輪廓,邊緣和輪廓通常位于圖像中灰階突出的地方,因而可以直覺的想到用灰階的差分對邊緣和輪廓進行提取,通常可以通過梯度算子進行提取。圖像銳化的目的是提高圖像的對比度,進而使圖像更清晰,通過提高鄰域内像素的灰階差來提高圖像的對比度。

       下面介紹圖像銳化的幾種算子及效果。

        1.拉普拉斯算子(laplacian)

        拉普拉斯算子是圖像鄰域内像素灰階差分計算的基礎,通過二階微分推導出的一種圖像鄰域增強算法。它的基本思想是當鄰域的中心像素灰階低于它所在鄰域内的其他像素的平均灰階時,此中心像素的灰階應該被進一步降低;當高于時進一步提高中心像素的灰階,進而實作圖像銳化處理。

        在算法實作過程中,通過對鄰域中心像素的四方向或八方向求梯度,并将梯度和相加來判斷中心像素灰階與鄰域内其他像素灰階的關系,并用梯度運算的結果對像素灰階進行調整。

        一個連續的二進制函數f(x,y),其拉普拉斯運算定義為:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        對于數字圖像,拉普拉斯算子可以簡化為:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        也可以表示為卷積的形式:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        其中k=1,i=1時h(r,s)取下式,四方向模闆:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        通過模闆可以發現,當鄰域内像素灰階相同時,模闆的卷積運算結果為0;當中心像素灰階高于鄰域内其他像素的平均灰階時,模闆的卷積運算結果為正數;當中心像素的灰階低于鄰域内其他像素的平均灰階時,模闆的卷積為負數。對卷積運算的結果用适當的衰弱因子處理并加在原中心像素上,就可以實作圖像的銳化處理。

        其中實作過程步驟如下:

        添加子菜單和類向導添加實作函數

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        2.高通濾波

        常用的高通模闆如下所示,其中h2有的書又稱為拉普拉斯八方向的銳化模闆。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        選取h2模闆,代碼如下所示:

        運作效果如下圖所示,該效果相對較好:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

       3.sobel算子

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        代碼如下所示,需要注意x和y兩個方向的模闆處理:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        如果采用sobel邊緣細化,建議二值化(0和255門檻值化)處理後再銳化,彩色圖建議先灰階處理再進行其他處理。

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

      4.isotropic算子

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        代碼實作如下:

        運作效果如下圖所示,效果與上面的sobel類似:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

       5.prewitt算子

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        運作效果如下圖所示,隻選取了x分量:

【數字圖像處理】七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

        最後還是希望文章對你有所幫助,如果文章有不足或錯誤之處,請海涵。自己給自己點個贊,挺不容易的,但還會繼續寫完~同時後面的圖像處理準備研究些感興趣的東西,而不是這樣的長篇大論了,例如怎樣實作驗證碼提取、如何實作圖像恢複、dicom圖像等知識吧!

繼續閱讀