同时使用两个数组中的元素的过滤器

2024-04-26

假设我们有两个大小相同的数组 -A and B.

现在,我们需要一个过滤器,对于给定的掩码大小,从以下位置选择元素A,但删除掩码的中心元素,并在其中插入相应的元素B.

所以 3x3“伪掩码”看起来类似于:

A A A
A B A
A A A

对平均滤波器进行类似的操作非常简单。我们可以计算 A 中没有中心元素的元素的平均值,然后将其与 B 中的元素按适当的比例组合:

h = ones(3,3);
h(2,2) =0; 
h = h/sum(h(:));
A_ave = filter2(h, A);
C = (8/9) * A_ave + (1/9) * B;

但是如何对中值滤波器做类似的事情(medfilt2甚至更好ordfilt2)


解决这个问题的方法是找到一种方法来组合来自 A 和 B 的信息,以便过滤本身变得容易。

我想到的第一件事是沿着第三维连接 A 和 B,并传递一个过滤器掩码,该过滤器掩码将从“A 切片”中获取 8 个元素,并从“B 切片”中获取中心元素。不幸的是,Matlab 不支持这一点。

虽然 nlfilter 仅适用于 2D 图像,但它确实允许您指定任何过滤函数。因此,您可以创建一个函数,以某种方式能够查找 A 和 B 的正确值。因此,我得出了第一个解决方案。

您创建一个新数组 C,其中包含每个元素的元素索引,即第一个元素是 1,第二个元素是 2,等等。然后,您运行 nlfilter,它采用 3x3 滑动窗口并传递 C 的值窗口内的过滤功能,ffn。 ffn 是一个匿名函数,它调用疯狂过滤器,并且已经初始化,以便 A 和 B 在每次调用时都被传递。 CrazyFunction 从 C 的滑动窗口获取值,这些值只不过是 A 和 B 的索引,并从中收集 A 和 B 的值。

第二个解决方案完全相同,只是您不移动滑动窗口,而是创建一个新数组,该数组的每一列中的每个可能位置都包含滑动窗口的内容。使用重叠窗口时,列数组会比原始数组更大。同样,您只需使用列数组 C 的值(它们是 A 和 B 的索引)即可在相关位置查找 A 和 B 的值。

EDIT如果你有足够的内存,im2col和col2im可以大大加快进程

%# define A,B
A = randn(100);
B = rand(100);

%# pad A, B - you may want to think about how you want to pad
Ap = padarray(A,[1,1]);
Bp = padarray(B,[1,1]);

#% EITHER -- the more more flexible way
%# create a pseudo image that has indices instead of values
C = zeros(size(Ap));
C(:) = 1:numel(Ap);
%# convert to 'column image', where each column represents a block
C = im2col(C,[3,3]);
%# read values from A
data = Ap(C);
%# replace centers with values from B
data(5,:) = Bp(C(5,:));

%# OR -- the more efficient way
%# reshape A directly into windows and fill in B
data = im2col(Ap,[3,3]);
data(5,:) = B(:);

% median and reshape
out = reshape(median(data,1),size(A));

旧版本(使用较少的内存,可能需要填充)

%# define A,B
A = randn(100);
B = rand(100);

%# define the filter function
ffun = @(x)crazyFilter(x,A,B);

%# create a pseudo image that has indices instead of values
C = zeros(size(A));
C(:) = 1:numel(A);

%# filter
filteredImage = nlfilter(C,[3,3],ffun);




%# filter function
function out = crazyFilter(input,A,B)
%#CRAZYFILTER takes the median of a 3x3 mask defined by input, taking 8 elements from A and 1 from B

%# read data from A
data = A(input(:));
%# replace center element with value from B
data(5) = B(input(5));

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

同时使用两个数组中的元素的过滤器 的相关文章

  • Matlab 中 interp2 的类似 OpenCV Api

    有没有类似的功能 其工作原理与 interp2 x y frame z xd yd linear 0 在 OpenCV 中 功能cv remap 几乎可以满足您的要求 请参阅文档here http docs opencv org modul
  • 使用 OpenCV 查找重叠/复杂的圆

    我想计算红圈半径 图2 我在使用 OpenCV 的 HoughCircles 找到这些圆圈时遇到了麻烦 如图所示 2 我只能使用 HoughCircles 找到中心以黑色显示的小圆圈 original fig 2 由于我知道红色圆圈的中心
  • 如何检测图像中对象的实例?

    我有一张包含几个特定对象的图像 我想检测这些物体在该图像中的位置 为此 我有一些模型图像 其中包含我想要检测的对象 这些图像在我想要检测的对象实例周围得到了很好的裁剪 这是一个例子 在这张大图里 我想检测此模型图像中表示的对象 自从你最初发
  • 将图像转换为二进制流

    我的应用程序有两个方面 一方面我使用 C 来使用 Pleora 的 EBUS SDK 从相机读取帧 当第一次接收到该流时 在将缓冲区转换为图像之前 我能够一次读取 16 位流 以便对每个像素执行一些计算 即每个像素都存在一个 16 位数据块
  • 在matlab中设置图例符号的精度

    我有这个 leg2 strcat Max Degree num2str adet 1 1 ch l leg3 strcat Min Degree num2str adet 1 2 ch l leg4 strcat Max Request n
  • 如何将Matlab代码库与Android集成?

    我有一个算法和 MATLAB 中的一些其他代码 我想在我的 Android 应用程序中使用它 我怎样才能做到这一点 我可以从 MATLAB 制作 jar 文件以便与 Android 一起使用吗 我必须做点别的事吗 如果您还有其他产品 适用于
  • Matlab 的快速 JSON 解析器

    您知道 Matlab 中有一个非常快速的 JSON 解析器吗 目前我正在使用JSONlab http www mathworks com matlabcentral fileexchange 33381 jsonlab a toolbox
  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • 将“-Filter”与变量一起使用

    我尝试过滤掉这样的东西 Get ADComputer Filter name like chalmw dm and Enabled eq true 这就像一个魅力 并且得到了我想要的 现在我想要 类似名称 部分作为变量 如下所示 Get A
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 将单元格转换为双精度

    gt gt C 1 2 CF 2 C 1 2 CF 2 gt gt whos C Name Size Bytes Class Attributes C 2x2 478 cell 我怎样才能转换C into double以便 gt gt C
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 使用 TextBox 过滤 Datagridview 行

    我有一个绑定的 datagridView 我想使用 TextBox 值对其进行过滤 我使用了这段代码 private void ChercheStextBox TextChanged object sender EventArgs e tr
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • 是否有一个函数可以检查矩阵是否对角占优(行占优)

    矩阵是对角占优 http en wikipedia org wiki Diagonally dominant matrix 按行 如果对角线处的值在绝对意义上大于该行中所有其他绝对值的总和 对于列也是如此 只是相反 matlab中有没有函数
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • CUDA、NPP 滤波器

    CUDA NPP 库支持使用 nppiFilter 8u C1R 命令过滤图像 但不断出现错误 我可以毫无问题地启动并运行 boxFilterNPP 示例代码 eStatusNPP nppiFilterBox 8u C1R oDeviceS
  • 输入维度/分辨率会影响卷积神经网络的性能吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在构建一个图像分类器 其中有 66 个类和大约 50000 个图像 我的电脑内存为 12 GB 我的内存不足以训练图像 我的问题是

随机推荐

  • NSLog 编码错误

    我的以下代码有问题 NSString strValue 你好 char temp 200 strcpy temp strValue UTF8String printf s temp NSLog s temp 代码第一行有两个汉字被双引号括起
  • 以编程方式将 TortoiseSVN 与 C# 或其相关进程结合使用来检查存储库是否是最新的

    有没有办法以编程方式将 TortoiseSVN 与 C 或其相关进程一起使用来检查存储库是否是最新的 我可以使用 System Diagnostics Process 但我不想显示任何 GUI 内容 我没有SVN 它是开源的 所以我可以浏览
  • Visual Basic 6.0 中的无效限定符错误

    在 Visual Basic 6 0 程序中 我有一个字符串 sTemp 我想确保它不包含引号 我有这行 If sTemp Contains Then 但是当我在 sTemp 之后输入句点时 我没有从智能感知中得到任何信息 并且当我尝试编译
  • 对话流 v2 api 中的 app.setContext() ?

    v2 API 中 v1 中的对话流 app setContext 的等效项是什么 考虑到迁移指南概述的设置 如下 例如 当下面的演示代码中触发欢迎意图时 您会进行什么调用来设置上下文 v2 const functions require f
  • git:更改旧的提交消息而不产生冲突

    我想使用以下命令更改一个相当旧的提交消息 git rebase i sha1 of commit 这很好 我愿意git commit amend并编辑消息 但是当我这样做时事情会变得很糟糕 git rebase continue 我遇到了多
  • 如何创建一个 Java 应用程序来读取 twitter feed?

    我想创建一个小型应用程序 仅使用应用程序级身份验证来访问 twitter api 来读取提要 我在网上阅读了很多文档 感到非常困惑 我了解 twitter api 需要 OAth 来授权任何应用程序从 twitter 获取或写入数据 为了获
  • 错误:没有这样的文件或目录 - C

    解读完这个之后comment https stackoverflow com questions 41281332 code directory structure library design comment69813504 412816
  • TypeScript 将通用对象从蛇形命名法转换为驼峰命名法

    我想编写一个函数 它接受带有蛇形键的对象并将其转换为带有驼峰式键的对象 假设我们知道输入对象的类型 但希望解决方案是通用的 那么在 TypeScript 中输入此类函数的最佳方式是什么 type InputType snake case k
  • 如何导航到托管 bean 中的另一个页面?

    我正在尝试使用命令按钮转发托管 bean 中的页面
  • 如何使用 AWS CLI 列出用户及其权限?

    我运行这个命令 aws iam list users 我得到了用户列表 但没有列出权限 意味着如果某人是 root 或 s3fullaccess 等 我运行另一个命令 aws iam list user policies user name
  • Powershell Invoke-RestMethod 字符不正确

    我正在使用 Invoke RestMethod 从我正在使用的应用程序中获取页面名称 我注意到 当我在页面上执行 GET 操作时 它会返回页面名称 如下所示 该页面正在运行 然而实际的页面名称是 此页面 正在运行 这是我的请求的样子 Inv
  • 查找并删除 csproj 文件中的重复条目

    我们最近合并了两个代码分支 最终在 csproj 文件中的几个文件中出现了重复的条目 这似乎发生在所有需要 复制到输出目录 的文件上 在进行更改并与其他分支合并后 将其更改为 始终复制 我想知道如果这样下去是否会导致任何意想不到的问题以及我
  • 无法签出远程 git 分支

    我在 github 本地克隆中 以下是分行列表 git branch a master online demo remotes origin HEAD gt origin master remotes origin develop remo
  • 调整小倍数迷你图

    我有一个热图 显示一些数据和热图每行的迷你图 如果用户单击行标签 则数据按降序排列 因此每个矩形都会放置在正确的位置 反之亦然 如果用户单击列标签 每个反应都以正确的方式放置 但我无法放置迷你图 这是代码 http plnkr co edi
  • 在哪里定义与 symfony2 中的实体相关的静态数组?

    我有一个数组包含与实体相关的静态数据Product public static category array 1 gt animal png 2 gt blague png 3 gt devinette png 4 gt enfant pn
  • stdClass 对象在实时站点上有奇怪的怪癖,但在本地计算机上没有[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我创建了一组辅助函数 让我在 php 中进行数据库操作时更加轻松 本质上 我向函数传递一个 stdClass 对象 然后它们使用该
  • MVC 3:通过ajax加载时如何渲染没有布局页面的视图?

    我正在学习渐进增强 http en wikipedia org wiki Progressive enhancement我有一个关于 AJAX 化视图的问题 在我的 MVC 3 项目中 我有一个布局页面 一个视图启动页面和两个普通视图 vi
  • GitHub 错误 Probot:未找到集成,documentation_url

    我在使用 GitHub 的 Probot 应用程序时遇到身份验证问题 当我使用 npm start 运行应用程序时 我会得到 github Github request GET app installations 404 Not Found
  • ConstraintLayout 作为 RecyclerView 项目

    I use ConstraintLayout as RecyclerView物品 但现在存在一些问题 真机上显示的和预览中不一样 recyclerView的item布局如下
  • 同时使用两个数组中的元素的过滤器

    假设我们有两个大小相同的数组 A and B 现在 我们需要一个过滤器 对于给定的掩码大小 从以下位置选择元素A 但删除掩码的中心元素 并在其中插入相应的元素B 所以 3x3 伪掩码 看起来类似于 A A A A B A A A A 对平均