(黑燈瞎火好干事。。。。。。。來源一)
由於紋理是由灰度分布在空間位置上反復出現而形成的,因而在圖像空間中相隔某距離的兩象素之間會存在一定的灰度關系,即圖像中灰度的空間相關特性。灰度共生矩陣就是一種通過研究灰度的空間相關特性來描述紋理的常用方法。
Gray-level co-occurrence matrix from an image
圖像的灰度共生矩陣
灰度共生矩陣是像素距離和角度的矩陣函數,它通過計算圖像中一定距離和一定方向的兩點灰度之間的相關性,來反映圖像在方向、間隔、變化幅度及快慢上的綜合信息。
使用方法:
glcm = graycomatrix(I)
glcms = graycomatrix(I,param1,val1,param2,val2,...)
[glcms,SI] = graycomatrix(...)
描述:
glcms = graycomatrix(I) 產生圖像I的灰度共生矩陣GLCM。它是通過計算兩灰度值在圖像I中水平相鄰的次數而得到的 (也不必是水平相鄰的次數,這一參數是可調的,可能通過Offsets來進行調整,比如[0 D]代表是水平方向,[-D D]代表是右上角45度方向,[-D 0]代表是豎直方向,即90度方向,而[-D -D]則代表是左上角,即135度方向),GLCM中的每一個元素(i,j)代表灰度i與灰度j在圖像中水平相鄰的次數。
因為動態地求取圖像的GLCM區間代價過高,我們便首先將灰度值轉換到I的灰度區間里。如果I是一個二值圖像,那么灰度共生矩陣就將圖像轉換到兩級。如果I是一個灰度圖像, 那將轉換到8級。灰度的級數決定了GLCM的大小尺寸。你可以通過設定參數“NumLevels”來指定灰度的級數,還可以通過設置“GrayLimits"參數來設置灰度共生矩陣的轉換方式。
下圖顯示了如何求解灰度共生矩陣,以(1,1)點為例,GLCM(1,1)值為1說明只有一對灰度為1的像素水平相鄰。GLCM(1,2)值為2,是因為有兩對灰度為1和2的像素水平相鄰。
(這里添幾句廢話,左邊是你灰度分級后的圖像,右邊是你按照八級來的統計矩陣
glcms = graycomatrix(I,param1,val1,param2,val2,...) 返回一個或多個灰度灰度共生矩陣,根據指定的參數。參數可以很簡短,並且對大小寫不敏感。
參數
'GrayLimits' 是兩個元素的向量,表示圖像中的灰度映射的范圍,如果其設為[],灰度共生矩陣將使用圖像I的最小及最大灰度值作為GrayLimits
'NumLevels' 一個整數,代表是將圖像中的灰度歸一范圍。舉例來說,如果NumLevels為8,意思就是將圖像I的灰度映射到1到8之間,它也決定了灰度共生矩陣的大小
'Offset' 上面有解釋,是一個p*2的整數矩陣,D代表是當前像素與鄰居的距離,通過設置D值,即可設置角度
Angle Offset
0 [0 D]
45 [-D D]
90 [-D 0]
135 [-D -D]
設置參數的時候offset,偏移量,在此基礎上,0表示相鄰水平,45表示相鄰斜上方,90表示相鄰上下,135同理
..................glcm = graycomatrix(I)
從圖像I創建灰度共生矩陣glcm。通過計算具有灰度級i和灰度級j的像素對在水平方向相鄰出現的頻繁程度。glcm中的每個元素說明了水平方向相鄰像素對出現的次數。如果灰度級為L則glcm的維數為L*L。
2.glcms = graycomatrix(I,param1,val1,param2,val2,...)
根據參數對的設定,返回一個或多個灰度共生矩陣。
參數說明:
'GrayLimits':灰度界限,為二元向量[low high]。灰度值小於等於low 時對應1,大於等於high時對應於灰度級。如果參數設為[],則共生矩陣使用圖像的最小和最大灰度值作為界限,即[min(I(:)) max(I(:))]。
'NumLevels':整數,說明I中進行灰度縮放的灰度級數目。例如,如果NumLevel設為8,則共生矩陣縮放I中的灰度值使它們為1到8之間的整數。灰度級的數目決定了共生矩陣glcm的尺寸。缺省情況:數字圖像:8;二進制圖像:2。
'Offset':p行2列整型矩陣,說明感興趣像素與其相鄰像素之間的距離。每行是一個說明像素對之間偏移關系的二元向量[row_offset, col_offset]。行偏移row_offset是感興趣像素和其相鄰像素之間的間隔行數。列偏移同理。偏移常表達為一個角度,常用的角度如下:(其中D為像素距離)
角度 0 45 90 135
Offset [0,D] [-D D] [-D 0] [-D -D]
3.[glcms,SI] = graycomatrix(...)
返回縮放圖像SI,SI是用來計算灰度共生矩陣的。SI中的元素值介於1和灰度級數目之間。
graycoprops:得到灰度共生矩陣得到各種屬性
stats = graycoprops(glcm, properties):從灰度共生矩陣glcm計算靜態屬性。glcm是m*n*p的有效灰度共生矩陣。如果glcm是一個灰度共生矩陣的矩陣,則stats是包括每個灰度共生矩陣靜態屬性的矩陣。
graycoprops正規化了灰度共生矩陣,因此元素之和為1。正規化的GLCM中的元素(r,c)是具有灰度級r和c的定義的空間關系的像素對的聯合概率。Graycoprops使用正規化的GLCM來計算屬性。
屬性參數如下:
1. 'Contrast' : 對比度。返回整幅圖像中像素和它相鄰像素之間的亮度反差。取值范圍:[0,(GLCM行數-1)^2]。灰度一致的圖像,對比度為0。
2. 'Correlation' : 相關。返回整幅圖像中像素與其相鄰像素是如何相關的度量值。取值范圍:[-1,1]。灰度一致的圖像,相關性為NaN。
3. 'Energy' : 能量。返回GLCM中元素的平方和。取值范圍:[0 1]。灰度一致的圖像能量為1。
4. 'Homogemeity' : 同質性。返回度量GLCM中元素的分布到對角線緊密程度。取值范圍:[0 1]。對角矩陣的同質性為1。
........代碼有專門的距離參數,設置我們取像素點應該是取相鄰的還是啥.....................................................
.......................................................................................................
示例:
計算灰度共生矩陣,並且返回縮放后的圖像,SI
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',[])
計算灰度圖像的灰度共生矩陣
I = imread('circuit.tif');
glcm = graycomatrix(I,'Offset',[2 0]);
灰度共生矩陣的特征:
角二階矩(Angular Second Moment, ASM)
ASM=sum(p(i,j).^2) p(i,j)指歸一后的灰度共生矩陣
角二階矩是圖像灰度分布均勻程度和紋理粗細的一個度量,當圖像紋理絞細致、灰度分布均勻時,能量值較大,反之,較小。
熵(Entropy, ENT)
ENT=sum(p(i,j)*(-ln(p(i,j)))
是描述圖像具有的信息量的度量,表明圖像的復雜程序,當復雜程序高時,熵值較大,反之則較小。
反差分矩陣(Inverse Differential Moment, IDM)
IDM=sum(p(i,j)/(1+(i-j)^2))
反映了紋理的清晰程度和規則程度,紋理清晰、規律性較強、易於描述的,值較大;雜亂無章的,難於描述的,值較小。
利用共生矩陣得到其他的特征:
(1) 反差:又稱為對比度,度量矩陣的值是如何分布和圖像中局部變化的多少,反應了圖像的清晰度和紋理的溝紋深淺。紋理的溝紋越深,反差越大,效果清晰;反之,對比值小,則溝紋淺,效果模糊。
(2) 能量:是灰度共生矩陣各元素值的平方和,是對圖像紋理的灰度變化穩定程度的度量,反應了圖像灰度分布均勻程度和紋理粗細度。能量值大表明當前紋理是一種規則變化較為穩定的紋理。
(3) 熵:是圖像包含信息量的隨機性度量。當共生矩陣中所有值均相等或者像素值表現出最大的隨機性時,熵最大;因此熵值表明了圖像灰度分布的復雜程度,熵值越大,圖像越復雜。
(4) 相關性:也稱為同質性,用來度量圖像的灰度級在行或列方向上的相似程度,因此值的大小反應了局部灰度相關性,值越大,相關性也越大。
emmmmm 一段時間圖顯示不出來了,更新一下。。。。