日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

形态学图像处理(二)

發布時間:2024/7/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 形态学图像处理(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要包括以下內容

  • 二值形態學的經典應用, 細化和像素化, 以及凸殼
  • 灰度圖像的形態學運算, 包括灰度腐蝕、灰度膨脹、灰度開和灰度閉
  • 本章的典型案例分析
    • 在人臉局部圖像中定位嘴的中心
    • 顯微鏡下圖像的細菌計數
    • 利用頂帽變換(top-hat)技術解決光照不均問題

細化算法

“骨架”是指一副圖像的骨髓部分,它描述物體的幾何形狀和拓撲結構,是重要的圖像描繪子之一,計算骨架的過程一般稱為“細化”或“骨架化”,在包括文字識別、工業零件形狀識別以及印刷電路板自動檢測在內的很多應用中,細化過程都發揮著關鍵作用。通常,對我們感興趣的目標物體進行細化有助于突出目標的形狀特點和拓撲結構并且減少冗余的信息量。



像素化算法

細化適用于和物體拓撲結構或形狀有關的應用, 如前述的手寫字符識別。 但有時我們關心的是目標對象是否存在、 它們的位置關系, 或者個數, 這時在預處理中加入像素化步驟會給后續的圖像分析帶來極大的方便

理論基礎
像素化操作首先需找到二值圖像中所有的連通區域, 然后用這些區域的質心作為這些連通區域的代表, 即將1個連通區域像素化為位于區域質心位置的1個像素。
有時還可以進一步引入一個低閥值lowerThres和一個高闕值highThres來指出圖像中我們感興趣的對象連通數(連通分量中的像素數目)的大致范圍, 從而只像素化圖像中大小介于lowerThres和upperThres之間的連通區域, 而連通數低于lowerThres或高于upperThres的對象都將被濾除, 這就相當于使用算法的同時具有了過濾噪聲的能力。如圖8.29 所示。

凸殼

如果連接物體A內任意兩點的直線段都在淫的內部,則稱d是凸的。任意物體A的凸亮H是包含A的最小凸物體。
我們總是希望像素化算法能夠找到物體的質心來代表讀物體,但在實際中,可能由于光照不均等原因導致圖像在二值化后,物體本身形狀發生缺損,像素化算法就無法找到物體真正的質心。此時可適當地進行凸殼處理,彌補凹損,算法會找到包含原始形狀的最小凸多邊形,如下圖8.30所示.

為確保在上述生長過程中凸殼不會大幅超出凸性所需的最小尺寸, 可以限制其生長以便凸殼不會超出初始時包含物體A的最小矩形.

bwmorph函數
本章的很多形態學操作都可由IPT函數bwmorph實現, 該函數的調用語法為:
Iout = bwmorph(I,operation,n);
operation是一個指定操作類型的字符串, 常用的合法取位如在8.2 所示

灰度圖像中的基本形態學運算

本節就們把二值圖像的形態學處理擴展到灰度圖像的基本操作, 包括灰度膨脹、灰皮腐蝕、灰度開和灰皮閉。此外, 8.4.4 小節還將介紹一個灰度形態學的經典應用一一頂帽變換(top-hat), 用以解決圖像的光照不均問題.

灰度膨脹及其實現



matlab實現
只要以灰度圖像和相應的灰度膨脹結構元素為參數調用imdilate函數即可實現灰度膨脹,平坦結構元素的創建方法與二值形態學中相同:而非平坦結構元素也可通過 strel函數以如下方式創建。
SE = strel(NHOOD,HEIGHT);
NHOOD 為指明結構元素定義域的矩陣, 只能由0和1 組成.
HEIGHT 是一個與NHOOD 具有相同尺寸的矩陣, 指出了對應于NHOOD 中每個元素的高度.

f = [0 1 2 3 4 5 4 3 2 1 0]; figure,h_f = plot(f); seFlat = strel([1 1 1]);fd1 = imdilate(f,seFlat); hold on,h_fd1 = plot(fd1,'-ro'); axis([1 11 0 8]); setHeight = strel([1 1 1],[1 1 1]); fd2 = imdilate(f,setHeight); hold on,h_fd2= plot(fd2,'-g*'); legend('原灰度1維函數f','使用平坦結構元素膨脹','使用高度為1有結構元素膨脹元素膨脹后');

灰度腐蝕及其實現


與二值形態學不同的是,f(x,y)和 S(x,y)不再是只代表形狀的集合,而是二維函數,它們的定義域指明了其形狀, 它們的值指出了高度信息。

f = [0 1 2 3 4 5 4 3 2 1 0]; figure,h_f = plot(f); seFlat = strel([1 1 1]);fe1 = imerode(f,seFlat); hold on,h_fe1 = plot(fe1,'ro'); axis([1 11 0 8]); seHeight = strel([1 1 1],[1 1 1]);fe2 = imerode(f,seHeight); hold on,h_fe2=plot(fe2,'-g*'); legend('原灰度1維函數f','使用平坦結構元素腐蝕','使用高度為1有結構元素膨脹元素腐蝕后');

灰度膨脹和灰度腐蝕的效果比較

I = imread('lena.bmp'); seHeight=strel(ones(3,3),ones(3,3)); Idi1= imdilate(I,seHeight); Iero = imerode(I,seHeight); subplot(1,3,1),imshow(I); subplot(1,3,2),imshow(Idi1); subplot(1,3,3),imshow(Iero);


我們看到在結構元素的值均大于零的情況下, 灰度膨脹的輸出圖像總體上比輸入圖像更亮,這是局部最大值運算作用的結果。此外原圖像中一些能夠包含于結構元素的暗細節〈如
一部分帽子的槽皺和尾穗)被完全消除, 其余的大部分暗部細節也都得到了一定程度上的減少。而灰度腐蝕的作用正好相反, 輸出圖像比輸入圖像更暗, 如果輸入圖像中的亮部細節比結構元素小, 則亮度會得到削弱。

灰度開、 閉運算及其實現

與二值形態學類似,我們可以在灰度腐蝕和膨脹的基礎上定義灰度開和閉運算.灰度開運算就是先灰度腐蝕后灰度膨脹,而灰度閉運算則是先灰度膨脹后灰度腐蝕,下面分別給出定義:

這一過程: (a)為圖像中的一條水平像素線:(b)和(d)分別給出了球緊貼著該像素線的下側和上側被動的情況:而(c)和(e)則展示了滾動過程中球的最高點形成的曲線,它們分別是開、閉運算的結果。

Matlab實現
使用imopen和imdilate同樣可以對灰度圖像進行開、閉運算, 用法與灰度腐蝕和膨脹類似, 這里不再贅述,在實際應用中, 開操作常常用于去除那些相對于結構元素s而言較小的高灰度區域〈球體滾不上去〉,而對于較大的亮區域影響不大〈球體可以滾上去〉。雖然首先進行的灰度腐蝕
會在去除圖像細節的同時使得整體灰度下降, 但隨后的灰度膨脹又會增強圖像的整體亮度,因此圖像的整體灰度基本保持不變:而閉操作常用于去除圖像中的暗細節部分, 而相對地保留高灰度部分不受影響.

頂帽交換(top-hat)及其實現

作為灰度形態學的重要應用之一, 這里學習一種非均勻光照問題的解決方案一一頂帽變換技術(top-hat).圖像f的頂帽變換h定義為圖像f與圖像f的開運算之差, 可表示為:
h = f -(f*s)

I = imread('rice.png'); subplot(2,4,1),imshow(I,[]); thresh = graythresh(I); Ibw = im2bw(I,thresh); subplot(2,4,2),imshow(Ibw,[]); subplot(2,4,3),surf(double(I(1:8:end,1:8:end))),zlim([0 255]),colormap;bg = imopen(I,strel('disk',15)); subplot(2,4,4),surf(double(bg(1:8:end,1:8:end))),zlim([0 255]),colormap;Itophat = imsubtract(I,bg); subplot(2,4,5),imshow(Itophat); subplot(2,4,6),surf(double(Itophat(1:8:end,1:8:end))),zlim([0 255]);I2 = imadjust(Itophat); subplot(2,4,7),imshow(I2); thresh2 = graythresh(I2); Ibw2 = im2bw(I2,thresh2); subplot(2,4,8),imshow(Ibw2);

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的形态学图像处理(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。