Matlab-形態學濾波去除椒鹽噪聲實例


形態學濾波最基本的兩個形態學操作是腐蝕和膨脹,其他的高級形態學操作是基於這兩個基本的形態學操作進行的,比如開運算、閉運算、形態學梯度、頂帽、黑帽等。

需要注意的是,在Matlab中,亮值是目標物,暗值是背景點。

先上結果:

 

代碼:

%% 形態學去噪
P = imread('cameraman.jpg');
I = imnoise(P, 'salt & pepper', 0.05);

SE = strel('disk', 1);

J1 = imerode(I, SE);
J1 = imerode(J1, SE);
J2 = imdilate(J1, SE);
J2 = imdilate(J2, SE);
J2 = imdilate(J2, SE);
J2 = imdilate(J2, SE);
J3 = imerode(J2, SE);
J3 = imerode(J3, SE);
figure;
subplot(2,3,1), imshow(P), title("原圖");
subplot(2,3,2), imshow(I), title("椒鹽噪聲");
subplot(2,3,3), imshow(J1), title("腐蝕兩次");
subplot(2,3,4), imshow(J2), title("膨脹兩次");
subplot(2,3,5), imshow(J3), title("膨脹兩次");
subplot(2,3,6), imshow(J4), title("腐蝕兩次");

%% 另一種方式
J1 = imclose(I, SE);
J2 = imopen(J1, SE);
J3 = imclose(J2, SE);
J4 = imopen(J3, SE);
figure;
subplot(2,3,1), imshow(P), title("原圖");
subplot(2,3,2), imshow(I), title("椒鹽噪聲");
subplot(2,3,3), imshow(J1), title("閉運算");
subplot(2,3,4), imshow(J2), title("開運算");
subplot(2,3,5), imshow(J2), title("閉運算");
subplot(2,3,6), imshow(J4), title("開運算");

%% 中值濾波對比
m = medfilter(I, 3);
figure;
subplot(1,3,1), imshow(P), title("原圖");
subplot(1,3,2), imshow(I), title("椒鹽噪聲");
subplot(1,3,3), imshow(m), title("中值濾波");

  中值濾波的函數可以參考 Matlab-代碼實現圖像平滑去噪 這一篇文章。

 

通過先腐蝕膨脹后膨脹腐蝕的方式可以實現先消除白點再消除黑點。也可以通過閉運算再開運算的方式消除椒鹽噪聲。形態學濾波的形式多種多樣。

就結果而言,形態學濾波和中值濾波在處理椒鹽噪聲上的效果是近似的,在細節方面形態學濾波遜於中值濾波,因為形態學濾波只能夠使圖像總的位置和形狀不變,在進行腐蝕和膨脹的時候會造成較多的信息丟失,而中值濾波相對損失較少的信息。

就過程而言,形態學濾波需要嘗試結構元素的現狀和大小、腐蝕和膨脹的先后順序和開運算閉運算的順序,過程比較復雜,而中值濾波較為簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM