MATLAB Анонимный дескриптор функции для использования с NLFILTER - PullRequest
1 голос
/ 07 ноября 2011

У меня есть следующая функция, которая вычисляет 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.Есть идеи?Спасибо.

1 Ответ

2 голосов
/ 07 ноября 2011

Когда вы создаете анонимную функцию, вы можете передать дополнительные статические аргументы в определении функции:

%# 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)
...