matlab K近邻均值平滑滤波,K近邻均值滤波 | 学步园

function[y]=K_neardealnoise(x,a,b)

[m,n]=size(x);

x=double(x);

y=x;

k0=floor(a*b/2)+1;

for i=2:m-1

for j=2:n-1

%y(i,j)=0;

z1=abs(x(i,j)-x(i-1,j+1));

z2=abs(x(i,j)-x(i,j+1));

z3=abs(x(i,j)-x(i+1,j+1));

z4=abs(x(i,j)-x(i-1,j));

z5=abs(x(i,j)-x(i+1,j));

z6=abs(x(i,j)-x(i-1,j-1));

z7=abs(x(i,j)-x(i,j-1));

z8=abs(x(i,j)-x(i+1,j-1));

z=[z1,z2,z3,z4,z5,z6,z7,z8];

h=[x(i-1,j+1),x(i,j+1),x(i+1,j+1),x(i-1,j),x(i+1,j),x(i-1,j-1),x(i,j-1),x(i+1,j-1)];

%对8个差进行冒泡排序法

for i1=1:1:7

for j1=1:1:8-i1

if z(1,j1) > z(1,j1+1)%%该

z0=h(1,j1);%z0为临时变量 h(1,j1)=h(1,j1+1); h(1,j1+1)=z0; end end end %for i1=1:k0 %y(i,j)=y(i,j)+h(1,i1); %end %y(i,j)=y(i,j)/k0; y(i,j)=mean( h(1:k0) ); %y(i,j)=median( h(1:k0) );%中心像素获得最小方差模板对应的中值 endend

主函数:

%%该算法找出与核心像素灰度值接近的K个像素。若为信号点,非噪声点,则不受太大影响;若为噪声点,此种方法起到抑制噪声的作用

I=imread('1.jpg');

I=rgb2gray(I);

[e f]=size(I);

%J=imnoise(I,'salt & pepper',0.030);

J=imnoise(I,'gaussian',0,0.002);

%%第一种算法在保持边缘和细节较第二种算法要好很多,当然第一种算法在去噪方面不彻底,不如第二种

l=K_neardealnoise(J,3,3);%灰度最小方差的均值滤波器

m=commonfilt2(J,3,3);%自己编写的均或中值滤波方法

subplot(1,2,1),imshow( uint8(l) ),title('K近邻平滑滤波');

subplot(1,2,2),imshow( uint8(m)),title('普通均值滤波');

%2 计算三种算法的峰值信噪比

B=8; %编码一个像素用多少二进制位

MAX=2^B-1; %图像有多少灰度级

I=double(I);

l=double(l);

m=double(m);

% psnr2 = 32.0636

MES2=sum(sum((I-l).^2))/(e*f); %自适应中值去噪的均方差

PSNR2=20*log10(MAX/sqrt(MES2)); %自适应中值算法去噪的峰值信噪比

% psnr3 = 34.3898

MES3=sum(sum((I-m).^2))/(e*f); %自己编写的中值去噪的均方差

PSNR3=20*log10(MAX/sqrt(MES3)); %自己编写的中值去噪的峰值信噪比

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值