matlab实现图像滤波——高斯滤波

要求

生成一个(2N+1)×(2N+1)大小的高斯模板H(标准为sigma),然后用此模板对图像进行滤波。不允许使用 fspecial 来产生高斯模板,不允许使用 imfilter、conv2 等函数。

原理及算法

理解高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值

步骤

1.    高斯模板公式,计算高斯模板,即实现fspecial 。

2.    实现相关算子的imfilter;相关算子方式 计算公式如下。W表示高斯算子,a,b表示算子大小。

 

举例说明

 

Imfilter的实现,对于非中心图像点,采用了两种方案。方案一:直接不处理边缘点。方案二:扩充原图像,形成一个中间图像,根据N增加边缘行和列,使得原图像中所有的点都可以处于算子的中心点。

测试结果

测试结果如下:

当sigma=1.6,N=7时。

方案一的效果截图见下图。之前测试N=1和N=3时,效果还不错,边缘的噪点比较少,但是当变成N=7时,效果很差,可以很明显地发现边缘有很多噪点。

方案二的效果截图见下图。对比MATLAB自带的imfilter默认的滤波函数,效果不错。

思考反馈

测试的时候,使用的是彩色图片,然后出现的测试结果见下图。结果图像首先是灰度的,还是有三个的,所以思考良久,可能是grb通道原因,换成了灰度图像后,就可以了。/(ㄒoㄒ)/~~出问题的时候,居然一度怀疑自己算法有问题/(ㄒoㄒ)/~~然后查看了十几分钟……

所以如果是彩色图像的话,是不是要分三个通道处理?还是说有其他比较好的方法。

 高斯滤波彩色图像出问题截图
 

 

源代码方案一:

clear all;
close all;
% 不处理边缘的高斯滤波,对应文档的方案一
originimg=imread('lena.jpg');
originimg=rgb2gray(originimg);
[ori_row,ori_col]=size(originimg);

sigma = 1.6;      %sigma赋值
N = 7;            %大小是(2N+1)×(2N+1)
N_row = 2*N+1;

OriImage_noise = imnoise(originimg,'gaussian'); %加噪

gausFilter = fspecial('gaussian',[N_row N_row],sigma);      %matlab 自带高斯模板滤波
blur=imfilter(OriImage_noise,gausFilter,'conv');

H = [];                                        %求高斯模板H
for i=1:N_row
    for j=1:N_row
        fenzi=double((i-N-1)^2+(j-N-1)^2);
        H(i,j)=exp(-fenzi/(2*sigma*sigma))/(2*pi*sigma);
    end
end
H=H/sum(H(:));              %归一化

desimg=zeros(ori_row,ori_col);            %滤波后图像
for i=1:ori_row                           
    for j=1:ori_col
        desimg(i,j)=OriImage_noise(i,j);
    end
end

temp=[];
for ai=N+1:ori_row-N-1
    for aj=N+1:ori_col-N-1
        temp=0;
        for bi=1:N_row
            for bj=1:N_row
                temp= temp+(desimg(ai+bi-N,aj+bj-N)*H(bi,bj));
            end
        end
        desimg(ai,aj)=temp;
    end
end
desimg=uint8(desimg);


subplot(2,2,1);imshow(originimg);title('原图');
subplot(2,2,2);imshow(OriImage_noise);title('噪声图');
subplot(2,2,3);imshow(desimg);title('myself高斯滤波');
subplot(2,2,4);imshow(blur);title('matlab高斯滤波');

源代码方案二:

clear all;
close all;
% 扩展原图像的高斯滤波,对应文档的方案2
originimg=imread('lena.jpg');
originimg=rgb2gray(originimg);
[ori_row,ori_col]=size(originimg);

sigma = 1.6;      %sigma赋值
N = 7;            %大小是(2N+1)×(2N+1)
N_row = 2*N+1;

OriImage_noise = imnoise(originimg,'gaussian'); %加噪

gausFilter = fspecial('gaussian',[N_row N_row],sigma);      %matlab 自带高斯模板滤波
blur=imfilter(OriImage_noise,gausFilter,'conv');

H = [];                                        %求高斯模板H
for i=1:N_row
    for j=1:N_row
        fenzi=double((i-N-1)^2+(j-N-1)^2);
        H(i,j)=exp(-fenzi/(2*sigma*sigma))/(2*pi*sigma);
    end
end
H=H/sum(H(:));              %归一化

desimg=zeros(ori_row,ori_col);            %滤波后图像
midimg=zeros(ori_row+2*N,ori_col+2*N);    %中间图像
for i=1:ori_row                           %原图像赋值给中间图像,四周边缘设置为0
    for j=1:ori_col
        midimg(i+N,j+N)=OriImage_noise(i,j);
    end
end
temp=[];
for ai=N+1:ori_row+N
    for aj=N+1:ori_col+N
        temp_row=ai-N;
        temp_col=aj-N;
        temp=0;
        for bi=1:N_row
            for bj=1:N_row
                temp= temp+(midimg(temp_row+bi-1,temp_col+bj-1)*H(bi,bj));
            end
        end
        desimg(temp_row,temp_col)=temp;
    end
end
desimg=uint8(desimg);

subplot(2,2,1);imshow(originimg);title('原图');
subplot(2,2,2);imshow(OriImage_noise);title('噪声图');
subplot(2,2,3);imshow(desimg);title('myself高斯滤波');
subplot(2,2,4);imshow(blur);title('matlab高斯滤波');

 

  • 46
    点赞
  • 366
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
1. 主要工作: 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波实现与对比: a) 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. b) 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。 c) 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 2. 代码功能: 实现中值滤波、均值滤波以及高斯滤波,并对图像进行输出 3. 结果分析 a) 图像经过中值滤波后,高斯噪声没有被完全去除,椒盐噪声几乎被完全去除效果较好。经过均值滤波后不管是高斯噪声还是椒盐噪声大部分都没有被去除,只是稍微模糊化。经过高斯滤波后,高斯噪声和椒盐噪声几乎被很大程度的模糊化,原图好像被加上了一层蒙版。 【注】若添加图片分辨率过高会发出警报,如果可以正常输出则可以忽视。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值