【图像处理入门】图像去噪算法(KNN,SNN)

图像处理⼊门】图像去噪算法(KNN,SNN)实现KNN(K近邻平滑滤波器)的代码。
要求:
算法实现为函数[im]=KNNFilter (I,K,N),其中I为读⼊的图像矩阵;K为最近邻个数,N为模板⼤⼩参数(N*N)。
测试代码如下:
im=imread('cameraman.tif');
im_noise=imnoise(im,'salt & pepper');  %加⼊椒盐噪声
figure,imshow(im_noise),title('加⼊噪声之后的图象');
N = 7; K=25;
[im_filered]=KNNFilter(im_noise,N,K);
figure,imshow(im_filered),title('去噪之后的图象');
(代码复制到此处)
%测试代码
%%im=imread('C:\Users\surface\Desktop\tiantian.PNG');
%im_noise=imnoise(im,'salt & pepper');  %加⼊椒盐噪声
%figure,imshow(im_noise),title('加⼊椒盐噪声图象');
%N = 7; K=25;
%%N=3,K=5;
%[im_filered]=KNNFilter(im_noise,N,K);
function [im_filered]=KNNFilter(im_noise,N,K)
[h,l,c]=size(im_noise);
Y =zeros(h,l);
n=floor(N/2);
im=double(im_noise);
mid=floor((N*N)/2)+1;
for i=n+1:h-n
for j=n+1:l-n
block=im(i-n:i+n,j-n:j+1);
block_delt=abs(block-im(i,j));
block_delt_inline=block_delt(:);
block_delt_inline(mid)=[];
[tmpSort,ind]=sort(block_delt_inline);%%排序
block_inline=block(:);
block_inline(mid)=[];
knn=block_inline(ind(1:K));%取前k个点
Y(i,j)=mean(knn);
end
end
img=uint8(Y);
figure,imshow(img),title('KNN');
实现SNN(对称近邻平滑滤波器)的代码。
要求:
算法实现为函数[im]=SNNFilter (I,N),其中I为读⼊的图像矩阵; N为模板⼤⼩参数(正⽅形模板,边长为:2*N+1)。测试代码如下:
im=imread('C:\Users\surface\Desktop\tiantian.PNG');
im_noise=imnoise(im,'salt & pepper');  %加⼊椒盐噪声
figure,imshow(im_noise),title('加⼊噪声之后的图象');
[im_filered]=SNNFilter(im_noise,2);
figure,imshow(im_filered),title('SNN滤波图像');
(代码复制到此处)
%测试代码
%im=imread('C:\Users\surface\Desktop\tiantian.PNG');
%im_noise=imnoise(im,'salt & pepper');  %加⼊椒盐噪声
%figure,imshow(im_noise),title('加⼊噪声之后的图象');
%[im_filered]=SNNFilter(im_noise,2);
%figure,imshow(im_filered),title('SNN滤波图像');
function [im] = SNNFilter(im_noise,n)
[h,l,c] = size(im_noise); %获取⾏列、颜⾊通道
Y = zeros(h,1);
椒盐噪声for i=n+1:h-n
for j=n+1:l-n
tmp=[];
for row=i-n:i+n
for col=j-n:j+n
a0=double(im_noise(i,j));
a1=double(im_noise(row,col));
a2=double(im_noise(2*i-row,2*j-col));
if(abs(a1-a0)>abs(a2-a0))  %绝对值⽐较
selected_a=a2;  %取a2点
else
selected_a=a1;
end
if~(row==i&&col==j)%如果是中⼼点的情况
tmp=[tmp,selected_a];
end
end
end
Y(i,j) = mean(tmp);%求出tmp矩阵的均值
end
end
img = uint8(Y);
figure,imshow(img),title('SNN滤波图像');
end

本文发布于:2024-09-25 02:25:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/358923.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模板   实现   图像
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议