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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)

發布時間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 轉載博客請注明詳細地址,謝謝
  • 本文講了形態學基本操作膨脹腐蝕開閉操作的原理
  • 本文講解了用OpenCV-Python實現形態學操作

目錄

?

一、形態學簡述

1、簡介

2、一些基本定義

3、結構元素

(1)什么是結構元素

(2)常用的結構元素

(3)結構元素的創建方法(numpy和opencv)

二、形態學膨脹與腐蝕(以二值圖像為例)

1、膨脹(dilate)

(1)概念

(2)準則

(3)實質

2、腐蝕(erode)

(1)概念

(2)準則

(3)實質

3、Python_opencv中膨脹腐蝕的代碼函數

4、實例

三、形態學開閉操作

1、開操作

(1)概念

(2)作用

2、閉操作

(1)概念

(2)作用

3、Python_opencv中開閉操作的代碼函數

4、實例

四、形態學基本操作匯總

1、形態學的主要功能

2、腐蝕與膨脹

3、其他操作

五、參考文獻


一、形態學簡述

這里只是進行簡單的介紹,重點在于代碼的實現以及核心原理,具體形態學的知識可以參考以下文章:

https://wenku.baidu.com/view/e54eb9435122aaea998fcc22bcd126fff6055dcc.html

1、簡介

2、一些基本定義

3、結構元素

(1)什么是結構元素

結構元素就是一個類似于核的一個矩陣,numpy矩陣,其作用主要是用于形態學的各種操作進行類卷積的操作,不同的結構元素得到的形態學操作的結果也是不一樣的。元素值由0和1組成,根據1所填充的區域形狀可以將結構元素分為以下常見的結構元素有:橢圓、方形、菱形。

結構元素的選擇我們應該根據我們所需要處理的圖像的特點來進行選擇,如一個二值圖像的內部輪廓比較規整,可以分成一個個小小的矩形,則可以選擇矩形結構元素,這樣可以比較好地貼合理想的結果。

(2)常用的結構元素

結構元素一般默認將形狀的中心作為參考點,用于與待處理圖像的像素點進行貼合

(3)結構元素的創建方法(numpy和opencv)

利用numpy創建矩陣,元素為0和1,根據設置1的位置可以創建出不同類型的結構元素

numpy.array([[...],[...],...)

利用opencv_python自帶的函數getStructringElement()進行創建

cv2.getStructuringElement(kernel_type,(ksize.ksize))

參數解析:

?1)kernel_type:創建結構元素的類型,有矩形、十字形等(其他頂帽、梯度等是形態學的其他操作,不是結構元素的類型)

2)ksize:結構元素的大小,一般為奇數,常用的有3和5,越大其腐蝕和膨脹的程度就越大

strc_ele = np.array([[1,1,1],[1,1,1],[1,1,1]]) struc_ele = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

二、形態學膨脹與腐蝕(以二值圖像為例)

1、膨脹(dilate)

(1)概念

二值圖像的膨脹實質上就是用結構元素去掃描整個圖像,其實就是將結構元素的中心和圖像的目標像素點進行重合,然后將結構元素和目標像素點鄰域相對應的元素值進行相乘,然后將大值賦值給目標像素點作為值,在二值圖中只有0和255兩個灰度值(灰度圖膨脹就是將對應元素值相加,將最大值賦值給目標像素點)

(2)準則

二值圖膨脹準則:輸出值的值就是輸入點鄰域值的最大值

灰度圖膨脹準則:輸出值的值就是輸入點鄰域值加上結構元素相對應值的和的最大值

(3)實質

只要重疊的區域有1,則將目標像素點的灰度值設置為255,白色

2、腐蝕(erode)

(1)概念

二值圖像的腐蝕實質上就是用結構元素去掃描整個圖像,其實就是將結構元素的中心和圖像的目標像素點進行重合,然后將結構元素和目標像素點鄰域相對應的元素值進行相乘,然后將小值賦值給目標像素點作為值,在二值圖中只有0和255兩個灰度值(灰度圖腐蝕就是將對應元素值相減,將最小值賦值給目標像素點)

(2)準則

二值圖腐蝕準則:輸出值的值就是輸入點鄰域值的最小值

灰度圖腐蝕準則:輸出值的值就是輸入點鄰域值加上結構元素相對應值的差的最小值

(3)實質

構元素類似于卷積一樣在輸入圖像上移動,從輸入數據的坐標(0,0)開始,結構元素的中心與(0,0)重合,如果結構元素中的1與它所覆蓋的區域的1完全重合時,才能把結構元素中心與輸入相對應的坐標值賦值為1,否則為0。注意在計算過程中不改變原始數據,輸出矩陣為單獨的矩陣。下圖為計算過程的分析:

待測二值圖像中,1表示255白色,0表示0黑色

?

?

3、Python_opencv中膨脹腐蝕的代碼函數

erode_img = cv2.erode(src,kernel)#腐蝕 dilate_img = cv2.dilate(src,kernel)#膨脹

參數解析:

1)src:待處理的圖像,一般是二值圖像和灰度圖像

2)kernel:指定要使用的結構元素

4、實例

import cv2 import numpy as npimg = 'colorful_lena.jpg' gray = cv2.imread(img,0)#讀取并灰度化 binary = cv2.threshold(gray,49,255,cv2.THRESH_BINARY)[1]#二值化 struc_ele = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))#創建結構元素erode_img = cv2.erode(binary,struc_ele)#腐蝕 dilate_img = cv2.dilate(binary,struc_ele)#膨脹#圖像顯示 cv2.imshow('gray',gray) cv2.imshow('binary',binary) cv2.imshow('erode',erode_img) cv2.imshow('dilate',dilate_img) cv2.waitKey(0)

這里是以矩形3x3的結構元素進行的膨脹和腐蝕操作

三、形態學開閉操作

1、開操作

(1)概念

開操作就是對待測圖像使用同一個結構元素先進行腐蝕再進行膨脹操作

(2)作用

一般來說,開運算能夠去除孤立的小點,毛刺和小橋(即連通兩塊區域的小點),而總的位置和形狀不變,這就是開運算的作用。

2、閉操作

(1)概念

閉操作就是對待測圖像用同一個結構元素先進行膨脹操作再進行腐蝕操作

(2)作用

閉操作能夠填平小湖(即小孔),彌補小縫,但是圖像的大小位置不會改變

3、Python_opencv中開閉操作的代碼函數

closed_img = cv2.morphologyEx(src,cv2.MORPH_CLOSE,kernel)#閉 opend_img = cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel)#開

?參數解析:

1)src:待處理圖像

2)kernel:結構元素

4、實例

import cv2 import numpy as npimg = 'colorful_lena.jpg' gray = cv2.imread(img,0)#讀取并灰度化 binary = cv2.threshold(gray,49,255,cv2.THRESH_BINARY)[1]#二值化 struc_ele = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))#創建結構元素closed_img = cv2.morphologyEx(binary,cv2.MORPH_CLOSE,struc_ele)#閉 opend_img = cv2.morphologyEx(binary,cv2.MORPH_OPEN,struc_ele)#開#圖像顯示 cv2.imshow('gray',gray) cv2.imshow('binary',binary) cv2.imshow('closed',closed_img) cv2.imshow('opend',opend_img) cv2.waitKey(0)

四、形態學基本操作匯總

所有的操作都可以根據原理自己編程這里不再贅述

1、形態學的主要功能

?????? 形態學基本操作主要有:膨脹和腐蝕兩大類,其功能主要為:消除噪聲;分割出獨立的圖像元素,在圖像中連接相鄰的元素;尋找圖像中的明顯的極大值區域或極小值區域;求出圖像的梯度。

2、腐蝕與膨脹

?????? 腐蝕和膨脹是針對于圖像中的高亮部分而言的,膨脹是圖像中高亮部分進行膨脹,類似于“臨域膨脹”,效果圖的高亮部分比原圖像大;腐蝕則與之相反。
?????? 膨脹的原理:膨脹就是求圖像像素局部最大值的操作。膨脹/腐蝕就是將圖像或圖像的一部分與核進行卷積。(核可以任意大小,可以是一個小的、中間帶著參考點的實心正方型)。核和圖像部分卷積,計算出核覆蓋區域像素點的最大值,并將這個最大值賦值給參考點所在像素。
?????? 腐蝕與膨脹相反,是用來求局部像素最小值的算法。

3、其他操作

高級形態學操作則是基于腐蝕和膨脹演化的操作。


開運算:
原理:先腐蝕后膨脹;
用途:用與消除小物體,在纖細點處分離物體,并在平滑較大物體的邊界不明顯改變其面積。


閉運算:
原理:先膨脹后腐蝕
用途:用于消除圖像中的小型黑色區域。


形態學梯度:
原理:圖像的膨脹圖和腐蝕圖變化之差
用途:用來保留物體的邊緣輪廓


頂帽運算:
原理:是原圖像與開運算效果圖之差。因為開運算帶來的結果是放大了裂縫或者局部低亮的區域,因此從原圖減去開運算后的圖,得到的效果圖突出了比原圖輪廓周圍的區域更明亮的區域。
用途:頂帽運算往往用來分離比鄰近點亮的斑塊。在一幅圖像中擁有大幅背景而微小物品比較有規律的情況下可以使用頂帽運算進行背景提取。


黑帽運算:
原理:計算閉運算效果圖與原圖像之差,突出了比原圖輪廓周圍的區域更暗的區域。
用途:用來分離比鄰近點暗的一些斑塊。

五、參考文獻

https://blog.csdn.net/Fcc_bd_stars/article/details/99706125

https://blog.csdn.net/Aidam_Bo/article/details/104469098

https://blog.csdn.net/qq_35859033/article/details/80210264

https://wenku.baidu.com/view/e54eb9435122aaea998fcc22bcd126fff6055dcc.html

https://wenku.baidu.com/view/7ea9d65d312b3169a451a487.html?sxts=1594347309006

總結

以上是生活随笔為你收集整理的【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)的全部內容,希望文章能夠幫你解決所遇到的問題。

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