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

有什么想法吗?谢谢!

最佳答案

正如我已经在 my comment 中告诉你的那样, documentation for graycoprops 明确指出:



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

如果在命令行窗口中键入 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

它们完美匹配。

关于matlab - 灰度共生特征与方程不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47721768/

10-12 19:49