圖像的灰度共生矩陣

 http://blog.csdn.net/weiyuweizhi/article/details/5724050

 

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]

示例:

計算灰度共生矩陣,並且返回縮放後的圖像,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))
反映了紋理的清晰程度和規則程度,紋理清晰、規律性較強、易於描述的,值較大;雜亂無章的,難於描述的,值較小。

 

灰度共生矩阵(Gray-Level Co-occurrence Matrix,GLCM)是用于描述图像纹理特征的一种方法。GLCM可以反映出图像中灰度级别之间的空间关系,从而描述出图像的纹理特征。下面是一个简单的Python程序,用于计算灰度共生矩阵: ```python import cv2 import numpy as np # 读入图像并转换为灰度图像 img = cv2.imread("test.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 定义灰度共生矩阵的参数 d = 1 theta = [0, np.pi/4, np.pi/2, 3*np.pi/4] # 计算灰度共生矩阵 glcm = np.zeros((256, 256, len(theta))) for i in range(gray.shape[0]-d): for j in range(gray.shape[1]-d): for k in range(len(theta)): x = gray[i,j] y = gray[i+d*np.sin(theta[k]), j+d*np.cos(theta[k])] glcm[x,y,k] += 1 # 将灰度共生矩阵归一化 glcm /= np.sum(glcm) # 打印灰度共生矩阵 print(glcm) ``` 在上面的程序中,首先读入了一张测试图像,并将其转换为灰度图像。然后定义了灰度共生矩阵的参数,包括距离和方向。接着使用三重循环遍历图像中的每个像素,并计算出该像素与其相邻像素之间的灰度共生矩阵。最后将灰度共生矩阵归一化,并打印出来。 需要注意的是,上面的程序中计算灰度共生矩阵时只考虑了4个方向,如果需要考虑更多的方向,可以增加theta的取值。此外,在实际应用中,还需要根据具体的任务选择合适的灰度共生矩阵特征,如能量、对比度、相关性等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值