1. 程式人生 > >灰度共生矩陣GLCM及其matlab實現

灰度共生矩陣GLCM及其matlab實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

Prerequisites

概念

計算方式

對於精度要求高且紋理細密的紋理分佈,我們取畫素間距為d=1

)出現的次數,如圖所示,共出現九次,在兩個方向上即是18次。


這裡寫圖片描述


這裡寫圖片描述

matlab

matlab相關工具箱函式

使用灰度共生矩陣(GLCM)描述和提取影象紋理特徵,是一個強大且流行的工具,自然matlab工具箱會提供相應的函式——graycomatrix

給出一個影象矩陣,設定一些引數,得到其灰度共生矩陣,這就是函式的基本用法:

[glcm, SI] = graycomatrix(I, ...)
   
  • 1

主要的引數有二個,分別是

  1. NumLevels
    (灰度級數)

最終glcm的size是NumLevels*NumLevels

  1. Offset(方向[0, 1; -1, 1; -1, 0; -1, -1]):

[0, 1]中的1表示的偏移數(offset),當然也可以取2或者更多,如上文所說,對於精度要求高且影象紋理本身即很豐富的影象來說,為了更精細地刻畫,我們取偏移量(offset)為1

我們將原始I轉換為SI,對SI計算GLCM,SI中元素的值介於[1, NumLevels]之間。

I = [     1 1 5 6 8 8;     2 3 5
7 0 2;     0 2 3 5 6 7    ];[glcm, SI] = graycomatrix(I, 'NumLevels', 9, 'G', [])% 'Offset'的default值為`[0, 1]`
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
glcm =     0     0     2     0     0     0     0     0     0     0     1     0     0     0     1     0     0     0     0     0     0     2     0     0     0     0     0     0     0     0     0     0     2     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     2     1     0     0     0     0     0     0     0     0     1     1     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1SI =     2     2     6     7     9     9     3     4     6     8     1     3     1     3     4     6     7     8
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

demo

這裡先寫一個demo,稍微有點難懂的地方在於灰度共生矩陣的計算方式,然後是一些程式設計上的迴圈判斷。其他方向的情況還未考慮(在第三和第四層迴圈的地方可能會略有不同),以及將其封裝成一個函式的操作還是留待以後吧:

clear, clcP = [ 0 1 2 0 1 2    1 2 0 1 2 0   2 0 1 2 0 1   0 1 2 0 1 2   1 2 0 1 2 0   2 0 1 2 0 1];[r, c] = size(P);P_u = unique(P);        % 去重,得到所有的灰度級n = length(P_u);        % 不同灰度級的個數G = zeros(n, n);        % 初始化灰度共生矩陣為全0矩陣,%% 四層迴圈,最外層的兩層迴圈用來為GLCM的各個位置賦值% 內層的兩層迴圈時遍歷原始影象矩陣,累計符合某一對應關係的的情況出現的次數for p = 1:n,    for q = 1:n,        cnt = 0;            % GLCM刻畫的是灰度影象畫素的統計特性,在matlab中通過次數的統計計算得到        for i = 1:r,            for j = 1:c,                if  (j+1) <= c && ((P(i, j) == p && P(i, j+1) == q) || P(i, j) == q && P(i, j+1) == p),                    cnt = cnt + 1;                end            end        end        G(p, q) = cnt;    endendG   
   
  • 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

References

[1] <影象特徵提取——灰度共生矩陣(GLCM)>

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述