3

考虑一个简单的 glcm 矩阵。

glcm = [0 1 2 3;1 1 2 3;1 0 2 0;0 0 0 3]; 

使用 Matlab 的内置功能计算统计数据。

stats = graycoprops(glcm)

   Contrast: 2.8947
Correlation: 0.0783
     Energy: 0.1191
Homogeneity: 0.5658

现在,改为使用本页底部给出的这些方程的定义手动计算它们:https ://www.mathworks.com/help/images/ref/graycoprops.html

contrast = 0;
energy = 0
for i = 1:4
    for j = 1:4
        contrast = contrast + glcm(i,j)*(i-j)^2;
        energy = energy + glcm(i,j)^2;
    end
end

这使:

contrast =

   110


energy =

    43

什么是交易?是否正在进行某种类型的标准化?它不是简单地除以16个元素的数量......

有什么想法吗?谢谢!

4

1 回答 1

4

正如我在评论中已经告诉你的那样,文档graycoprops明确指出:

graycoprops归一化灰度共生矩阵 (GLCM),使其元素之和等于 1。

但是如果你想找到这个函数的内部工作原理,你能做的最好的事情就是深入研究函数代码本身并找出它是如何工作的。最好通过逐步调试代码来做到这一点。

如果您edit graycoprops在命令行窗口中键入,您可以访问该函数的源代码。

如果这样做,您将能够看到在第 84 行附近有一个if语句调用了另一个名为normalizeGLCM. 最后一个函数存在于同一个文件中,所以如果你向下滚动,在第 119 行附近,你会发现它是如何工作的:

function glcm = normalizeGLCM(glcm)

% Normalize glcm so that sum(glcm(:)) is one.
if any(glcm(:))
  glcm = glcm ./ sum(glcm(:));
end

因此,本质上,如果将上述规范化添加到代码中,它将生成与graycoprops函数相同的结果:

glcm = [0 1 2 3;1 1 2 3;1 0 2 0;0 0 0 3]; 

stats = graycoprops(glcm)

glcm_norm = glcm ./ sum(glcm(:)); % <-- Normalize.

contrast = 0;
energy = 0;
for i = 1:4
    for j = 1:4
        contrast = contrast + glcm_norm(i,j)*(i-j)^2;
        energy = energy + glcm_norm(i,j)^2;
    end
end

比较结果graycoprops

>> stats

stats = 

  struct with fields:

       Contrast: 2.8947
    Correlation: 0.0783
         Energy: 0.1191
    Homogeneity: 0.5658

根据您的结果:

>> contrast

contrast =

    2.8947

>> energy

energy =

    0.1191

他们完美匹配。

于 2017-12-08T23:17:53.413 回答