Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用colfilt的滑动窗口操作_Matlab_Image Processing_Matrix_Glcm - Fatal编程技术网

Matlab 使用colfilt的滑动窗口操作

Matlab 使用colfilt的滑动窗口操作,matlab,image-processing,matrix,glcm,Matlab,Image Processing,Matrix,Glcm,我有一个如下所示的函数glcmcontrast,该函数应用于使用滑动窗口操作的图像 这将为每个子图像(nlfilter传递的窗口)返回标量值。要将其与nlfilter一起使用,我将其作为匿名函数句柄,其用法如下所示 glcmanon = @(x)glcmcontrast(x); tic; B = nlfilter(image,[3 3],glcmanon); toc; 对于1024x1024以上的图像,此代码很快就会变得非常慢。文档中指出,可以与的“滑动”参数一起使用来执行相同的操作。我的问题

我有一个如下所示的函数
glcmcontrast
,该函数应用于使用滑动窗口操作的图像

这将为每个子图像(nlfilter传递的窗口)返回标量值。要将其与nlfilter一起使用,我将其作为匿名函数句柄,其用法如下所示

glcmanon = @(x)glcmcontrast(x);
tic; B = nlfilter(image,[3 3],glcmanon); toc;
对于1024x1024以上的图像,此代码很快就会变得非常慢。文档中指出,可以与
的“滑动”
参数一起使用来执行相同的操作。我的问题是如何将函数
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
使用将数组重塑为
(m*n)-by-((I-m+1)*(j-n+1))
,其中窗口大小为
[mn]
,图像大小为
[I j]
。问题是如何将我的
glcmcontrast
函数重写为可与
colfilt
一起使用的格式?
colfilt
中实际将函数应用于重塑数组的行是

b = reshape(feval(fun,x,params{:}), size(a));

但我完全不知道如何将我的函数应用于此。我认为问题与我的函数输出标量值有关,但我不确定..

根据colfilt的文档:

“滑动”将A的每个m×n滑动邻域重新排列为A中的一列 临时矩阵,然后将函数fun应用于此矩阵。 fun必须为每列返回一个包含单个值的行向量 在临时矩阵中。(列压缩函数,如sum 返回适当类型的输出)colfilt,然后重新排列 fun返回的向量,其大小与a相同

因此,您应该更改
glcmcontrast
,以便能够接收
m-by-n
矩阵'a',并返回
1-by-n
行,其中
i'th
单元格是
a
i'th
列上
glcmcontrast
的输出。与
求和
均值
中值
函数的工作方式类似


并非所有函数都可以重写以支持此类操作。

这可能与主题无关,但您检查了吗?是的,我检查了。使用matlab函数进行GLCM的实际计算是我的代码速度减慢的点。您链接到的代码用于在使用graycomatrix计算GLCM后从GLCM计算特征。我认为,由于GLCM计算方式的性质,无法将该函数与colfilt结合使用,因为需要保留像素的空间方向。谢谢你提供的信息!
b = reshape(feval(fun,x,params{:}), size(a));