200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 图像处理 | 空间域与频率域滤波

图像处理 | 空间域与频率域滤波

时间:2019-08-23 19:14:57

相关推荐

图像处理 | 空间域与频率域滤波

频率域滤波(低通)

作用:平滑处理图像,通过低频拒绝高频,同时高频往往是图像噪声所集中的地方。

1) 算法思路流程

频率域滤波的一般处理方法是:先修改一幅图像的傅里叶变换,然后计算其反变换,得到处理后的结果。

高斯低通滤波函数已经给出,同时参数D0已知,我们只需求出频率中的每一个点与频率矩形中心的距离D并代入公式即可。

具体实现步骤如下:

生成原图像两倍大小(P=2r,Q=2c)的全零数组,并用原图像对其进行填充;将1) 中所得结果乘以(-1)^(x+y),作中心变换;通过fft2()函数计算中心变换后原图像的傅里叶变换;遍历傅里叶变换后所得矩阵中的每一个元素,计算出其与频率域矩形中心(P/2,Q/2)的距离D,再将D0与D代入高斯低通滤波公式;对4)中得到结果进行傅里叶反变换,取出实部,并将每一个像素点乘以(-1)^(x+y);从矩阵的左上角提取出原图像大小的区域,赋值给输出图像img2。

2) 函数接口实现

function img2 = myGussianLowPassFilter(img1, D0)% 图像的频率域高斯低通滤波处理函数% img1为输入图像,D0为距频率矩形中心的距离(即截止频率);% img2为滤波后的图像img1_double = double(img1);[r c] = size(img1_double);% 填充参数P和QP = 2*r;Q = 2*c;% 生成 P*Q 的全0数组然后进行填充img1_fill = zeros(P,Q);img1_fill(1:P/2,1:Q/2) = img1_double;for i = 1:P/2for j = 1:Q/2% 中心变换img1_fill(i,j) = img1_fill(i,j)*(-1)^(i+j);endend% 计算输入图像的傅里叶变换img1_fill_dft = fft2(img1_fill);img2 = zeros(P,Q);for i = 1:Pfor j = 1:Q% D为频率域中的一点(i,j)与频率矩形中心的距离D = sqrt( (i-(P/2))^2+(j-(Q/2))^2 );factor = -1 * ( D^2/(2*D0^2) );H = exp(factor);% 将F与H进行乘积运算img2(i,j) = img1_fill_dft(i,j) * H;endend% 执行反傅里叶变换并取出实部img2_idft = ifft2(img2);img2_idft = real(img2_idft);for i = 1:Pfor j = 1:Q% 将结果乘以(-1)^(x+y)进行还原img2_idft(i,j) = img2_idft(i,j)*(-1)^(i+j);endend% 提取出左上角的r*c区域g = img2_idft(1:r,1:c);img2 = g;img2 = uint8(img2);end

3) 处理结果

空间域滤波(拉普拉斯算子)

作用:锐化图像,突出灰度的过渡部分,增强图像灰度突变的对比度

1) 算法思路流程

给定拉普拉斯算子所构造的滤波器模板,对图像进行边界填充(补0),用滤波器系数与邻域内的像素进行累加求和,赋值给图像的对应位置(提取区域的中心坐标)的元素,最后再用原图像减去经过拉普拉斯变换计算后的图像即可(根据滤波器中心系数决定是用原图像加上拉普拉斯变换后的图像还是减去它,系数为正则加,系数为负则减)。

具体实现步骤:

假设滤波器模板尺寸为m*n,则补边后的总边数变为r+m-1以及c+n-1;生成补边后的全零数组,然后用原图像对其原位置的像素进行填充;双重for循环遍历数组中的元素,提取出与滤波器模板等大的区域,计算出提取区域的中心坐标(假设为x,y),定义题目所给出的滤波器模板数组w,将提取出的图像区域中的点与滤波器系数对应相乘累加求和,最后赋值给输出图像对应位置的元素img2(x,y)。将3)中的处理结果赋值给拉普拉斯变换后的图像矩阵;用原图像 - 拉普拉斯变换后的图像得出空间锐化处理后的图像img2。

2) 函数接口实现

function img2 = mySpatialLaplaceFilter(img1)% 空间域锐化滤波函数,采用拉普拉斯算子作为滤波器模板% img1为输入图像;img2为滤波处理后的输出图像img1_double = double(img1);[r c] = size(img1_double);% 定义 3*3 滤波器模板m = 3;n = 3;% 补边后的总边数row_fill = r + m - 1;col_fill = c + n - 1;% 用 0 填充边界img2 = zeros(row_fill, col_fill);img2(1+(m-1)/2:row_fill-(m-1)/2,1+(n-1)/2:col_fill-(n-1)/2) = img1_double;img2_copy = img2;for i = 1 : rfor j = 1 : c% 提取与滤波器模板等大的区域img_area = img2_copy(i:i+m-1,j:j+n-1);w = [1 1 1; 1 -8 1; 1 1 1];x_center = i + (m-1)/2;y_center = j + (n-1)/2;% 计算拉普拉斯变换后的图像img2(x_center,y_center) = sum(w(:).*img_area(:));endendlaplace = img2(1+(m-1)/2:row_fill-(m-1)/2,1+(n-1)/2:col_fill-(n-1)/2);% 用原图像 - 拉普拉斯变换后的图像得出处理后的图像img2 = img1_double - laplace;img2 = uint8(img2);end

3) 处理结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。