- 滤波原理
滤波是为了消除噪声影响,提高图像质量,滤波方法的选择取决于噪声的特性。滤波包括空间滤波和频率域滤波,在数学上二者可以相互转化。空间滤波本质上是通过临近像素的微操作来实现噪声降低,比如线性平滑滤波,就是通过临近像素的加权或者不加权平均来消减噪声强度,这对于方差较小较稳定的噪声效果较好。用公式来表示空间滤波就是:
实际上就是通过一个w模板在图像上移动,然后进行相关性运算。也可以进行卷积运算,但是两者在处理方法上没有区别,卷积运算是将模板在图像水平和竖直方向进行翻转后再进行相关操作。
- 线性滤波
线性滤波有均值滤波,也有加权滤波。模板如下:
MATLAB代码:
function filtered_image=linear_filtering(f,w,filtering_mode,boundary_options,size_options)
[row_f,col_f]=size(f);
[row_w,col_w]=size(w);
f_exp=zeros(row_f+row_w-1,col_f+col_w-1);
f_sum=0;
if strcmp(boundary_options,'repllicate')
for i=1:row_f+row_w-1
for j=1:col_f+col_w-1
if (i<row_w/2) && (j<col_f+col_w/2 && j>col_w/2)
f_exp(i,j)=f(1,j-floor(col_w/2));
elseif (i>row_f+row_w/2) && (j<col_f+col_w/2 && j>col_w/2)
f_exp(i,j)=f(row_f,j-floor(col_w/2));
elseif (j<col_w/2) && (i<row_f+row_w/2 && i>row_w/2)
f_exp(i,j)=f(i-floor(row_w/2),j);
elseif (j>col_f+col_w/2) && (i<row_f+row_w/2 && i>row_w/2)
f_exp(i,j)=f(i-floor(row_w/2),col_f);
elseif i<row_f+row_w/2 && i>row_w/2 && j<col_f+col_w/2 && j>col_w/2
f_exp(i,j)=f(i-floor(row_w/2),j-floor(col_w/2));
end
end
end
elseif strcmp(boundary_options,'symmetric')
for i=1:row_f+row_w-1
for j=1:col_f+col_w-1
if (i<row_w/2) && (j<col_f+col_w/2 && j>col_w/2)
f_exp(i,j)=f(row_w-1-i,j-floor(col_w/2));
elseif (i>row_f+row_w/2) && (j<col_f+col_w/2 && j>col_w/2)
f_exp(i,j)=f(2*row_f+floor(row_w/2)-i,j-floor(col_w/2));
elseif (j<col_w/2) && (i<row_f+row_w/2 && i>row_w/2)
f_exp(i,j)=f(i-floor(row_w/2),col_w-1-j);
elseif (j>col_f+col_w/2) && (i<row_f+row_w/2 && i>row_w/2)
f_exp(i,j)=f(i-floor(row_w/2),2*col_f+floor(col_w/2)-j);