灰度级CoOccurence功能不匹配方程式

时间:2017-12-08 20:34:36

标签: matlab glcm

考虑一个简单的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 ...

的元素数量

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:4)

正如我在my comment已经告诉你的那样,documentation for 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

他们完美匹配。