我有以下函数来计算GLCM,然后计算给定的统计参数。我想将此函数传递给NLFILTER来计算整个图像(在小窗口中,例如卷积)。我已经将NLFILTER设置为使用并行计算工具箱运行,所以我真的想转换下面的函数:
function [s]=glcm(img,meth)
%GLCM calculates a Gray Level Co-occurence matrix & stats for a given sub
% image.
% Input: Sub Image (subI) and a method (meth)...
% 'Contrast','Correlation','Energy','Homogeneity'
%
subI=uint8(img);
m=graycomatrix(img,'Offset',[0 1],'NumLevels',8,'Symmetric',true);
if meth(1:3)=='con'
s=graycoprops(m,'Contrast');
s=s.Contrast;
elseif meth(1:3)=='cor'
s=graycoprops(m,'Correlation');
s=s.Correlation;
elseif meth(1:3)=='ene'
s=graycoprops(m,'Energy');
s=s.Energy;
elseif meth(1:3)=='hom'
s=graycoprops(m,'Homogeneity');
s=s.Homogeneity;
else
error('No method selected.')
end
我真的不知道如何将其转换为适合与NLFILTER一起使用的函数句柄。有任何想法吗?感谢。
答案 0 :(得分:2)
创建匿名函数时,可以在函数定义中传递其他静态参数:
%# define the method
method = 'ene';
%# create an anonymous function that takes one input argument
%# and that passes the `method` defined above
%# as an argument to glcm
anonFcn = @(x)glcm(x,method);
%# apply to your image with whatever window size you're interested in
out = nlfilter(yourImage,windowSize,anonFcn)