线性滤波器&非线性滤波器

2023-11-17

 


前言

采用线性滤波和非线性滤波是在空间域上处理图像最常用的滤波方法。matlab在处理图像滤波方面拥有可调用的函数,十分便利。我们可以根据自己的需要自行选择滤波方式对图像进行滤波。值得一提的是,图像锐化在某种程度上来说就是线性滤波。


一、线性滤波器

matlab常用的线性滤波函数是imfilter函数。在imfilter函数中会涉及到滤波掩膜w,这个w是需要预先给出的,相当于确定滤波方式。例如常用的拉普拉斯方法、高斯方法等。matlab中自带fspecial函数可以直接调用现成的模板,当然如果你觉得这些模板处理图像不够满意,也可以自行设计模板,模板本质上就是一个矩阵,尤以3*3矩阵为最常见。

在imfilter函数中,除了需要选择处理图像和滤波掩膜之外,还需要对图像边界如何处理进行规定。

imfilter(I1,w,'replicate'):图像通过复制图像边界外的值进行扩展

imfilter(I1,w,'symmetric'):图像通过边界镜像反射进行扩展

imfilter(I1,w,'circular'):图像通过将图像处理为二维周期函数的一个周期进行扩展

二、使用示例

设计拉普拉斯滤波器进行图像锐化

I1=imread('moon.tif');
w1=fspecial('laplacian',0);%调用已有的拉普拉斯算子
I2=imfilter(I1,w1,'replicate');%利用算子进行线性滤波
I3=I1-I2;%将滤波图像和原图进行叠加得到增强图
subplot(221),imshow(I1),title('原图');
subplot(222),imshow(I2),title('w为uint8类型时的拉普拉斯锐化');
subplot(223),imshow(I3),title('增强图');

w2=[1 1 1;1 -8 1;1 1 1];%采用自己设计的拉普拉斯算子进行线性滤波
I4=imfilter(I1,w2,'replicate');
I5=I1-I4;
figure(2)
subplot(131),imshow(I1),title('原图');
subplot(132),imshow(I3),title('中心系数为-4的增强图');
subplot(133),imshow(I5),title('中心系数为-8的增强图');

三、结果展示

可以看到,采用中心系数为-8的算子处理得到的增强图处理细节更好。因此在使用线性滤波器时并不能完全依赖于fspecial函数直接调用现成模板。


四、非线性滤波器

matlab中常见的非线性滤波器是最小值滤波器、最大值滤波器和中值滤波器。这三种滤波器都可以利用ordfilt2函数实现,只需要给定不同的order即可。另外,由于中值滤波器对椒盐噪声具有出色的处理能力,所以matlab还给出了专门的中值滤波器函数medfilt2。

以3*3模板为例:

I2=ordfilt2(I1,1,ones(3,3)):将3*3的像素值从小到大排列,然后用第一位的最小值代替目标像素值达到滤波的目的(最小值滤波)

I2=ordfilt2(I1,3*3,ones(3,3)):将3*3的像素值从小到大排列,然后用最后一位(最大的一位)的值代替目标像素值达到滤波的目的(最大值滤波)

I2=ordfilt2(I1,(3*3+1)/2,ones(3,3)):将3*3的像素值从小到大排列,然后用中值代替目标像素值达到滤波的目的(中值滤波)

I2=medfilt2(I1,[3 3],'zeros'):采用中值滤波方式进行滤波,对于边界采用0进行填充

I2=medfilt2(I1,[3 3],'symmetric'):采用中值滤波方式进行滤波,对于边界采用镜像反射方式对称的沿边界扩展

I2=medfilt2(I1,[3 3],'indexed'):采用中值滤波方式进行滤波,对于边界若I1为double类,采用1进行填充,否则采用0进行填充

五、使用示例

设计三种滤波器进行滤波去除椒盐噪声

%非线性滤波
m1=imread('industry.tif');
m2=medfilt2(m1);%采用默认的中值滤波器
m3=medfilt2(m1,'symmetric');%采用镜像处理的中值滤波
m4=ordfilt2(m1,1,ones(3,3));%最小值滤波,3*3模板
m5=ordfilt2(m1,3*3,ones(3,3));%最大值滤波,3*3模板
m6=ordfilt2(m1,(3*3+1)/2,ones(3,3));%中值滤波,3*3模板
figure(3)
subplot(231),imshow(m1),title('原图');
subplot(232),imshow(m2),title('默认中值滤波');
subplot(233),imshow(m3),title('镜像对称中值滤波');
subplot(234),imshow(m4),title('ordfilt2函数最小值滤波');
subplot(235),imshow(m5),title('ordfilt2函数最大值滤波');
subplot(236),imshow(m6),title('ordfilt2函数中值滤波');

六、结果展示

中值滤波在处理椒盐噪声方面可以说是最佳的选择;最小值滤波似乎仅能去除白噪声而最大值滤波仅能去除灰度值偏大的噪声?(老师讲的全都还给他了···)

总之,中值滤波是非线性滤波器中最常用的选择!采用symmetric方法可以有效减小边界的黑色边框效应,在使用时可以三种填充方式都尝试比较一下再进行使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性滤波器&非线性滤波器 的相关文章

  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • 使用 python 在网络上部署 matlab 应用程序

    您好 我想使用 python 在网络上部署 matlab 应用程序 有没有办法做到这一点 我已按照数学工作网站上的文档将我的应用程序转换为 jar 文件 java 类 有人能指出我前进的正确方向吗 事实上 您的 Matlab 代码打包为 J
  • 使用 java 执行 Matlab 函数

    我正在编写一个应用程序 它使用 matlab 进行图像处理 然后使用 Java 接口显示结果 由于某些原因 我必须同时使用 Java 和 Matlab 如何在java中使用matlab函数 如何创建和访问界面 MATLAB控制 http m
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed
  • 白色像素簇提取

    我正在研究指纹毛孔提取项目 并陷入毛孔 白色像素簇 提取的最后阶段 我有两个输出图像 我们可以从中获取毛孔 但不知道该怎么做 这两个图像的尺寸不同 image1 的尺寸为 240 320 image2 的尺寸为 230 310 这是我的图像
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 如何从绘图处理程序中绘图?

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使

随机推荐

  • vue父子组件之间的传值(子传父,父传子)

    vue父子组件之间的传值 子传父 父传子 前提首先需要了解vue中组件之间的父子关系 主组件mainPage vue
  • 个性化定制界面和极简版原装界面,哪一个你用起来更加顺手呢

    个性化定制界面是根据用户的需求和喜好进行定制的 具有很高的灵活性和可定制性 用户可以自由选择界面的颜色 布局 字体等 以及添加或删除特定功能 这种界面能够根据用户的个人喜好和习惯进行定制 使得用户在使用过程中更加舒适和顺手 以下是一些可能的
  • 【数据结构】&&【C++】平衡搜索二叉树的模拟实现(AVL树)

    数据结构 C 平衡搜索二叉树的模拟实现 AVL树 一 AVL树的性质 二 AVL树的模拟实现 AVL树结点的定义 AVL树的插入 平衡因子的更新 左单旋 右单旋 双旋 左右旋 右左旋 AVL树的删除 检查是否是AVL树 三 完整代码 一 A
  • Tp5 left join 带条件 数据不返回

    背景 下面两种方式都是在查询吸毒人员的基本信息 pa account 表示该吸毒人员的评估小组 一般情况下 录入吸毒人员基础信息都会录入其关联的评估小组 但是部分也不录入 理论上 无论评估小组有没有录入 left join 都要返回左表ad
  • 微信小程序:日历模块页面

    文章目录 1 前言 2 功能需求 3 界面展示 4 部分代码展示 5 结语 完整项目下载 下载链接 1 前言 在制作背单词打卡小程序中 用户需要方便地查看历史学习信息 为了使页面美观并保持交互简洁 采用日历作为日期选择器是极为必要的 本指南
  • nginx中间件常见漏洞总结

    nginx中间件常见漏洞总结 1 中间件漏洞的概念 1 1 中间件 容器 服务器的基本概念辨析 2 Nginx 配置错误导致漏洞 2 1 uri 导致的CRLF注入漏洞 2 1 1 漏洞成因 2 1 2 利用方式 2 1 3 修改方案 2
  • 程序员必备技能-使用git把github的代码下载到本地使用

    在代码的学习过程中 难免需要看下github上的优秀项目 或者在参加某个培训班的时候 老师的示例代码存放在github中 想在本地的IDE中跑跑试试 这篇文章提供一个简单的获取github项目在自己的IDE中打开的方法 目录 一 获取git
  • STM32F103ZET6【HAL开发】STM32CUBEMX------3.2高级定时器输出带死区的互补PWM

    一 STM32F103只有高级定时器才能输出互补的PWM波形 定时器的对应IO如下表 二 下面以TIM1为例 演示三对带死区的PWM波形在STM32CUBEMX里面的配置 TIM1 CH1 TIM1 CH1N TIM1 CH2 TIM1 C
  • [matlab]10种经典的时间序列预测模型

    matlab 10种经典的时间序列预测模型 本文演示了 10 种不同的经典时间序列预测方法 它们是 自回归 AR 移动平均线 自回归移动平均线 自回归积分移动平均线 ARIMA 季节性自回归积分移动平均线 SARIMA 具有外生回归量的季节
  • R语言3.11 因子分析因子旋转

    因子旋转 目的 寻找每个主因子的实际意义 如果各主因子的典型代表变量不突出 就需要进行旋转 使因子载荷矩阵中载荷的绝对值向0和1两个方向分化 方法 正交旋转Varimax 最大方差正交旋转 斜交旋转Promax Fa2 factanal X
  • 集成学习-Adaboost

    Author 鲁力 Email jieyuhuayang foxmail com Datawhale Adaboost 算法简介 集成学习 ensemble learning 通过构建并结合多个学习器 learner 来完成学习任务 通常可
  • Keras和Tensorflow(CPU)安装、Pytorch(CPU和GPU)安装以及jupyter使用虚拟环境

    微信公众号 数学建模与人工智能 Keras和Tensorflow CPU 安装 Pytorch CPU和GPU 安装 Keras和Tensorflow CPU 安装 一 安装我用的是清华大学源 二 深度学习模型保存与加载 三 错误 Tens
  • matlab中的掩膜抠图

    改进版 矩阵中的循环操作非常耗时 so 用矩阵逻辑与操作替代for循环 one ones s img 1 s img 2 segM segM uint8 one for i 1 s img 1 for j 1 s img 2 if segM
  • 微信小程序16进制颜色码

    颜色码http www w3school com cn cssref css colornames asp
  • 时间序列算法理论及python实现(2-python实现)

    如果你在寻找时间序列是什么 如何实现时间序列 那么请看这篇博客 将以通俗易懂的语言 全面的阐述时间序列及其python实现 时间序列算法理论详见我的另一篇博客 时间序列算法理论及python实现 知 青 博客园 5 Python实现ARIM
  • ChatGPT 最好的替代品

    前两天我们邀请了微软工程师为我们揭秘 ChatGPT 直播期间有个读者问到 有了 ChatGPT BERT 未来还有发展前途吗 我想起来最近读过的一篇博客 最好的 ChatGPT 替代品 不过聊到这俩模型 就不得不提到 Transforme
  • 堆排序(Heapsort)-- 高级排序算法

    1 堆排序 Heapsort 堆排序 Heapsort 是指利用堆这种数据结构所设计的一种排序算法 二叉堆本质上是一种完全二叉树 它分为两个类型 最大堆和最小堆 最大堆任何一个父节点的值 都大于等于它左右孩子节点的值 最小堆任何一个父节点的
  • 同步(Synchronous)和异步(Asynchronous)

    概念性 同步和异步通常用来形容一次方法调用 同步方法调用一旦开始 调用者必须等到方法调用返回后 才能继续后续的行为 异步方法调用更像一个消息传递 一旦开始 方法调用就会立即返回 调用者就可以继续后续的操作 而 异步方法通常会在另外一个线程中
  • idea设置默认maven

    idea修改默认maven配置 方法一 不推荐 打开project default xml文件 在其中加入如下几行配置 代码如下 保存修改之后新建一个maven项目查看效果 方法二 新增Projects Settings 方法一 不推荐 需
  • 线性滤波器&非线性滤波器

    前言 采用线性滤波和非线性滤波是在空间域上处理图像最常用的滤波方法 matlab在处理图像滤波方面拥有可调用的函数 十分便利 我们可以根据自己的需要自行选择滤波方式对图像进行滤波 值得一提的是 图像锐化在某种程度上来说就是线性滤波 一 线性