• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

灰度共生矩阵(GLCM)并计算能量、熵、惯性矩、相关性(matlab)(待总结) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

灰度共生矩阵(GLCM)并计算能量、熵、惯性矩、相关性(matlab)(待总结)

关于灰度共生矩阵的介绍可参考

http://blog.csdn.net/chuminnan2010/article/details/22035751

http://blog.csdn.net/xuezhisd/article/details/8908824

http://blog.csdn.net/xuexiang0704/article/details/8713204

http://cn.mathworks.com/help/images/ref/imlincomb.html?refresh=true

理论介绍

http://blog.csdn.net/lskyne/article/details/8659225 
http://blog.csdn.net/light_lj/article/details/26098815 
http://blog.csdn.net/kezunhai/article/details/42001477

共生矩阵的物理意义 
http://blog.csdn.net/light_lj/article/details/26098815

下面给出不同的NumLevels的例子

  1. gray = [1 1 5 6 8
  2. 2 3 5 7 1
  3. 4 5 7 1 2
  4. 8 5 1 2 5];
  5. GLCM = graycomatrix(gray,'GrayLimits',[])
  6. GLCM =
  7. 1 2 0 0 1 0 0 0
  8. 0 0 1 0 1 0 0 0
  9. 0 0 0 0 1 0 0 0
  10. 0 0 0 0 1 0 0 0
  11. 1 0 0 0 0 1 2 0
  12. 0 0 0 0 0 0 0 1
  13. 2 0 0 0 0 0 0 0
  14. 0 0 0 0 1 0 0 0
  15. GLCM = graycomatrix(gray, 'GrayLimits',[],'offset', [0 1])
  16. GLCM =
  17. 1 2 0 0 1 0 0 0
  18. 0 0 1 0 1 0 0 0
  19. 0 0 0 0 1 0 0 0
  20. 0 0 0 0 1 0 0 0
  21. 1 0 0 0 0 1 2 0
  22. 0 0 0 0 0 0 0 1
  23. 2 0 0 0 0 0 0 0
  24. 0 0 0 0 1 0 0 0
  25. GLCM = graycomatrix(gray, 'GrayLimits',[],'offset', [0 1],'NumLevels',8)
  26. GLCM =
  27. 1 2 0 0 1 0 0 0
  28. 0 0 1 0 1 0 0 0
  29. 0 0 0 0 1 0 0 0
  30. 0 0 0 0 1 0 0 0
  31. 1 0 0 0 0 1 2 0
  32. 0 0 0 0 0 0 0 1
  33. 2 0 0 0 0 0 0 0
  34. 0 0 0 0 1 0 0 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

上图显示了如何求解灰度共生矩阵,以(1,1)点为例,GLCM(1,1)值为1说明只有一对灰度为1的像素水平相邻。GLCM(1,2)值为2,是因为有两对灰度为1和2的像素水平相邻。(1,5)出现一次,所以在(1.5)位置上标记1,没出现(1,6)所以为0;

上面所有的参数都是默认设置,NumLevels=8, 下面考虑NumLevels=3 的情况

  1. gray = [1 1 5 6 8
  2. 2 3 5 7 1
  3. 4 5 7 1 2
  4. 8 5 1 2 5];
  5. GL(2) = max(max(gray));
  6. GL(1) = min(min(gray));
  7. if GL(2) == GL(1)
  8. SI = ones(size(gray));
  9. else
  10. slope = NumLevels/(GL(2) - GL(1));
  11. intercept = 1 - (slope*(GL(1)));
  12. SI = floor(imlincomb(slope,gray,intercept,'double'));
  13. end
  14. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  15. SI =
  16. 1 1 2 3 4
  17. 1 1 2 3 1
  18. 2 2 3 1 1
  19. 4 2 1 1 2
  20. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  21. SI(SI > NumLevels) = NumLevels;
  22. SI(SI < 1) = 1;
  23. SI =
  24. 1 1 2 3 3
  25. 1 1 2 3 1
  26. 2 2 3 1 1
  27. 3 2 1 1 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

上面给出了如何将初始矩阵gray变成3阶的灰度级,SI就是gray的3阶灰度级矩阵。

上图显示了如何求解3级灰度共生矩阵,以(1,1)点为例,GLCM(1,1)值为4说明只有4对灰度为1的像素水平相邻。GLCM(3,1)值为2,是因为有两对灰度为3和1的像素水平相邻。(2,1)出现一次,所以在(2.1)位置上标记1,没出现(1,3)所以为0;

  1. gray = [1 1 5 6 8
  2. 2 3 5 7 1
  3. 4 5 7 1 2
  4. 8 5 1 2 5];
  5. [GLCM,SI] = graycomatrix(gray,'NumLevels',3,'G',[])
  6. GLCM =
  7. 4 3 0
  8. 1 1 3
  9. 2 1 1
  10. SI =
  11. 1 1 2 3 3
  12. 1 1 2 3 1
  13. 2 2 3 1 1
  14. 3 2 1 1 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

用3阶灰度级去计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135

  1. gray = [1 1 5 6 8
  2. 2 3 5 7 1
  3. 4 5 7 1 2
  4. 8 5 1 2 5];
  5. offsets = [0 1;-1 1;-1 0;-1 -1];
  6. m = 3; % 3阶灰度级
  7. [GLCMS,SI] = graycomatrix(gray,'GrayLimits',[],'Of',offsets,'NumLevels',m);
  8. P = GLCMS;
  9. [kk,ll,mm] = size(P);
  10. % 对共生矩阵归一化
  11. %---------------------------------------------------------
  12. for n = 1:mm
  13. P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));
  14. end
  15. %-----------------------------------------------------------
  16. %对共生矩阵计算能量、熵、惯性矩、相关4个纹理参数
  17. %-----------------------------------------------------------
  18. H = zeros(1,mm);
  19. I = H;
  20. Ux = H; Uy = H;
  21. deltaX= H; deltaY = H;
  22. C =H;
  23. for n = 1:mm
  24. E(n) = sum(sum(P(:,:,n).^2)); %能量
  25. for i = 1:kk
  26. for j = 1:ll
  27. if P(i,j,n)~=0
  28. H(n) = -P(i,j,n)*log(P(i,j,n))+H(n); %熵
  29. end
  30. I(n) = (i-j)^2*P(i,j,n)+I(n); %惯性矩
  31. Ux(n) = i*P(i,j,n)+Ux(n); %相关性中μx
  32. Uy(n) = j*P(i,j,n)+Uy(n); %相关性中μy
  33. end
  34. end
  35. end
  36. for n = 1:mm
  37. for i = 1:kk
  38. for j = 1:ll
  39. deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n); %相关性中σx
  40. deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n); %相关性中σy
  41. C(n) = i*j*P(i,j,n)+C(n);
  42. end
  43. end
  44. C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n); %相关性
  45. end
  46. %--------------------------------------------------------------------------
  47. %求能量、熵、惯性矩、相关的均值和标准差作为最终8维纹理特征
  48. %--------------------------------------------------------------------------
  49. a1 = mean(E)
  50. b1 = sqrt(cov(E))
  51. a2 = mean(H)
  52. b2 = sqrt(cov(H))
  53. a3 = mean(I)
  54. b3 = sqrt(cov(I))
  55. a4 = mean(C)
  56. b4 = sqrt(cov(C))
  57. sprintf('0,45,90,135方向上的能量依次为: %f, %f, %f, %f',E(1),E(2),E(3),E(4)) % 输出数据;
  58. sprintf('0,45,90,135方向上的熵依次为: %f, %f, %f, %f',H(1),H(2),H(3),H(4)) % 输出数据;
  59. sprintf('0,45,90,135方向上的惯性矩依次为: %f, %f, %f, %f',I(1),I(2),I(3),I(4)) % 输出数据;
  60. sprintf('0,45,90,135方向上的相关性依次为: %f, %f, %f, %f',C(1),C(2),C(3),C(4)) % 输出数据;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

下面给出的是默认的设置下求四个方向的灰度共生矩阵,NumLevels=8.

  1. gray = [1 1 5 6 8
  2. 2 3 5 7 1
  3. 4 5 7 1 2
  4. 8 5 1 2 5];
  5. offsets = [0 1;-1 1;-1 0;-1 <

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphiIDE的代码完成功能发布时间:2022-07-18
下一篇:
Delphi判断进程是否存在(使用CreateToolhelp32Snapshot)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap