一、原理html
所謂的圖片的膨脹處理,其實就是在圖像的邊緣添加像素值,使得總體的像素值擴張,進而達到圖像的膨脹效果,也能夠說是信號與系統書中所提到的像素插值處理。spa
對Z2上元素集合A和結構體元素S,使用S對A進行腐蝕,記做:3d
A⊕S={z|(S)z ∩ A ≠ Ø}code
讓位於圖像圓點的結構元素S在Z平面上移動,若是S的圓點移動到z點時,S與A有公共的交集(非空集),則認爲這樣的z點構成的集合是S對A的膨脹圖像。htm
下圖左側是原圖X,B是結構元素,右圖是膨脹的結果。膨脹的方法是,拿B的中心點和X上的點一個一個地對比,若是B上至少有一個點在X的範圍內,則該點爲前景有效點;右邊是膨脹後的結果。能夠看出,膨脹後的圖比原圖點數多,就象X被膨脹增長了一層。對象
二、膨脹的實現blog
imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 3) img2 = imdilate(img, se); subplot(1,2,1),imshow(img),title('原始圖像'); subplot(1,2,2),imshow(img2),title('膨脹圖像');
膨脹後結果以下圖。圖片
放大後觀察,左側的噪點,第一列最下面一個是2*2的塊,膨脹後變爲4*4塊。get
若是使用5*5和10*10的結構元素,膨脹效果以下。it
se = strel('square', 5) img2 = imdilate(img, se); subplot(1,3,1),imshow(img),title('原始圖像'); subplot(1,3,2),imshow(img2),title('膨脹圖像係數5'); se3 = strel('square', 10) img3 = imdilate(img, se3); subplot(1,3,3),imshow(img3),title('膨脹圖像係數10');
膨脹使物體的邊界擴大,可能把多個元素連同起來。腐蝕後能夠刪除對象邊界的某些像素,而膨脹給圖像中的對象邊界添加像素。腐蝕使圖像變「細」,膨脹是圖像變「粗」。
先腐蝕後再膨脹能夠用在圖像濾波,腐蝕後圖像變細,去除了比較小的噪聲,膨脹後恢復原圖像。
imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 5) img2 = imerode(img, se); img3 = imdilate(img2, se); subplot(1,3,1),imshow(img),title('原始圖像'); subplot(1,3,2),imshow(img2),title('腐蝕圖像'); subplot(1,3,3),imshow(img3),title('膨脹圖像');
圖像效果以下圖。
三、總結
和腐蝕相反,膨脹能使物體的邊界擴大,具體的結果和圖像的自己、結構元素的形狀有關。通常的,二值化後圖像容易出現斷裂,膨脹能夠橋接斷裂的縫隙。
腐蝕和膨脹對比:
膨脹用3X3的結構元素,掃描二值圖像的每個像素,用結構元素與其覆蓋的二值圖像作「與」運算,若是都爲0,結構圖像的該像素爲0,不然爲1。只要有一個元素非零結果就非零,因此使二值圖像擴大一圈。
腐蝕用3X3的結構元素,掃描二值圖像的每個像素,用結構元素與其覆蓋的二值圖像作「與」運算,若是都爲1,結構圖像的該像素爲1,不然爲0。只要所有元素都爲1結果才爲1,因此使二值圖像減少一圈。
尊重原創技術文章,轉載請註明。