Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中实现滑动四邻域运算_Matlab_Image Processing_Nearest Neighbor - Fatal编程技术网

在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
)给出:欢迎对如何改进计算提出任何建议!你为什么不提个问题,这样整个社区都能帮上忙呢?嗨,纳坦,我想提出一个解决方案,就是基于你目前提出的环形社区的建议。我基本上是在尝试,高效地计算圆形区域内的直方图。你介意看看=>