1. 均值滤波:即线性滤波,有: a.邻域平均, b. 加权平均两种。
a. 邻域平均:用一个像素邻域平均值作为滤波结果,此时滤波器模板的所系数都取1,为保证输出图仍在原来的灰度值范围,在算得R后要将其除以系数总个数再进行赋值,对3*3的模板来说,在算得R后要将其除以系数9。
b. 加权平均:对同一尺寸的模板,可对不同位置的系数采用不同的数值,一般认为离对应模板中心像素近的像素应对滤波结果又较大贡献,所以接近模板中心的系数可比较大而模板边界附近的系数应比较小。
以3*3模板为例:
f = imread('F:\matlab_ex\imageProcessing\wx.jpg'); n = 3; template = ones(n); [height, width] = size(f); x1 = double(f); x2 = x1; for i = 1:height-n+1 for j = 1:width-n+1 c = x1(i:i+n-1,j:j+n-1).*template; s = sum(sum(c)); x2(i+(n-1)/2,j+(n-1)/2) = s/(n*n); end end g = uint8(x2); imshow(g);
f = imread('F:\matlab_ex\imageProcessing\wx.jpg'); [height, width] = size(f); x1 = double(f); x2 = x1; for i = 1:height-n+1 for j = 1:width-n+1 c = x1(i:i+n-1,j:j+n-1); e = c(1,:); for k = 2:n e = [e, c(k, :)]; end tmp = median(e); x2(i+(n-1)/2,j+(n-1)/2) = tmp; end end g = uint8(x2); imshow(g);
3. 使用自带函数滤波:
try %实验步骤一:彩色、灰度变换 h=imread('F:\matlab_ex\imageProcessing\wx.jpg'); %读入彩色图片 c=rgb2gray(h); %把彩色图片转化成灰度图片,256级 figure,imshow(c),title('原始图象'); %显示原始图象 g=imnoise(c,'gaussian',0.1,0.002); %加入高斯噪声 figure,imshow(g),title('加入高斯噪声之后的图象'); %显示加入高斯噪声之后的图象 %实验步骤二:用系统预定义滤波器进行均值滤波 n=input('请输入均值滤波器模板大小\n'); A=fspecial('average',n); %生成系统预定义的3X3滤波器 Y=filter2(A,g)/255; %用生成的滤波器进行滤波,并归一化 figure,imshow(Y),title('用系统函数进行均值滤波后的结果'); %显示滤波后的图象 %实验步骤三:用Matlab系统函数进行中值滤波 n2=input('请输入中值滤波的模板的大小\n'); Y3=medfilt2(g,[n2 n2]); %调用系统函数进行中值滤波,n2为模板大小 figure,imshow(Y3),title('用Matlab系统函数进行中值滤波之后的结果'); %显示滤波后的图象 %实验步骤四:用matlab系统函数进行高斯滤波 n3=input('请输入高斯滤波器的均值\n'); k=input('请输入高斯滤波器的方差\n'); A2=fspecial('gaussian',k,n3); %生成高斯序列 Y5=filter2(A2,g)/255; %用生成的高斯序列进行滤波 figure,imshow(Y5),title('用Matlab函数进行高斯滤波之后的结果'); %显示滤波后的图象 catch %捕获异常 disp(lasterr); %如果程序有异常,输出 end
以上
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209691.html原文链接:https://javaforall.net
