matlab中多边形滤波器,几种常见空间滤波器MATLAB实现
本文鏈接:https://blog.csdn.net/LYduring/article/details/80443573
一、目的
實(shí)現(xiàn)算術(shù)均值濾波器、幾何均值濾波器、中值濾波器、修正的阿爾法均值濾波器、自適應(yīng)中值濾波器,并比較不同濾波器的降噪結(jié)果。
二、代碼
代碼的思路如下:
(1)先對(duì)原始的電路圖先后進(jìn)行加高斯噪聲和椒鹽噪聲;之后設(shè)置濾波器的模板大小為5*5,分別對(duì)被噪聲污染的圖像進(jìn)行算術(shù)均值、幾何均值、中值、修正的阿爾法濾波,并輸出圖像,方便結(jié)果比較。
(2)為了比較中值濾波器和自適應(yīng)中值濾波器的濾波結(jié)果,先對(duì)原始電路圖添加椒鹽噪聲;接著對(duì)噪聲圖像進(jìn)行模板大小為5*5的中值濾波;最后對(duì)噪聲圖像進(jìn)行最大模板為5*5的自適應(yīng)中值濾波,分別輸出濾波后的圖像,比較結(jié)果。
代碼具體實(shí)現(xiàn)如下:
%******************************************************%
%目的:比較幾種不同均值濾波器和自適應(yīng)中值濾波器的去噪聲效果
%日期:2018.5.18
%******************************************************%
%讀入圖像
img = imread('img.tif');
figure;
subplot(1,3,1);
imshow(img);
title('原始圖像');
%分別添加加入高斯噪聲和椒鹽噪聲
f1 = imnoise(img,'gaussian');
subplot(1,3,2)
imshow(f1);
title('添加高斯噪聲');
f2 = imnoise(f1,'salt & pepper');
subplot(1,3,3)
imshow(f2);
title('再添加椒鹽噪聲');
f2 = double(f2);
[M,N] = size(f2);
%%%%比較幾種均值濾波器及中值濾波器的濾波結(jié)果%%%%%%
%算術(shù)均值濾波器
n = 5; %模板大小
f11 = f2;
for i = 1:M-n+1
for j = 1:N-n+1
g1 = f2(i:i+n-1,j:j+n-1);
s1 = sum(sum(g1));
%中心點(diǎn)的值用子圖像的算術(shù)均值代替
f11(i+(n-1)/2,j+(n-1)/2) = s1/(n*n);
end
end
img1 = uint8(f11);
figure;
subplot(1,2,1);
imshow(img1);
title('算術(shù)均值濾波結(jié)果');
%幾何均值濾波器
n = 5; %模板大小
f21 = f2 + ones(M,N); %防止有個(gè)像素點(diǎn)為0而導(dǎo)致乘積為0
f12 = f21;
for i = 1:M-n+1
for j = 1:N-n+1
g2 = f21(i:i+n-1,j:j+n-1);
s2 = prod(g2(:));
%中心點(diǎn)的值用子圖像的幾何均值代替
f12(i+(n-1)/2,j+(n-1)/2) = s2.^(1/numel(g2));
end
end
img2 = uint8(f12);
subplot(1,2,2);
imshow(img2);
title('幾何均值濾波結(jié)果');
%中值濾波器
img3 = uint8(medfilt2(f2,[5 5]));
figure;
subplot(1,2,1);
imshow(img3);
title('中值濾波結(jié)果');
%修正的阿爾法均值濾波器
n = 5; %模板大小
d = 5; %去掉最值灰度值的個(gè)數(shù)
f13 = f2;
for i = 1:M-n+1
for j = 1:N-n+1
g3 = f2(i:i+n-1,j:j+n-1);
g3 = sort(g3(:)); %對(duì)鄰域內(nèi)的像素點(diǎn)進(jìn)行排序
min_num = ceil(d/2); %去掉最小灰度值的個(gè)數(shù)
max_num = floor(d/2); %去掉最大灰度值的個(gè)數(shù)
%去掉d個(gè)最值灰度級(jí)后求算術(shù)均值
g3(1:min_num) = zeros(min_num,1);
g3(n-max_num+1:n) = zeros(max_num,1);
s3 = sum(g3);
%中心點(diǎn)的值用子圖像的算術(shù)均值代替
f13(i+(n-1)/2,j+(n-1)/2) = s3/(n*n-d);
end
end
img4 = uint8(f13);
subplot(1,2,2);
imshow(img4);
title('修正的阿爾法均值濾波結(jié)果');
%%%%%%%比較中值濾波器及自適應(yīng)中值濾波器的濾波結(jié)果%%%%%%%
f2 = imnoise(img,'salt & pepper');
figure;
subplot(1,4,1);
imshow(img);
title('原圖');
subplot(1,4,2);
imshow(f2);
title('添加椒鹽噪聲的圖像');
%中值濾波器
img5 = uint8(medfilt2(f2,[5 5]));
subplot(1,4,3);
imshow(img5);
title('中值濾波結(jié)果');
%自適應(yīng)中值濾波器
f14 = f2;
alreadyPro = false(size(f2)); %看是否完成進(jìn)程
Smax=5; %最大窗口尺寸
for s = 3:2:Smax %起始窗口尺寸設(shè)為3
%得到特定的灰度值
zmin = ordfilt2(f2, 1, ones(s, s), 'symmetric');
zmax = ordfilt2(f2, s * s, ones(s, s), 'symmetric');
zmed = medfilt2(f2, [s s], 'symmetric');
%進(jìn)程B
processB = (zmed > zmin) & (zmax > zmed) & ~alreadyPro;
%進(jìn)程A
processA = (f2 > zmin) & (zmax > f2);
outZxy = processB & processA;
outZmed = processB & ~processA;
f14(outZxy) = f2(outZxy);
f14(outZmed) = zmed(outZmed);
alreadyPro = alreadyPro | processB;
if all(alreadyPro(:))
break;
end
end
f14(~alreadyPro) = zmed(~alreadyPro);
img6 = uint8(f14);
subplot(1,4,4);
imshow(img6);
title('自適應(yīng)中值濾波結(jié)果');
三、結(jié)果分析
得到的結(jié)果如下:
由濾波結(jié)果,我們可以看出,對(duì)于添加了高斯噪聲和椒鹽噪聲的圖像,算術(shù)均值和幾何均值濾波器的效果比較差,尤其是幾何均值濾波器;而中值濾波器和修正后的阿爾法均值濾波器的降噪效果比前面兩種濾波器的效果要好很多,修正的阿爾法均值濾波器的效果最好,使圖像變得更平滑。中值濾波器和自適應(yīng)中值濾波器進(jìn)行比較,兩者的降噪效果都不錯(cuò),不過中值濾波器導(dǎo)致了原始圖像細(xì)節(jié)的丟失,而自適應(yīng)中值濾波器則很好地保持了原始圖像的清晰度和細(xì)節(jié)。
標(biāo)簽:subplot,濾波器,f2,title,均值,濾波,幾種,MATLAB
來源: https://www.cnblogs.com/Ph-one/p/11604362.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的matlab中多边形滤波器,几种常见空间滤波器MATLAB实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统之间无密传输,scp采用无
- 下一篇: matlab数字图像处理函数,MATLA