灰階共生矩陣的接觸知識,http://www.cnblogs.com/tiandsp/archive/2013/03/23/2977673.html
初學者再看如此多的公式,可能看也看不懂。那就簡單的辦法就是直接看圖(matlab help檔案中的):
剛開始看的人,肯定也摸不著頭腦。
我這裡解釋下兩邊矩陣的含義:
(1)左邊的矩陣,你可以想成某映像的像素(當然不是rgb的,可以認為是灰階圖)
(2)右邊的矩陣(定義為GLCM):是產生的灰階共生矩陣。關於維數:這裡是8*8的,但實際情況中,你可以是2*2,4*4,16*16等等(在matlab中,如果你是二值圖形,維數預設為2,如果是灰階圖,預設為8)。
現在再講講GLCM裡面數位含義,如GLCM(1,1)就是從左往右水平的像素是分別都是1,1的次數。從左邊的矩陣可以看出,只有一次,同理GLCM(1,2)=2,因為有從左往右的像素分別是1,2的情況有兩種,再比如GLCM(2,2)=0,因為沒有從左往右像素分別是2,2的情況。(這裡的從左往右是相鄰的)。
我相信在這裡,初學者都明白了,GLCM的如何產生的吧。
(1)下面講講關於matlab內建的graycomartix函數吧(原理其實很簡單,你可以自己寫個函數):
我上面講的例子,其實可以只用一個函數就可以完成。
gray = [1 1 5 6 8 2 3 5 7 1 4 5 7 1 2 8 5 1 2 5];GLCM = graycomatrix(gray,'GrayLimits',[]);
(注意,必須用'GrayLimtis',[]),不然你得到的GLCM是很奇葩的
GLSM =
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 16
原因是,GrayLimits參數的預設值是改種類型的範圍,如double的範圍[0 1] int16的範圍[-32768 32767]
(2)另外,關於graycomatrix函數,你可以寫成
GLCM = graycomatrix(gray,'G',[]);
因為不論參數不論是‘G’還是‘Graycomatrix’還是‘g’都可以被識別的。
(3)最後不要混淆,GLCM的矩陣大小和你原始的gray是不一樣的。(GLCM的大小隻和參數‘graylimits’有關!)
[GLCM, SI] = graycomatrix(gray,'G',[]); 這裡的得到的矩陣SI才是和gray矩陣一樣的。
SI的解釋:對矩陣gray的像素進行分類,如果你設的參數“NumLvels”是8,那麼灰階共生矩陣就將gray線性分類成8類,對應的類的數值(1-8)就是SI矩陣。
for example:
gray = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7];[glcm,SI] = graycomatrix(gray,'NumLevels',9,'G',[])
得到的結果:
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 1
SI =
2 2 6 7 9 9
3 4 6 8 1 3
1 3 4 6 7 8
gray就是3*6的矩陣,SI就是gray對應的分類,因為參數“NumLevels”設為9,所以SI的數值就是1-9,大小和gray一樣。而glcm和和前面講的一樣!
關於Graycomatrix函數的其他參數:
NumLevels:(numeric)數值的預設值是8 , (binary)預設是是2,我們上面的例子就是預設值為8,所以產生的GLSM是8*8的矩陣。
OffSet:表明像素對比的順序。 [0 D]:表示從左往右像素距離為D(如果D=1,就是相鄰)
symmetric:預設值為false,比如從左往右就是從左往右,而當該參數設定為true是,從左往右和從右往左都被算上的。
更多的參數表示可以看help檔案吧。這裡貼個: