У меня есть функция show below glcmcontrast
, которая применяется к изображению в режиме раздвижного окна с использованием nlfilter.Работа скользящего окна с использованием colfilt
function s = glcmcontrast(subI)
glcm = graycomatrix(subI,'Offset',[0 1],'NumLevels',64,'Symmetric',true);
stats = graycoprops(glcm,'contrast');
s=stats.Contrast;
Это возвращает скалярное значение для каждого дополнительного изображения (окно, переданное nlfilter). Чтобы использовать это с nlfilter, я использую его как анонимный дескриптор функции, и его использование показано ниже.
glcmanon = @(x)glcmcontrast(x);
tic; B = nlfilter(image,[3 3],glcmanon); toc;
Этот код быстро становится очень медленным для изображений в течение 1024 х 1024. Как отмечается в документации, colfilt может быть использована с 'sliding'
аргументом для выполнения тех же операций. Мой вопрос заключается в том, как я буду использовать функцию glcmcontrast
с colfilt
. Забегая возвращает ошибку:
tic; B = colfilt(A,[3 3],'sliding',glcmcontrast); toc;
'Error using reshape
To RESHAPE the number of elements must not change.
Error in colfilt (line 183)
b(i*mb+brows,j*nb+bcols) = ...'
Я знаю, что из документации, которая colfilt
перестраивает массив, используя im2col в (m*n)-by-((i-m+1)*(j-n+1))
, где размер окна [m n]
и размер изображения [i j]
. Вопрос в том, как переписать мою функцию glcmcontrast
в формат, который работает с colfilt
? Линия от colfilt
, что на самом деле применяет функцию реконструированного массива
b = reshape(feval(fun,x,params{:}), size(a));
, но я полностью потерял о том, как применить свои функции к этому. Я думаю, что проблема что-то делать с моей функцией вывода скалярного значения, но я не уверен ..
Возможно, это не из темы, но вы проверили [векторную версию GLCM] (http://www.mathworks.com/matlabcentral/fileexchange/22354-glcmfeatures4-m-vectorized-version-of-glcmfeatures1-m -с-код-изменения)? – zenpoy
Да, у меня есть. Фактический расчет GLCM с использованием функции matlab [graycomatrix] (http://www.mathworks.co.uk/help/toolbox/images/ref/graycomatrix.html) - это момент, когда мой код замедляется. Код, с которым вы связаны, предназначен для вычисления функций из GLCM, после того, как GLCM был рассчитан с использованием graycomatrix. – MBL