1

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

例如,我定义了两个函数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

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

4

1 回答 1

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); 
于 2013-07-16T19:08:58.357 回答