图像噪声去除

您所在的位置:网站首页 乘性噪声用什么滤波方法去除 图像噪声去除

图像噪声去除

2024-07-11 03:06| 来源: 网络整理| 查看: 265

实验3 图像噪声去除 一、实验目的

1、掌握基于均值平滑操作的信号去噪方法的基本原理(适用于一维或二维信号的情况)。了解加性噪声和乘性噪声各自的特点。 2、掌握均值滤波器的工作原理和算法实现。 3、掌握中值滤波器的工作原理和算法实现。 4、理解边界保持类滤波器的工作原理。 5、掌握KNN(K近邻平滑滤波器)、SNN(对称近邻平滑滤波器)的算法思想及代码实现。

二、实验内容 1、调用matlab自带函数imnoise、medfilt2、filter2实现如下功能:

(1)生成含有高斯噪声、椒盐噪声的图像 (2)使用均值滤波分别对高斯噪声、椒盐噪声的图像进行滤波。 (3)使用中值滤波分别对高斯噪声、椒盐噪声的图像进行滤波。 (代码不需要提交)

function [ output_args ] = Untitled3( impath,n ) %[ output_args ] = Untitled3( 'im\cameraman.tif',3); I=imread(impath); J=imnoise(I,'salt & pepper'); figure,imshow(J),title('椒盐图象'); G=imnoise(I,'gaussian'); figure,imshow(G),title('高斯图象'); ft=ones(n,n)/(n*n); K1=medfilt2(J); figure,imshow(K1),title('椒盐均值图象'); K2=medfilt2(G); figure,imshow(K2),title('高斯均值图象'); F1=uint8(filter2(ft,J)); figure,imshow(F1),title('椒盐中值图象'); F2=uint8(filter2(ft,G)); figure,imshow(F2),title('高斯中值图象'); end 2、实现KNN(K近邻平滑滤波器)的代码。

要求: 算法实现为函数[im]=KNN_denoise (I,K,N),其中I为读入的图像矩阵;K为最近邻个数,N为模板大小参数(N*N)。 测试代码如下:

im=imread('im\cameraman.tif'); im_noise=imnoise(im,'salt & pepper'); %加入椒盐噪声 figure,imshow(im_noise),title('加入椒盐噪声图象'); N = 7; K=25; [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:h-n block=im(i-n:i+n,j-n:j+n);%找到以i,j为中心的N*N的矩阵 blockdelt=abs(block-im(i,j)); blockdeltline=blockdelt(:);%变成一行 blockdeltline(mid)=[];%去除中心元素 [temsort,ind]=sort(blockdeltline);%排序 block2line=block(:); block2line(mid)=[]; KNNS=block2line(ind(1:K)); Y(i,j)=mean(KNNS);%求均值 end end Y=floor(Y); im_filered=uint8(Y); figure,imshow(im_filered),title('KNNS图象'); end 3、实现SNN(对称近邻平滑滤波器)的代码。

要求: 算法实现为函数[im]=SNN_denoise (I,N),其中I为读入的图像矩阵; N为模板大小参数(正方形模板,边长为:2*N+1)。 测试代码如下:

im=imread('im\cameraman.tif'); %%mandi.tif'); 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_filered]=SNNFilter(im_noise,n) [h,l,c]=size(im_noise); Y=zeros(h,l); for i=n+1:h-n for j=n+1:l-n temp=[]; for r=i-n:i+n for c=j-n:j+n a0=double(im_noise(i,j));%区中心点 a1=double(im_noise(r,c));%取当前点 a2=double(im_noise(2*i-r,2*j-c));%取对称点 if(abs(a1-a0)>abs(a2-a0)) select_a=a2; else select_a=a1; end if~(r==i&&c==j) temp=[temp,select_a]; end end end Y(i,j)=mean(temp); end end im_filered=uint8(Y); end


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3