在MATLAB中实现滑动四邻域运算
是否有一种方法可以在具有给定邻域的图像中执行自定义操作 例如,我定义了两个函数在MATLAB中实现滑动四邻域运算,matlab,image-processing,nearest-neighbor,Matlab,Image Processing,Nearest Neighbor,是否有一种方法可以在具有给定邻域的图像中执行自定义操作 例如,我定义了两个函数fmax=@(x)max(x(:)和fmin=@(x)min(x(:)来计算灰度图像的梯度I: G=nlfilter(I[33],fmax)-nlfilter(I[33],fmin) 然而,我想用4邻域而不是3乘3滑块中定义的8邻域做同样的事情,就像形态学数学中使用的结构元素一样 这个测试背后的想法是对一个像素和一个半径为r的给定邻域应用一个自定义函数 注意,我对应用用户定义的函数感兴趣。渐变只是一个例子。匿名函数是您
fmax=@(x)max(x(:)
和fmin=@(x)min(x(:)
来计算灰度图像的梯度I
:
G=nlfilter(I[33],fmax)-nlfilter(I[33],fmin)代码>
然而,我想用4邻域而不是3乘3滑块中定义的8邻域做同样的事情,就像形态学数学中使用的结构元素一样
这个测试背后的想法是对一个像素和一个半径为r
的给定邻域应用一个自定义函数
注意,我对应用用户定义的函数感兴趣。渐变只是一个例子。匿名函数是您所追求的“用户定义”或“自定义”函数
您只需要根据需要使用匿名函数。
例如,为了只考虑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);
看看BlockProc谢谢你的代码natan!我试图优化一个需要花费大量时间计算的函数,它是基于循环邻域的。更准确地说,我有不同的圆形邻域,在每个邻域中,我想计算它们下面像素值的平均值、标准值和中值。这是在狗的比例表示的上下文中完成的。圆形过滤器的大小由特定比例的相关半径(scalespace\u radii
)给出:欢迎对如何改进计算提出任何建议!你为什么不提个问题,这样整个社区都能帮上忙呢?嗨,纳坦,我想提出一个解决方案,就是基于你目前提出的环形社区的建议。我基本上是在尝试,高效地计算圆形区域内的直方图。你介意看看=>