matlab图像的腐蚀和膨胀_OpenCV图像处理系列八 --- 腐蚀与膨胀
今天,我們一起來學習圖像形態學操作中兩種最基本的形態學操作,即腐蝕與膨脹。
一、理論
數學形態學(Mathematical morphology) 是一門建立在格論和拓撲學基礎之上的圖像分析學科,是數學形態學圖像處理的基本理論。其基本的運算包括:腐蝕和膨脹、開運算和閉運算、骨架抽取、極限腐蝕、擊中擊不中變換、形態學梯度、Top-hat變換、顆粒分析、流域變換等。
腐蝕與膨脹主要實現以下功能:
- 消除噪聲
- 分割(isolate)出獨立的圖像元素,在圖像中連接(join)相鄰的元素。
- 尋找圖像中的明顯的極大值區域或極小值區域
- 求出圖像的梯度
1、腐蝕
腐蝕對圖像求局部最小值;腐蝕操作就是將圖像(或圖像的一部分區域,我們稱之為A)與卷積核(我們稱之為B)進行卷積。
核可以是任何的形狀和大小,它擁有一個單獨定義出來的參考點,我們稱其為錨點。多數情況下,核是一個小的中間帶有參考點和實心正方形或者圓盤,其實,我們可以把核視為模板或者掩碼。
1)腐蝕的數學表達式
腐蝕的數學表達式
2)腐蝕效果演示
腐蝕效果演示
3)腐蝕的作用:
- 對象大小減小一個像素(3x3)
- 平滑對象邊緣
- 弱化或者分割圖像之間的半島型連接
2、膨脹
膨脹對圖像求局部的最大值;核B與圖形卷積,即計算核B覆蓋的區域的像素點的最大值,并把這個最大值賦值給參考點指定的像素;這樣就會使圖像中的高亮區域逐漸增長。
核可以是任何的形狀和大小,它擁有一個單獨定義出來的參考點,我們稱其為錨點。多數情況下,核是一個小的中間帶有參考點和實心正方形或者圓盤,其實,我們可以把核視為模板或者掩碼。
1)膨脹的數學表達式
膨脹的數學表達式
膨脹效果演示
膨脹的作用:
- 對象大小增加一個像素(3x3)
- 平滑對象邊緣
- 減少或者填充對象之間的距離
小結:
可以看做膨脹是將白色區域擴大,腐蝕是將黑色區域擴大。
二、OpenCV腐蝕與膨脹API函數詳解
1、腐蝕
1)函數原型:
void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue());2)函數功能:
用指定的卷積核腐蝕圖像,使用像素鄰域內的局部極小運算符來腐蝕一張圖片,從src輸入,由dst輸出,支持就地(in-place)操作。
3)參數詳解:
- 第一個參數,InputArray類型的src,輸入圖像,即源圖像,填Mat類的對象即可。圖像通道的數量可以是任意的,但圖像深度應為CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F其中之一;
- 第二個參數,OutputArray類型的dst,即目標圖像,需要和源圖片有一樣的尺寸和類型;
- 第三個參數,InputArray類型的kernel,腐蝕操作的內核。若為NULL時,表示的是使用參考點位于中心3x3的核。我們一般使用函數 getStructuringElement配合這個參數的使用。getStructuringElement函數會返回指定形狀和尺寸的結構元素(內核矩陣);
- 第四個參數,Point類型的anchor,錨的位置,其有默認值(-1,-1),表示錨位于單位(element)的中心,我們一般不用管它;
- 第五個參數,int類型的iterations,迭代使用erode()函數的次數,默認值為1;
- 第六個參數,int類型的borderType,用于推斷圖像外部像素的某種邊界模式。注意它有默認值BORDER_DEFAULT;
- 第七個參數,const Scalar&類型的borderValue,當邊界為常數時的邊界值,有默認值morphologyDefaultBorderValue(),一般我們不用去管他。
第三個參數一般用getStructuringElement()函數獲取卷積核的大小;getStructuringElement函數會返回指定形狀和尺寸的結構元素(內核矩陣)。
其中,getStructuringElement函數的第一個參數表示內核的形狀,我們可以選擇如下三種形狀之一:
- 矩形: MORPH_RECT
- 交叉形: MORPH_CROSS
- 橢圓形: MORPH_ELLIPSE
而getStructuringElement函數的第二和第三個參數分別是內核的尺寸以及錨點的位置。
我們一般在調用erode以及dilate函數之前,先定義一個Mat類型的變量來獲得getStructuringElement函數的返回值。對于錨點的位置,有默認值Point(-1, -1),表示錨點位于中心;并且需要注意,十字形的element形狀唯一依賴于錨點的位置;而在其他情況下,錨點只是影響了形態學運算結果的偏移。
4)實例:
#include #include #include #include using namespace std;using namespace cv;int main(){ //載入原圖 Mat image = imread("lena.png"); if (image.empty()) { printf("image error!"); return -1; } //創建窗口 namedWindow("【原圖】腐蝕操作"); namedWindow("【效果圖】腐蝕操作"); //顯示原圖 imshow("【原圖】腐蝕操作總結
以上是生活随笔為你收集整理的matlab图像的腐蚀和膨胀_OpenCV图像处理系列八 --- 腐蚀与膨胀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 借呗欠50000会坐牢吗?
- 下一篇: 风控花呗怎么解除