【问题标题】:Performing sliding 4-neighborhood operations in MATLAB在 MATLAB 中执行滑动 4 邻域运算
【发布时间】:2013-07-16 17:28:52
【问题描述】:

是否有一种方法可以在具有给定邻域的图像中执行自定义操作?

例如,我定义了两个函数fmax = @(x)max(x(:))fmin = @(x)min(x(:))来计算灰度图像I的梯度为:

G = nlfilter(I,[3 3],fmax) - nlfilter(I,[3 3],fmin);

但是,我想对 4 邻域而不是 3×3 滑块中定义的 8 邻域执行相同的操作,其方式与形态数学中使用的结构化元素类似。

此测试背后的想法是将自定义函数应用于像素和半径为r 的给定邻域。

请注意,我对应用用户定义的函数很感兴趣。渐变只是一个例子。

【问题讨论】:

  • 看看blockproc

标签: matlab image-processing nearest-neighbor


【解决方案1】:

匿名函数您所追求的“用户定义”或“自定义”函数。

您只需要根据需要使用匿名函数即可。 例如,为了只考虑 3x3 窗口的 4 个最近邻(左上右下)像素,您可以这样写:

f = @(x) max(x(2:2:8)) - min(x(2:2:8)) 
G = nlfilter(I,[3 3],f);

作为渐变。

另一个例子,对半径为r 的通用圆形邻域做同样的事情:

r = 5;
H = fspecial('disk',r);
f = @(x) max(x(H>0))-min(x(H>0)); 
G = nlfilter(I,size(H),f); 

【讨论】:

  • 感谢您的代码 natan!我正在尝试优化一个需要花费大量时间来计算的函数,它基于循环邻域。更准确地说,我有不同的圆形邻域,在每个邻域内部,我想计算它们底层像素值的平均值、标准差和中值。这是在 DoG 比例表示的上下文中完成的。圆形过滤器的大小由与特定比例关联的半径给出 (scalespace_radii):pastebin.com/WkS5ShMf 欢迎任何关于如何改进计算的建议!
  • 你为什么不问一个问题,让整个社区都可以帮助解决这个问题?
  • 嗨,Natan,我正在尝试提出一个解决方案,它基于您当前关于圆形社区的建议。我基本上正在尝试有效地计算圆形区域内的直方图。你介意看看 => stackoverflow.com/questions/21750989/…
猜你喜欢
  • 2019-11-15
  • 1970-01-01
  • 2012-10-25
  • 2020-11-22
  • 1970-01-01
  • 2015-04-27
  • 2023-03-24
  • 2013-12-17
  • 1970-01-01
相关资源
最近更新 更多