线性空间滤波(imfilter)

  线性运算包括将邻域中每个像素与相应的系数相乘,然后将结果进行累加,从而得到点(x, y)处的响应。若邻域的大小为m*n,则总共需要mn个系数。这些系数排列为一个矩阵 ,我们称其为滤波器、掩模、滤波掩模、核、模板或窗口,前三种术语最为通用。

  相关和卷积

  函数imfilter来实现线性空间滤波,该函数的语法为

     g = imfilter(f, w, filtering_mode, boundary_options, size_options)

  其中,f 是输入图像,w 为滤波掩模,g 为 滤波结果。filtering_mode 用于指定在滤波过程中是使用相关(’corr’)还是卷积(’conv’)。boundary_options用于处理边界边界问题的充零问题,边界的大小有滤波器的大小确定。size_options可以是’same’或’full’。

  函数imfilter的通用语法为 :  g = imfilter(f, w, ‘replicate’)

代码示例

f = imread('filter.tif');
w = ones(31);
subplot(2,3,1);imshow(f);title('原图像');gd = imfilter(f,w);
subplot(2,3,2);imshow(gd);title('使用默认零填充');
% 滤波后的图像中黑白边缘模糊了,图像中较亮部分与边界间的边缘也模糊了。原因在于图像用零填充后的边缘为黑色。gr = imfilter(f,w,'replicate');
subplot(2,3,3);imshow(gr, [ ]);title('选项replicate');
% 使用replicate选项可以解决边缘模糊的问题。gs = imfilter(f,w,'symmetric');
subplot(2,3,4);imshow(gs, [ ]);title('选项symmetric');
% 使用symmetric可获得相同的结果。gc = imfilter(f,w,'circular');
subplot(2,3,5);imshow(gc, [ ]);title('circular');
% 出现的问题与使用零填充的问题相同,因为周期的使用可使得图像的黑暗部分靠近光亮区域。f1 = im2uint8(f);
g1r = imfilter(f1,w,'replicate');
subplot(2,3,6);imshow(g1r, [ ]);title('转换为uint8图像');
% 当输出通过imfilter转换为与输入相同的类(uint8)时,剪切会引起数据的丢失。

  找不到原图像进行处理,故贴上书中原图并附上书上解释…


非线性空间滤波(colfilt)

  工具箱中提供了两个执行常规非线性滤波的函数,即函数 nlfilter 和函数 colfilt 。函数 nlfilter 直接执行二维操作,而函数 colfilt 则以列的形式组织数据。虽然 colfilt 需要占用更多内存,但执行速度快,所以更多采用的是 colfilt 而非 nlfilt 。

  在使用colfilt时,在进行滤波之前,输入图像必须经过了填充。为此,我们可以使用函数padarray,对于二维函数,它的语法为

     fp = padarray(f, [r, c], method, direction)

  其中,f为输入图像,fp为填充后的图像 ,[r, c]用于给出填充f的行数和列数。


代码示例

f = imread('ckt_board.tif');
subplot(1,2,1);imshow(f);title('椒盐噪声图像');
f = padarray(f,[3 2],'replicate');
g = colfilt(f,[3 2],'sliding',@gmean);
subplot(1,2,2);imshow(uint8(g));title('非线性空间滤波colfilt处理');      %仅为显示结果,非为处理示例。


线性空间滤波器(fspecial)


  使用imfilter函数增强图像

f = imread('moon.tif');
subplot(2,2,1);imshow(f);title('1:月亮北极的图像');w = [0 1 0;1 -4 1;0 1 0];
g1 = imfilter(f,w,'replicate');
subplot(2,2,2);imshow(g1,[ ]);title('2:拉普拉斯滤波后的uint8图像');f2 = im2double(f);
g2 = imfilter(f2,w,'replicate');
subplot(2,2,3);imshow(g2,[ ]);title('3:拉普拉斯滤波后的double图像');g = f2 - g2;
subplot(2,2,4);imshow(g);title('4:增强图像即1图减去3图');

  使用拉普拉斯滤波器增强图像

f = imread('moon.tif');
w4 = fspecial('laplacian',0);
w8 = [1 1 1;1 -8 1;1 1 1];f = im2double(f);
g4 = f - imfilter(f,w4,'replicate');
g8 = f - imfilter(f,w8,'replicate');subplot(1,3,1);imshow(f);title('月亮北极的图像');
subplot(1,3,2);imshow(g4);title('中心-4的lap图像增强');
subplot(1,3,3);imshow(g8);title('中心-8的lap图像增强');


非线性空间滤波器(ordfilt2、medfilt2)

  ordfilt2可以生成统计排序滤波器,它们都是非线性空间滤波器,其响应基于对图像邻域中所包含的象素进行排序,然后使用排序结果确定的值来代替邻域中的中心象素的值。

     g = ordfilt2(f, order, domain)

  该函数生成输出图像g的方式如下:使用邻域的一组排序元素中的第order个元素来替代f中的每个元素,而该邻域则有domain中的非零元素指定。这里,domain是有0和1组成的m*n矩阵,该矩阵指定了将在计算中使用的邻域中的象素位置。

g = ordfilt2(f, 1, ones(m, n))              %实现大小为m*n的最小滤波器g = ordfilt2(f, m*n, ones(m, n))            %实现大小为m*n的最大滤波器g = ordfilt2(f, median(1:m*n), ones(m, n))  %实现大小为m*n的中值滤波器

  二维中值滤波器

     g = medfilt2(f, [m n], padopt)

  数组[m n]定义了一个大小为m*n的邻域,中值就在该邻域上计算,而padopt指定了三个可能的边界填充选项之一:‘zeros’(默认值);‘symmetric’按照镜像反射方式对称地沿其边界扩展;‘indexed’若 f 是double类图像,则以1填充图像,否则以0填充图像。

  该函数的默认形式为:

     g = medfilt2(f)

  它使用一个大小为3*3的邻域来计算中值,并用0来填充输入图像的边界。

  中值滤波降噪

%中值滤波是降低图像椒盐噪声的有效工具。
f = imread('ckt-board-orig.tif');
fn = imnoise(f,'salt & pepper',0.2);
gm = medfilt2(fn);
gms = medfilt2(fn,'symmetric');subplot(2,2,1);imshow(f);title('X射线图像');
subplot(2,2,2);imshow(fn);title('椒盐噪声图像');
subplot(2,2,3);imshow(gm);title('默认中值滤波medfilt2图像');
subplot(2,2,4);imshow(gms);title('symmetric中值滤波medfilt2图像');  %相比前图,黑色边界效应不明显


【图像处理】MATLAB:空间滤波相关推荐

  1. 《数字图像处理 MATLAB版》学习笔记

    学习教材:<数字图像处理 MATLAB版>(第二版) 冈萨雷斯 学习过程中的图片代码和及我收集的一些关于数字图像处理的其他学习资料,需要的可以评论留下邮箱(需要购买专栏),加油 文章目录 ...

  2. 数字图像处理MATLAB学习笔记(五)

    数字图像处理MATLAB学习笔记(五) Color Image Processing 1 Color Image Representation in MATLAB 这里不多说了,彩色图片在计算机中以R ...

  3. 图像处理----入门资料,Matlab r2019最新版,r2008a,《数字图像处理》冈萨雷斯 第三版 《数字图像处理 Matlab 版》

    研究生想研究的方向是图像处理,现在离开学还有四个月,希望能稍微入门吧.同时也希望通过博客的形式记录一下学习的进度,学习的心情.目前学习两周,安装了基本的软件,收集书籍,学习了灰度变换,空间滤波,频率滤 ...

  4. 数字图像处理MATLAB学习笔记(一)

    数字图像处理MATLAB学习笔记(一) 灰度转换与空间滤波 本节主要使用Matlab语言进行灰度转换与空间滤波的使用 并对相关数学原理进行总结 1. Intensity Transformer Fun ...

  5. 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.数字图像处理MATLAB版冈萨雷斯+中文高清版 2.数字图像处理MATLAB版冈萨雷斯随书源码 1.数字图像处 ...

  6. 【数字图像处理matlab】(HSI变换融合算法)

    [数字图像处理matlab](HSI变换融合算法) 输入一张高分辨率的全色影像HR,一张低分辨率的多光谱影像MS,采用HSI变换融合算法实现影像融合,其中RGB与HSI影像的相互转换调用自定义函数RG ...

  7. 图像处理 Matlab GUI系统(全)

    目录 导读 数字图像处理系统 GUI实例设计 总结 [若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!] 导读 以数字图像处理系统设计为例,介绍GUI系统的设计流程, ...

  8. matlab图源代码,[转载]常用的一些图像处理Matlab源代码

    常用的一些图像处理Matlab源代码 #1:数字图像矩阵数据的显示及其傅立叶变换 #2:二维离散余弦变换的图像压缩 #3:采用灰度变换的方法增强图像的对比度 #4:直方图均匀化 #5:模拟图像受高斯白 ...

  9. 图像处理之空间滤波二: 平滑滤波器

    图像处理之空间滤波二: 平滑滤波器 平滑滤波器 ​ 平滑滤波器用于模糊处理和降低噪声. 常应用于预处理任务中, 例如在大目标提取之前去除图像中的一些琐碎细节, 以及桥接直线或曲线的缝隙, 通过线性滤波 ...

  10. [数字图像处理Matlab]任选一幅灰度图,自行编写程序,完成直方图均衡化。鼠鼠的数字图像处理实验要求:不能用MATLAB自带的histeq函数实现直方图均衡化

    数学理论前提:见数字图像处理(第三版) 李俊山等编著  p50-53 1.利用imhist函数统计像素点个数 Im = imread("C:\Users\鼠鼠\Desktop\数字图像处理m ...

最新文章

  1. ps怎么对比原图快捷键_用PS快速将一张模糊不清晰的照片变清晰,简单5步就好...
  2. Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space
  3. vuex保存用户信息_Vuex状态管理
  4. Struts2中Action的属性接收参数
  5. Sharepoint的web.config配置
  6. java oracle时间格式转换_oracle时间格式转换问题 ORA-01810: format code appears twice--转...
  7. 计算机知识与技能比赛活动总结,技能大赛总结优秀范文
  8. http状态码401
  9. 如何使用 Reflector Keygen
  10. 在家干什么副业好?工作之余做什么副业比较好
  11. 《软技能》读书笔记——生产力篇
  12. 一大堆模块的结晶……
  13. html导航图片滚动条,CSS实现导航栏底部动态滚动条效果
  14. 3ds模拟JAVA游戏_3ds模拟器Citra3ds下载
  15. Canoe-OSEK网络管理自动化测试脚本CAPL 这适用于主流osek nm的测试用例
  16. 在iPhone上如何备份WhatsApp数据
  17. Delphi/VisualJ++/.NET/C#之父-Anders Hejlsberg
  18. 2017AP计算机科学5分线,2017各国际学校AP分数大比拼,看看你是啥水平
  19. Android_百度地图API_图形“圆形”(正多边形)和多边形是否相交算法
  20. Ebook管理工具(持续更新)

热门文章

  1. python编写交互界面查分_python小习题:查分数 - 李金龙
  2. 计算机组成原理 第四章 指令系统
  3. 软件工程导论 统一建模语言UML概述
  4. 目标检测——域自适应只对同源的样本有效
  5. Python装饰器几个有用又好玩的例子
  6. 深入理解SpringBoot配置
  7. 剑指offer——4.二维数组中的查找
  8. leetcode957. Prison Cells After N Days
  9. 【MySQL】事务隔离级别
  10. 敏捷开发“松结对编程”实践之一:人员结构篇(大型研发团队,学习型团队,139团队,师徒制度)...