所謂的圖片的膨脹處理,其實就是在圖像的邊緣添加像素值,使得總體的像素值擴張,進而達到圖像的膨脹效果。html
對Z2上元素集合A和結構體元素S,使用S對A進行腐蝕,記做:python
A⊕S={z|(S)z ∩ A ≠ Ø}編程
讓位於圖像圓點的結構元素S在Z平面上移動,若是S的圓點移動到z點時,S與A有公共的交集(非空集),則認爲這樣的z點構成的集合是S對A的膨脹圖像。函數
函數原型:oop
CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() );
dst表示處理的結果學習
src表示原圖像測試
kernel表示卷積核spa
anchor是point類型,表示錨的位置,默認正中心code
iterations表示迭代次數htm
borderType邊緣的模糊方式
通常須要前三個參數便可,第三個參數須要用getStructuringElement函數肯定,該函數肯定模板內核特性和錨點的位置。
CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
模板內核的類型有:
MORPH_RECT:矩形
MORPH_CROSS:交叉型
MORPH_ELLIPSE:橢圓型
示例以下。
img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic7.bmp"); img1 = img.clone(); imshow("原圖", img); Mat element = getStructuringElement(MORPH_RECT, Size(5, 5)); dilate(img, img2, element); imshow("膨脹", img2);
腐蝕:就是求局部最小值的操做。
結構元素(Sturcture Element),形象稱呼刷子,在每一個像素位置上與二值圖像對應的區域進行特定的邏輯運算。運算結構是輸出圖像的相應像素。運算效果取決於結構元素大小內容以及邏輯運算性質。
對Z2上元素集合A和結構體元素S,使用S對A進行腐蝕,記做:
AΘS={z|(S)z € A}
讓位於圖像圓點的結構元素S在Z平面上移動,若是S的圓點移動到z點時,S可以徹底的包含於A中,則認爲這樣的z點構成的集合是S對A的腐蝕圖像。
函數原型:
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() );
示例以下。
img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic7.bmp"); img1 = img.clone(); imshow("原圖", img); Mat element = getStructuringElement(MORPH_RECT, Size(5, 5)); erode(img, img2, element); imshow("腐蝕", img2);
1)開運算就是先腐蝕後膨脹的過程,能夠表示爲:
dst = open(src, element)
dst = dilate(erode(dst, element))
做用:用來消除小的物體,平滑形狀邊界,而且不改變其面積。能夠去除小顆粒噪聲,斷開物體之間的粘連。
2)閉運算是先膨脹後腐蝕的過程,能夠表示爲:
dst = close(src, element)
dst = erode(dilate (dst, element))
做用:用來填充物體內的小空洞,鏈接鄰近的物體,鏈接斷開的輪廓線,平滑其邊界的同時不改變面積。
函數原型:
CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() );
其中第三個參數op表明形態學運算的類型,具體以下表。
img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic7.bmp"); img1 = img.clone(); imshow("原圖", img); Mat element = getStructuringElement(MORPH_RECT, Size(7, 7)); morphologyEx(img, img2, MORPH_OPEN, element); imshow("開運算", img2); morphologyEx(img, img3, MORPH_CLOSE, element); imshow("閉運算", img3);
內核模板大小爲Size(3,3)時測試以下圖,開運算由於先作了腐蝕因此圖片上的小白點都消失了。而閉運算由於先膨脹,因此小白點被放大了,再次腐蝕後也留了下來,而且有多個小白點連在了一塊兒。此外閉運算圖中細菌出現了互相鏈接的邊緣,開運算細菌邊緣間隔更加清晰。
內核模板大小爲Size(7,7)時測試以下。
形態學梯度就是膨脹圖與腐蝕圖之差,梯度從原區域的膨脹中減去了原區域的收縮,保留了圖像的外邊緣部分,也就是圖像的輪廓。
能夠表示爲:
dst = morpd_grad(src, element) = dilate (src, element) - erode(src, element)
1)頂帽(Top Hat):
又稱「禮帽」運算,原圖像與開運算圖的差,突出原圖像中比周圍亮的區域。
由於開運算放大了裂縫或者局部低亮度的區域,再從原圖中減去開運算後的圖,就保留了比原圖輪廓周圍的區域更明亮的區域。頂帽運算每每用來分離比鄰近點亮一些的斑塊。當一幅圖像具備大幅的背景的時候,而微小物品比較有規律的狀況下,可使用頂帽運算進行背景提取。
2)黑帽(Black Hat):
閉操做圖像減去原圖像,突出原圖像中比周圍暗的區域。
黑帽運算後的效果圖突出了比原圖輪廓周圍的區域更暗的區域,此外黑帽還能獲得圖像內部的小孔,或者前景色中的小黑點。
圖像金字塔是圖像中多尺度表達的一種,最初用於機器視覺和圖像壓縮,金字塔的底部是高分辨率的圖像,而頂部是低分辨率的近似,當向金字塔的上層移動時,尺寸和分辨率下降,伴隨的細節就越少。低分辨率的圖像主要用於分析大的結構或圖像的總體內容,高分辨率圖像適合分析單個物體的特性。
1)下采樣:就是圖片縮小,使用PryDown函數,先高斯模糊,再降採樣。下采樣將步驟:先對圖像進行高斯內核卷積,再將全部偶數行和列去除,圖像縮小到原來四分之一,迭代上述步驟就獲得的金字塔。
2)上採樣:就是圖片放大,使用PryUp函數。先將圖像在每一個方向擴大爲原來的兩倍,新增的行和列以0填充,再卷積獲得放大後的圖像。
函數原型爲:
CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst, const Size& dstsize = Size(), int borderType = BORDER_DEFAULT ); CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst, const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
示例以下。
img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic5.bmp"); imshow("原圖", img); pyrDown(img, img2, Size(img.cols * 2, img.rows * 2)); imshow("上採樣運算1", img2); pyrDown(img2, img3, Size(img2.cols * 2, img2.rows * 2)); imshow("上採樣運算2", img3);
上採樣結果。
下采樣結果。
一、《OpenCV3 編程入門》,電子工業出版社,毛星雨著
二、《學習OpenCV》,清華大學出版社,Gary Bradski, Adrian kaehler著
三、圖像金字塔(高斯金字塔、拉普拉斯金字塔)
http://www.javashuo.com/article/p-bwkkqknc-ee.html
四、圖像金字塔
https://www.kancloud.cn/aollo/aolloopencv/272073
五、Image Pyramids
六、Image Pyramids
https://docs.opencv.org/2.4/doc/tutorials/imgproc/pyramids/pyramids.html
尊重原創技術文章,轉載請註明。