要求

生成一个(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ㄒ)/~~然后查看了十几分钟……

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

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

源代码方案一:

[html] view plain copy
  1. clear all;
  2. close all;
  3. % 不处理边缘的高斯滤波,对应文档的方案一
  4. originimg=imread('lena.jpg');
  5. originimg=rgb2gray(originimg);
  6. [ori_row,ori_col]=size(originimg);
  7. sigma = 1.6;      %sigma赋值
  8. N = 7;            %大小是(2N+1)×(2N+1)
  9. N_row = 2*N+1;
  10. OriImage_noise = imnoise(originimg,'gaussian'); %加噪
  11. gausFilter = fspecial('gaussian',[N_row N_row],sigma);      %matlab 自带高斯模板滤波
  12. blur=imfilter(OriImage_noise,gausFilter,'conv');
  13. H = [];                                        %求高斯模板H
  14. for i=1:N_row
  15. for j=1:N_row
  16. fenzi=double((i-N-1)^2+(j-N-1)^2);
  17. H(i,j)=exp(-fenzi/(2*sigma*sigma))/(2*pi*sigma);
  18. end
  19. end
  20. H=H/sum(H(:));              %归一化
  21. desimg=zeros(ori_row,ori_col);            %滤波后图像
  22. for i=1:ori_row
  23. for j=1:ori_col
  24. desimg(i,j)=OriImage_noise(i,j);
  25. end
  26. end
  27. temp=[];
  28. for ai=N+1:ori_row-N-1
  29. for aj=N+1:ori_col-N-1
  30. temp=0;
  31. for bi=1:N_row
  32. for bj=1:N_row
  33. temp= temp+(desimg(ai+bi-N,aj+bj-N)*H(bi,bj));
  34. end
  35. end
  36. desimg(ai,aj)=temp;
  37. end
  38. end
  39. desimg=uint8(desimg);
  40. subplot(2,2,1);imshow(originimg);title('原图');
  41. subplot(2,2,2);imshow(OriImage_noise);title('噪声图');
  42. subplot(2,2,3);imshow(desimg);title('myself高斯滤波');
  43. subplot(2,2,4);imshow(blur);title('matlab高斯滤波');

源代码方案二:

[html] view plain copy
  1. clear all;
  2. close all;
  3. % 扩展原图像的高斯滤波,对应文档的方案2
  4. originimg=imread('lena.jpg');
  5. originimg=rgb2gray(originimg);
  6. [ori_row,ori_col]=size(originimg);
  7. sigma = 1.6;      %sigma赋值
  8. N = 7;            %大小是(2N+1)×(2N+1)
  9. N_row = 2*N+1;
  10. OriImage_noise = imnoise(originimg,'gaussian'); %加噪
  11. gausFilter = fspecial('gaussian',[N_row N_row],sigma);      %matlab 自带高斯模板滤波
  12. blur=imfilter(OriImage_noise,gausFilter,'conv');
  13. H = [];                                        %求高斯模板H
  14. for i=1:N_row
  15. for j=1:N_row
  16. fenzi=double((i-N-1)^2+(j-N-1)^2);
  17. H(i,j)=exp(-fenzi/(2*sigma*sigma))/(2*pi*sigma);
  18. end
  19. end
  20. H=H/sum(H(:));              %归一化
  21. desimg=zeros(ori_row,ori_col);            %滤波后图像
  22. midimg=zeros(ori_row+2*N,ori_col+2*N);    %中间图像
  23. for i=1:ori_row                           %原图像赋值给中间图像,四周边缘设置为0
  24. for j=1:ori_col
  25. midimg(i+N,j+N)=OriImage_noise(i,j);
  26. end
  27. end
  28. temp=[];
  29. for ai=N+1:ori_row+N
  30. for aj=N+1:ori_col+N
  31. temp_row=ai-N;
  32. temp_col=aj-N;
  33. temp=0;
  34. for bi=1:N_row
  35. for bj=1:N_row
  36. temp= temp+(midimg(temp_row+bi-1,temp_col+bj-1)*H(bi,bj));
  37. end
  38. end
  39. desimg(temp_row,temp_col)=temp;
  40. end
  41. end
  42. desimg=uint8(desimg);
  43. subplot(2,2,1);imshow(originimg);title('原图');
  44. subplot(2,2,2);imshow(OriImage_noise);title('噪声图');
  45. subplot(2,2,3);imshow(desimg);title('myself高斯滤波');
  46. subplot(2,2,4);imshow(blur);title('matlab高斯滤波');

matlab实现图像滤波——高斯滤波相关推荐

  1. matlab实现图像的高斯滤波

    https://blog.csdn.net/fengxianghui01/article/details/89474461

  2. 干货分享 基于MATLAB的带噪图像的高斯滤波论文

    基于MATLAB的带噪图像的高斯滤波 摘要:图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声.脉冲噪声.高斯噪声等.椒盐噪声含有随机出现的黑白 ...

  3. 基于MATLAB的带噪图像的高斯滤波

    基于MATLAB的带噪图像的高斯滤波 摘要:图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声.脉冲噪声.高斯噪声等.椒盐噪声含有随机出现的黑白 ...

  4. matlab自带函数实现高斯滤波

    自己编写的高斯滤波已理解,可是matlab自带的高斯滤波函数却没有用过,这里记录一下. %matlab自带函数实现灰度图高斯滤波 clear close allimg=imread('lena.bmp ...

  5. 图像降噪算法——中值滤波/均值滤波/高斯滤波/双边滤波

    图像降噪算法--中值滤波/均值滤波/高斯滤波/双边滤波 图像降噪算法--中值滤波/均值滤波/高斯滤波/双边滤波 1. 基本原理 2. C++代码实现 3. 结论 图像降噪算法--中值滤波/均值滤波/高 ...

  6. C++手敲灰度图均值滤波中值滤波高斯滤波

    一.均值滤波(Meaning Filtering)概念 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板 ...

  7. 均值滤波高斯滤波中值滤波

    1.均值滤波 均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值. 该算法有优点在于效率高,思路简单.同样,缺点也很明显, ...

  8. matlab高斯滤波跟中值滤波区别,matlab图像滤波处理代码讲解 均值滤波 中值滤波 高斯滤波...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 (1)均值滤波 function imres = averageFilter(im,N) % imres为均值滤波后的矩阵,参数im为图像的路径,N为滤波 ...

  9. 带噪图像的高斯滤波MATLAB,图像处理___高斯滤波与高斯噪声

    噪声 1.噪声表现形式 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块.一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息.通俗的说就是噪声让图像不清楚. 2 ...

  10. matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc

    摘要:图像的频域滤波是图像增强的一种方法.图像增强是图像处理的方法之一,有频率域法和空间域法.频率域法把图像看成一种二维信号,对其进行二维傅里叶变换的信号增强,采用低通滤波法可以去掉图像的噪声:采用高 ...

最新文章

  1. 2018机器阅读理解竞赛冠军分享:问答系统新思路
  2. python合成gif动图_Python图像处理之gif动态图的解析与合成操作详解
  3. python创建新文件-Python创建文件和追加文件内容实例
  4. ckeditor与ckfinder的使用方法 .NET (转载)
  5. 解读边缘计算在7大领域的研究趋势和最新进展
  6. JNI_Android项目中调用.so动态库实现详解【转】
  7. Linux进程里运行新代码,linux调度器源码分析 - 新进程加入(三)
  8. MySQL update For_mysql SELECT FOR UPDATE语句使用示例
  9. C++之指针探究(十五):回调函数应用之qsort排序
  10. vue项目中moment的使用(时间戳格式化)
  11. C++ 获取std::vector 长度 大小
  12. netty实现gmssl_gmssl java api 编译
  13. Unity接入Steam成就
  14. 微信小程序如何在手机预览调试
  15. 国外变电站3d可视化技术发展_从裸眼3D技术看LED显示的发展趋势
  16. vue动态绑定背景图片
  17. kgdb调试aarch64内核模块
  18. 2017全国电赛综合测评四分频电路(一片D触发器74LS74的两种方法,有图有真相,实测波形图)
  19. mysql多对一[自用]
  20. ceres学习笔记(四)

热门文章

  1. 相机成像原理详解(透视成像)
  2. MySQL 调优工具
  3. 看不出svp补帧_SVP4免费版|SVP4(视频补帧软件)下载v4.2.0.122免费版 附教程 - 欧普软件下载...
  4. 2阶魔方矩阵matlab,matlab魔方矩阵
  5. python调用大漠插件寻路_python调用大漠插件或天使插件
  6. 小程序发布文章-微信小程序视频教程28
  7. DBSCAN密度聚类算法
  8. catia批量转stp文件格式_CATIA CGR格式文件转stp或igs文件 | 坐倚北风
  9. 全新企业发卡系统源码/带有代理功能发卡平台源码
  10. IDEA 字符编码转换问题