是否有方法在具有给定邻域的图像中执行自定义操作?
例如,我已定义了两个函数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
的给定邻域。
请注意,我对应用用户定义的函数感兴趣。渐变只是一个例子。
答案 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);