灰度共生矩陣GLCM及其matlab實現
阿新 • • 發佈:2018-11-12
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Prerequisites
概念
計算方式
對於精度要求高且紋理細密的紋理分佈,我們取畫素間距為d=1 )出現的次數,如圖所示,共出現九次,在兩個方向上即是18次。
matlab
matlab相關工具箱函式
使用灰度共生矩陣(GLCM)描述和提取影象紋理特徵,是一個強大且流行的工具,自然matlab工具箱會提供相應的函式——graycomatrix
:
給出一個影象矩陣,設定一些引數,得到其灰度共生矩陣,這就是函式的基本用法:
[glcm, SI] = graycomatrix(I, ...)
- 1
主要的引數有二個,分別是
NumLevels
最終glcm
的size是NumLevels
*NumLevels
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