您的位置:  首頁 > 技術 > python語言 > 正文

Python圖像處理丨圖像腐蝕與圖像膨脹

2022-07-13 13:00 https://my.oschina.net/u/4526289/blog/5553359 華為云開發者聯盟 次閱讀 條評論
摘要:本篇文章主要講解Python調用OpenCV實現圖像腐蝕和圖像膨脹的算法。

本文分享自華為云社區《[Python圖像處理] 八.圖像腐蝕與圖像膨脹》,作者: eastmount 。

本篇文章主要講解Python調用OpenCV實現圖像腐蝕和圖像膨脹的算法,基礎性知識希望對您有所幫助。

  • 1.基礎理論
  • 2.圖像腐蝕代碼實現
  • 3.圖像膨脹代碼實現

一. 基礎知識

(注:該部分參考作者論文《一種改進的Sobel算子及區域擇優的身份證智能識別方法》)

圖像的膨脹(Dilation)和腐蝕(Erosion)是兩種基本的形態學運算,主要用來尋找圖像中的極大區域和極小區域。其中膨脹類似于“領域擴張”,將圖像中的高亮區域或白色部分進行擴張,其運行結果圖比原圖的高亮區域更大;腐蝕類似于“領域被蠶食”,將圖像中的高亮區域或白色部分進行縮減細化,其運行結果圖比原圖的高亮區域更小。

1.圖像膨脹

膨脹的運算符是“⊕”,其定義如下:

該公式表示用B來對圖像A進行膨脹處理,其中B是一個卷積模板或卷積核,其形狀可以為正方形或圓形,通過模板B與圖像A進行卷積計算,掃描圖像中的每一個像素點,用模板元素與二值圖像元素做“與”運算,如果都為0,那么目標像素點為0,否則為1。從而計算B覆蓋區域的像素點最大值,并用該值替換參考點的像素值實現膨脹。下圖是將左邊的原始圖像A膨脹處理為右邊的效果圖A⊕B。

處理結果如下圖所示:

2.圖像腐蝕

腐蝕的運算符是“-”,其定義如下:

該公式表示圖像A用卷積模板B來進行腐蝕處理,通過模板B與圖像A進行卷積計算,得出B覆蓋區域的像素點最小值,并用這個最小值來替代參考點的像素值。如圖所示,將左邊的原始圖像A腐蝕處理為右邊的效果圖A-B。

處理結果如下圖所示:

二. 圖像腐蝕代碼實現

1.基礎理論

形態學轉換主要針對的是二值圖像(0或1)。圖像腐蝕類似于“領域被蠶食”,將圖像中的高亮區域或白色部分進行縮減細化,其運行結果圖比原圖的高亮區域更小。其主要包括兩個輸入對象:

(1)二值圖像
(2)卷積核

卷積核是腐蝕中的關鍵數組,采用numpy庫可以生成。卷積核的中心點逐個像素掃描原始圖像,如下圖所示:

被掃描到的原始圖像中的像素點,只有當卷積核對應的元素值均為1時,其值才為1,否則其值修改為0。換句話說,遍歷到的黃色點位置,其周圍全部是白色,保留白色,否則變為黑色,圖像腐蝕變小。

2.函數原型

圖像腐蝕主要使用的函數為erode,其原型如下:

dst = cv2.erode(src, kernel, iterations)

參數dst表示處理的結果,src表示原圖像,kernel表示卷積核,iterations表示迭代次數。下圖表示5*5的卷積核,可以采用函數 np.ones((5,5), np.uint8) 構建。

注意:迭代次數默認是1,表示進行一次腐蝕,也可以根據需要進行多次迭代,進行多次腐蝕。

3.代碼實現

完整代碼如下所示:

#encoding:utf-8
import?cv2??
import?numpy?as?np??

#讀取圖片
src?=?cv2.imread('test01.jpg',?cv2.IMREAD_UNCHANGED)

#設置卷積核
kernel?=?np.ones((5,5),?np.uint8)

#圖像腐蝕處理
erosion?=?cv2.erode(src,?kernel)

#顯示圖像
cv2.imshow("src",?src)
cv2.imshow("result",?erosion)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下圖所示:

由圖可見,干擾的細線被進行了清洗,但仍然有些輪廓,此時可設置迭代次數進行腐蝕。

erosion = cv2.erode(src, kernel,iterations=9)

輸出結果如下圖所示:

三. 圖像膨脹代碼實現

1.基礎理論

圖像膨脹是腐蝕操作的逆操作,類似于“領域擴張”,將圖像中的高亮區域或白色部分進行擴張,其運行結果圖比原圖的高亮區域更大,線條變粗了,主要用于去噪。

(1) 圖像被腐蝕后,去除了噪聲,但是會壓縮圖像。
(2) 對腐蝕過的圖像,進行膨脹處理,可以去除噪聲,并且保持原有形狀。

它也包括兩個輸入對象:

(1)二值圖像或原始圖像
(2)卷積核

卷積核是腐蝕中的關鍵數組,采用numpy庫可以生成。卷積核的中心點逐個像素掃描原始圖像,如下圖所示:

被掃描到的原始圖像中的像素點,當卷積核對應的元素值只要有一個為1時,其值就為1,否則為0。

2.函數原型

圖像膨脹主要使用的函數為dilate,其原型如下:

dst = cv2.dilate(src, kernel, iterations)

參數dst表示處理的結果,src表示原圖像,kernel表示卷積核,iterations表示迭代次數。下圖表示5*5的卷積核,可以采用函數 np.ones((5,5), np.uint8) 構建。

注意:迭代次數默認是1,表示進行一次膨脹,也可以根據需要進行多次迭代,進行多次膨脹。通常進行1次膨脹即可。

3.代碼實現

完整代碼如下所示:

#encoding:utf-8
import?cv2??
import?numpy?as?np??

#讀取圖片
src?=?cv2.imread('test02.png',?cv2.IMREAD_UNCHANGED)

#設置卷積核
kernel?=?np.ones((5,5),?np.uint8)

#圖像膨脹處理
erosion?=?cv2.dilate(src,?kernel)

#顯示圖像
cv2.imshow("src",?src)
cv2.imshow("result",?erosion)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下所示:

圖像去噪通常需要先腐蝕后膨脹,這又稱為開運算,下篇文章將詳細介紹。如下圖所示:

erosion = cv2.erode(src, kernel)
result = cv2.dilate(erosion, kernel)

本文摘錄自eastmount X華為云開發者社區聯合出品的電子書《從零到一 ? Python圖像處理及識別》。

點擊免費下載電子書《從零到一 ? Python圖像處理及識別》

?

點擊關注,第一時間了解華為云新鮮技術~

展開閱讀全文 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • 0
    感動
  • 0
    路過
  • 0
    高興
  • 0
    難過
  • 0
    搞笑
  • 0
    無聊
  • 0
    憤怒
  • 0
    同情
熱度排行
友情鏈接
18禁高潮出水呻吟娇喘mp3,日本熟妇乱人伦A片免费高清,成人午夜精品无码区,狠狠色噜噜色狠狠狠综合久久,麻豆一区二区99久久久久,年轻的妈妈4,少妇被又大又粗又爽毛片,护士张开腿让我爽了一夜,男男互攻互受h啪肉np文,你好神枪手电视剧免费观看啊,97人妻一区二区精品免费,久久久婷婷五月亚洲97号色,freegaysexvideos男男中国,国产精品国产三级国av麻豆,国产精品又黄又爽又色无遮挡网站,亚洲av无码一区二区三区网站,亚洲国产精品久久久久蜜桃,国产真人无码作爱视频免费,国产成人精品亚洲一区二区三区,亚洲欧洲日产最新,老司机带带我精彩免费,国产成人久久精品激情,日本最新av免费一区二区三区,边摸边吃奶又黄又激烈视频
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>