Matlab中值滤波器代码

2024-01-05

我需要在 MATLAB 中对图像实现中值滤波。然而,我是不允许使用medfilt2 or ordfilt2MATLAB 中的函数。我们最近也开始学习MATLAB。

是否有任何代码可用于中值滤波器或高斯滤波器?


NB:这假设已安装图像处理工具箱。


中值滤波背后的基本前提是分析图像中的像素邻域,对它们的强度进行排序,然后选择中间强度作为结果。我可以提出的一个建议是使用im2col http://www.mathworks.com/help/images/ref/im2col.html将每个像素邻域转换为单个像素邻域column向量并采用所有这些列向量来创建单个矩阵。每列代表像素邻域内的像素强度。接下来,使用sort http://www.mathworks.com/help/images/ref/sort.html并沿着每列的行进行排序,然后抓取middle该排序矩阵的值表示每个像素邻域的中间值。这将是一个单行向量,表示每个像素邻域的中值。完成后,只需将该向量重新整形回与原始图像相同的大小即可获得中值滤波结果。您可以使用col2im http://www.mathworks.com/help/images/ref/col2im.html帮助促进最后一步。

然而,随着im2col,它只抓取原始图像范围内的像素邻域。因为您想要沿图像边界对像素进行中值过滤,所以您需要pad处理前的图像边框im2col. Use padarray http://www.mathworks.com/help/images/ref/padarray.html为你做这件事。我假设边框用零填充以使事情变得更简单。

因此,给定一个灰度 image im,以及一个对称邻域来分析N x N, where N是您所在社区的宽度/高度,您的代码可能如下所示。我还将假设N允许更容易地选择中位数是很奇怪的:

im_pad = padarray(im, [floor(N/2) floor(N/2)]);
im_col = im2col(im_pad, [N N], 'sliding');
sorted_cols = sort(im_col, 1, 'ascend');
med_vector = sorted_cols(floor(N*N/2) + 1, :);
out = col2im(med_vector, [N N], size(im_pad), 'sliding');

我们来举个例子。假设我们的过滤器尺寸是5 x 5,我们将使用cameraman.tif这是图像处理工具箱的一部分。如果我们执行下面的代码,然后运行上面看到的中值滤波器代码:

N = 5;
im = imread('cameraman.tif');

我们得到以下内容,包括原始图像和经过中值滤波的最终图像。

这是我们所期望的,因为中值滤波期望在进行图像平滑时(或多或少)保持边缘良好。中值滤波对于椒盐噪声特别有用,在对像素邻域进行排序时,这些噪声像素很可能出现在开头和结尾,因此选择中间值很可能会过滤掉这些噪声值。


Bonus

您的帖子还要求从进行高斯过滤的第一原理中查找代码。我前几天替别人回答过这个问题。

在这里查看这篇文章:如何在 MATLAB 中创建和应用高斯滤波器而不使用 fspecial、imfilter 或 conv2? https://stackoverflow.com/questions/27499057/how-to-create-and-apply-a-gaussian-filter-in-matlab-without-using-fspecial-or-im

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

Matlab中值滤波器代码 的相关文章

随机推荐

  • 将 MATLAB 轴移动半步

    我正在尝试定位 MATLAB 的刻度以与我的网格对齐 但我找不到偏移标签的好方法 另外 如果我跑set gca XTickLabel 1 10 我的 x 刻度标签最终的范围为 1 到 5 这给出了什么 您需要移动刻度 但先获取标签并在移动后
  • 如何检测 iframe 大小调整?

    我有一个页面 其功能可以将此页面中的 iframe 高度调整为 iframe 内容的高度 但是当 iframe 具有切换操作时 高度会发生变化 并且该函数不会检测 iframe 的大小调整 有没有办法检测我的 iframe 内容是否发生变化
  • 为什么缓存控制:最大年龄不起作用?

    我正在倾斜http标头 并且我想在 缓存控制 字段上运行测试 所以我构建了一个只有默认页面的asp net网站 在这个页面中 我正在测试 缓存控制 字段 其 Page Load 中的代码如下 Response AddHeader Cache
  • 跨平台.Net? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如果您要编写一个在本地运行并调用 Web 服务的 GUI 应用程序 以实现跨平台 您可以使用 Net 来完成吗 您会推荐哪些工具 我正在考
  • 从 Backbone.js 模型中删除属性

    有没有办法从 a 中删除属性Backbone http documentcloud github com backbone model 原因是我在保存时传递了额外的数据来执行某些操作 但随后该数据会自动添加到我的模型中 文档说不要直接编辑
  • 为什么某些 SQLite 方法需要 Object[] 形式的参数,而其他方法则需要 String[] 形式?

    我对它的设计很好奇Android SQLite API http developer android com reference android database sqlite SQLiteDatabase html 例如 我们有 publ
  • 是时候通过 9600 波特串行发送 32KB 了?

    我想知道我的数学是否正确 如果我的波特率为 9600 那么这意味着每秒发送 9600 位 对吧 如果是这样 那么 9600 bit sec lt gt 1000 ms 9600 bit 0 1042 ms bit 因此 发送 32KB 应该
  • Cocoa Touch 中的协调控制器设计模式

    我正在创建一个带有大量自定义视图的 iOS 应用程序 因此 使用默认的 Cocoa 视图不是一个选项 然后 我决定和协调 中介控制器设计模式 在 Apress Pro Objective C Design Patterns for iOS
  • 主动配置

    Visual Studio 项目中的确切位置是活动配置 release debug等 存储 我相当确定它存储在 suo 文件中 它是一个二进制文件 存储各种用户 计算机特定设置 您可以找到有关此文件的更多信息here http msdn m
  • Git 哈希对象在 Powershell、CMD 和 Bash 中产生不同的 SHA1?

    我认为无论平台如何 SHA1 值都是相同的 我今天遇到了这个问题 希望我能在这里得到一些澄清 我的测试字符串是 Apple Pie In Bash echo Apple Pie git hash object stdin 23991897e
  • IP分片与重组

    我目前正在浏览我的网络幻灯片 想知道是否有人可以帮助我了解碎片和重组的概念 我了解它是如何工作的 即数据报如何被分割成更小的块 因为网络链接有一个 MTU 然而图片中的例子让我感到困惑 因此 前两部分显示的长度为 1500 因为这是 MSU
  • Promise 解析为子流 stdout 并拒绝子流 stderr

    我想建立一个使用以下命令生成子进程的承诺require child process spawn 该过程将其输出流式传输到stdout及其错误stderr 我希望承诺 reject child stderr stream or its dat
  • 如何通过特定选择来组织 Backbone 集合?

    我有一系列物品 我想跟踪当前的选择 当用户单击集合中的不同项目时 我想指示该项目已被选中并显示所选项目的详细信息 将此视为具有详细视图的列表 就像典型的电子邮件客户端 Example of a master detail layout so
  • 除了提交表单之外,在失去焦点时触发 html5 电子邮件验证器

    我有一个电子邮件输入字段 我使用 ajax 检查电子邮件是否已存在于我的数据库中 以防止该电子邮件输入失去焦点 我想在进行 ajax 调用之前确保输入的电子邮件格式正确 我可以使用 html5 内置电子邮件验证器来执行此操作还是必须编写自己
  • 如何引用使用无服务器框架创建的 AWS lambda 函数的 Arn 和名称

    我正在使用 Serverless Framework 创建 lambda 函数 并希望能够在 serverless yml 的其他部分交叉引用其 Arn 和名称 我很惊讶我发现这个有多困难 因为如果 lambda 是通过普通的 CloudF
  • VSCode 无法识别较新的 CSS

    VSCode 会在它无法识别的 CSS 下生成一条波浪线 例如 justify self start 无法识别命名网格线 这 col 给它带来问题 例如 grid template columns repeat 6 col 150px 我尝
  • CMD For 循环不保存 set /a 值

    不知道如何很好地解释这一点 所以这是代码 echo off set test 0 for f a in textfile txt do rem loops five times 5 lines in textfile txt set a t
  • 发送电子邮件时更改文本(字符串)的颜色

    当我将文本 字符串 输出到电子邮件时 我试图更改它的颜色 我的代码是 String appdata txtFromSpinner location getText date getText start getText finish getT
  • 在 TOpenDialog 中右键单击文件时,使用自定义样式会显示无效字符

    请参阅以下步骤进行重现 在 XE2 中运行良好 但在 XE8 中运行不佳 创建新的 VCL 表单应用程序 Delphi Place a TButton and a TOpenDialog在表格上 在按钮中OnClick事件调用OpenDia
  • Matlab中值滤波器代码

    我需要在 MATLAB 中对图像实现中值滤波 然而 我是不允许使用medfilt2 or ordfilt2MATLAB 中的函数 我们最近也开始学习MATLAB 是否有任何代码可用于中值滤波器或高斯滤波器 NB 这假设已安装图像处理工具箱