matlab改进中值滤波,求助中值滤波和自适应中值滤波算法错误修改
clear all;
close all;
I=imread('2.jpg');
figure;
imshow(I,[]);
title('原始圖像');
I=imnoise(I,'salt & pepper',0.15);
figure;
imshow(I,[]);
title('加椒鹽噪聲');
%7×7中值濾波
Q=medfilt2(I,[3,3]);
figure;
imshow(Q,[]);
title('7×7中值濾波');
%自適應中值濾波
[M,N]=size(I);
for i=3:7
if i<=7
for x=i/2+0.5:M-i/2+0.5
for y=i/2+0.5:M-i/2+0.5
z_max=max(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_min=min(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_med=median(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
A1=z_med-z_min;
A2=z_med-z_max;
if (A1>0&A2<0)
B1=I(x,y)-z_min;
B2=I(x,y)-z_max;
if (B1>0&B2<0)
I(x,y)=I(x,y);
else
I(x,y)=z_med;
end
else
i=i+2;
end
end
end
else
I(x,y)=I(x,y);
end
end
figure;
imshow(I,[]);
title('自適應中值濾波');
錯在z_max=max(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_min=min(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_med=median(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
這個地方小弟看不懂不懂什么意思 也改不了 麻煩各位大蝦們幫下忙
我的目的:就是讓中值濾波和自適宜中值濾波對比下看看哪個效果好??如果有別的好的方法 我想把自適宜那段程序換掉
程序的原理我也發下:自適應中值濾波算法描述
當脈沖噪聲(椒鹽噪聲)在空間上出現的概率不大,中值濾波一般可以取得較好的效果。經驗表明,當出現的正負脈沖噪聲概率均分別小于0.2時,中值濾波是可用的,而當脈沖噪聲在空間上出現的概率較大時,使用中值濾波后可能產生較嚴重的失真[6]。為了改善濾波效果,引入自適應中值濾波算法。即基于中值濾波的特點和性質,考慮采用變換窗口大小的方法,在中值算法中加入一個判斷操作,判斷窗口內的象素中值及濾波處的像點灰度是否為脈沖噪聲,并分別處理。
設 是對像點 進行中值濾波的工作窗口, 為像點 的灰度, 為 中的灰度最小值, 為 中的灰度最大值, 為 中的灰度中值,??為 中的灰度均值, 為允許的最大窗口, 為初始默認窗口。
自適應中值濾波算法的基本步驟如下:
(1)計算??。
(2)如果 ,那么轉(4);否則,轉至(3)。
(3)若 ,輸出 ;否則,增大窗口 尺寸。若 ,則重復(1)和(2);否則輸出 。
(4)計算 ;
(5)如果 ,那么輸出 ;否則,輸出 。
在上述算法中,如果 ,表明 不是噪聲,轉到(4)判斷 是否是脈沖,當 與 都不是脈沖噪聲時,優先輸出 。當 與 都是脈沖噪聲時,輸出 的灰度均值 。相應的算法流程圖 我放在附件里了
如果有別的好的方法 我想把自適宜那段程序換掉
2008-5-16 15:10 上傳
點擊文件名下載附件
34 KB, 下載次數: 19075
總結
以上是生活随笔為你收集整理的matlab改进中值滤波,求助中值滤波和自适应中值滤波算法错误修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bch编码c语言有库么,BCH码的译码方
- 下一篇: bch编码matlab,BCH码的编码方