考虑一个简单的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 ...
的元素数量有什么想法?谢谢!
答案 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
他们完美匹配。