matlab高斯低通滤波函数的使用与理解(附源码)

作者:滴水穿石 | 创建时间: 2023-08-05
图像处理领域中,高斯低通滤波是一种使用的去噪滤波,可用于去除高斯噪声(很多噪声都近似属于高斯噪声,因为正太分布广泛存在于生活中很多地方),且几乎没有振铃现象。那么,在matlab中,如何实现高斯低通滤波函数呢,本文用源代码+注释提供了解决。...
matlab高斯低通滤波函数的使用与理解(附源码)

操作方法

首先,在matlab文件夹页面下右键点击新建一个函数脚本,命名为gauss

双击打开gauss.m函数文件

在函数文件中,选中全部默认的信息(ctrl+A),删除(Backspace或delete键),然后复制如下代码粘贴即可使用高斯低通滤波函数: function [image_result] =gauss (image_orign,D0) %GULS 高斯低通滤波器 %   D0为截至频率的(相当于设置在傅里叶谱图的半径值) if (ndims(image_orign) == 3) %判断读入的图片是否为灰度图,如果不是则转换为灰度图,如果是则不做操作 image_2zhi = rgb2gray(image_orign); else image_2zhi = image_orign; end image_fft = fft2(image_2zhi);%用傅里叶变换将图象从空间域转换为频率域 image_fftshift = fftshift(image_fft); %将零频率成分(坐标原点)变换到傅里叶频谱图中心 [width,high] = size(image_2zhi); D = zeros(width,high); %创建一个width行,high列数组,用于保存各像素点到傅里叶变换中心的距离 for i=1:width for j=1:high D(i,j) = sqrt((i-width/2)^2+(j-high/2)^2); %像素点(i,j)到傅里叶变换中心的距离 H = exp(-1/2*(D(i,j).^2)/(D0*D0)); %高斯低通滤波函数 image_fftshift(i,j)= H*image_fftshift(i,j); %将滤波器处理后的像素点保存到对应矩阵 end end image_result = ifftshift(image_fftshift);%将原点反变换回原始位置 image_result = uint8(real(ifft2(image_result))); %real函数用于取复数的实部; %uint8函数用于将像素点数值转换为无符号8位整数;ifft函数反傅里叶变换

如果要使用这个函数,则用imread()读入图片后,选择函数处理即可。 如当前工作文件夹下,图片为lena.jpg,则 x = imread('lena.jpg'); x_result = gauss(x,160); subplot(1,2,1);imshow(x);title('原图'); subplot(1,2,2);imshow(x_result);title('高斯低通滤波处理后图片');

温馨提示

截止频率D0是一个可调节的数值,D0变化,滤波效果也会变化
点击展开全文

更多推荐