在MATLAB中执行滑动4邻域运算

时间:2013-07-16 17:28:52

标签: matlab image-processing nearest-neighbor

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

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

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

然而,我想用4-neighborhood而不是3-by-3滑块中定义的8-neighborhood进行相同的操作,方式与形态学数学中使用的结构元素类似。

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

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

1 个答案:

答案 0 :(得分:3)

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

您只需根据需要使用匿名功能即可。 例如,为了只考虑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);