1. 程式人生 > >紋理特徵分析的灰度共生矩陣(GLCM)

紋理特徵分析的灰度共生矩陣(GLCM)

紋理分析是對影象灰度(濃淡)空間分佈模式的提取和分析。紋理分析在遙感影象、X射線照片、細胞影象判讀和處理方面有廣泛的應用。關於紋理,還沒有一個統一的數學模型。它起源於表徵紡織品表面性質的紋理概念,可以用來描述任何物質組成成分的排列情況,例如醫學上X 射線照片中的肺紋理、血管紋理、航天(或航空)地形照片中的巖性紋理等。影象處理中的視覺紋理通常理解為某種基本模式(色調基元)的重複排列。因此描述一種紋理包括確定組成紋理的色調基元和確定色調基元間的相互關係。紋理是一種區域特性,因此與區域的大小和形狀有關。兩種紋理模式之間的邊界,可以通過觀察紋理度量是否發生顯著改變來確定。紋理是物體結構的反映,分析紋理可以得到影象中物體的重要資訊,是

影象分割特徵抽取和分類識別的重要手段。對於空間域影象或變換域影象(見影象變換),可以用統計和結構兩種方法進行紋理分析。
  統計紋理分析尋找刻劃紋理的數字特徵,用這些特徵或同時結合其他非紋理特徵對影象中的區域(而不是單個畫素)進行分類。影象區域性區域的自相關函式、灰度共生矩陣、灰度遊程以及灰度分佈的各種統計量,是常用的數字紋理特徵。如灰度共生矩陣用灰度的空間分佈表徵紋理。由於粗紋理的灰度分佈隨距離的變化比細紋理緩慢得多,因此二者有完全不同的灰度共生矩陣。
  結構紋理分析研究組成紋理的基元和它們的排列規則。基元可以是一個畫素的灰度、也可以是具有特定性質的連通的畫素集合。基元的排列規則常用樹文法
來描述。

 

英文名稱  Texture Analysis;

學術解釋

  指通過一定的影象處理技術提取出紋理特徵引數,從而獲得紋理的定量或定性描述的處理過程.紋理分析方法按其性質而言,可分為兩大類:統計分析方法和結構分析方法

學術定義

  紋理是一種普遍存在的視覺現象,目前對於紋理的精確定義還未形成統一認識,多根據應用需要做出不同定義.

  定義1 按一定規則對元素(elements)或基元(primitives)進行排列所形成的重複模式.

  定義2 如果影象函式的一組區域性屬性是恆定的,或者是緩變的,或者是近似週期性的,則圖象中的對應區域具有恆定的紋理.

作用分析

  對這種表面紋理的研究稱為紋理分析.它在計算機視覺領域有著重要的應用.

  在機械工程中對機械零件加工表面的這種凹凸不平性開展研究同樣具有重要的實踐意義。

對影象灰度空間分佈模式提取和分析

  紋理分析在遙感影象、 X射線照片、細胞影象判讀和處理方面有廣泛的應用。關於紋理,還沒有一個統一的數學模型。它起源於表徵紡織品表面性質的紋理概念,可以用來描述任何物質組成成分的排列情況,例如醫學上X 射線照片中的肺紋理、血管紋理、航天(或航空)地形照片中的巖性紋理等。影象處理中的視覺紋理通常理解為某種基本模式(色調基元)的重複排列。因此描述一種紋理包括確定組成紋理的色調基元和確定色調基元間的相互關係。紋理是一種區域特性,因此與區域的大小和形狀有關。兩種紋理模式之間的邊界,可以通過觀察紋理度量是否發生顯著改變來確定。紋理是物體結構的反映,分析紋理可以得到影象中物體的重要資訊,是影象分割特徵抽取和分類識別的重要手段。對於空間域影象或變換域影象(見影象變換),可以用

統計和結構兩種方法進行紋理分析

  統計紋理分析尋找刻劃紋理的數字特徵,用這些特徵或同時結合其他非紋理特徵對影象中的區域(而不是單個畫素)進行分類。影象區域性區域的自相關函式、灰度共生矩陣、灰度遊程以及灰度分佈的各種統計量,是常用的數字紋理特徵。如灰度共生矩陣用灰度的空間分佈表徵紋理。由於粗紋理的灰度分佈隨距離的變化比細紋理緩慢得多,因此二者有完全不同的灰度共生矩陣。

  結構紋理分析研究組成紋理的基元和它們的排列規則。基元可以是一個畫素的灰度、也可以是具有特定性質的連通的畫素集合。基元的排列規則常用樹文法來描述。

紋理基元與影調

  一個紋理基元(不嚴格地說)是一個具有一定的不變特性的視覺基元。這些不變特性在給定區域內的不同位置上,以不同的變形和不同的方向重複出現。紋理基元最基本的不變特性之一是區域內象素的灰度分佈,而影調也是表示灰度的明暗分佈。

  因此,我們認為影調和紋理不是獨立的概念:當在圖象的一定面積區域中影調基元的變化很小時,這個區域的主導特性是影調。當在小面積區域中含大量不同的影調,這個區域佔主導的特性是紋理。

 

spatial gray level co-occurrence matrix 空間灰度共生矩陣(GLCM)
spatial gray level dependence matrix 空間灰度相關矩陣
spatial gray-level dependence matrices  空間灰度獨立矩陣

Texture

紋理特徵建立在子物件基礎之上,這就意味著,必須有一個物件等級架構去使用他們,精確的分割是使用形狀紋理特徵的基礎,子物件的分割要儘量有意義
1.考慮子物件光譜特徵的紋理
2.考慮子物件形狀特徵的紋理
3.基於灰度共生矩陣的紋理

1.Layer Value Texture Based on Subobjects

—【Mean of sub-objects: stddev】子物件均值標準差,物件分割的子物件更隔閡,則該特徵更有意義;

—【Avrg. mean diff. to neighbors of subobjects】通過一個物件內部子物件在某一個圖層(k)上與鄰域(d)物件的差異取平均來進行對比,反應該物件內部差異的平均值。

2.Shape Texture Based on Subobjects

—【Area of subobjects: mean】所包含子物件的平均面積;

—【Area of subobjects: stddev.】所包含子物件的面積的標準差;

—【Density of subobjects: mean 】子物件密度平均值(參考物件形狀特徵中的Density );

—【Density of subobjects: stddev. 】子物件密度的標準差;

—【Asymmetry of subobjects: mean 】子物件不對稱性的平均值;

—【Asymmetry of subobjects: stddev. 】子物件不對稱性的標準差;

—【Direction of subobjects: mean 】方向權重是相關子物件的的不對稱性,越不對稱,對主方向的影響越大,演算法首先比較所有子物件主方向在90-180之間的做(direction-180),即順是真旋轉180度,然後計算等級距離d下的所有子物件的主方向(權重)均值;

—【Direction of subobjects: stddev. 】子物件主方向的標準差。

3.Texture After Haralick P.152

    灰度共生矩陣(http://blog.csdn.net/Redeom/archive/2008/04/17/2301823.aspx

     共生矩陣用兩個位置的象素的聯合概率密度來定義,它不僅反映亮度的分佈特性,也反映具有同樣亮度或接近亮度的象素之間的位置分佈特性,是有關圖象亮度變化的二階統計特徵。它是定義一組紋理特徵的基礎。
    一幅圖象的灰度共生矩陣能反映出圖象灰度關於方向、相鄰間隔、變化幅度的綜合資訊,它是分析圖象的區域性模式和它們排列規則的基礎。
    設f(x,y)為一幅二維數字圖象,其大小為M×N,灰度級別為Ng,則滿足一定空間關係的灰度共生矩陣為
P(i,j)=#{(x1,y1),(x2,y2)∈M×N|f(x1,y1)=i,f(x2,y2)=j
   其中#(x)表示集合x中的元素個數,顯然P為Ng×Ng的矩陣若(x1,y1)與(x2,y2)間距離為d,兩者與座標橫軸的夾角為θ,則可以得到各種間距及角度的灰度共生矩陣P(i,j,d,θ)。

     共生矩陣的一個計算例子見下圖,其中(a)為原始影象的灰度值,(b)為從左到右方向上的共生矩陣,θ=0,(c)為從左下到右上方向上的共生矩陣,θ=45,(d)為從下到上方向共生矩陣,θ=90,(e)為從右下到左上方向上的共生矩陣,θ=135,相鄰間隔d=1。


     紋理特徵提取的一種有效方法是以灰度級的空間相關矩陣即共生矩陣為基礎的,因為影象中相距(Δx,Δy)的兩個灰度畫素同時出現的聯合頻率分佈可以用灰度共生矩陣來表示。若將影象的灰度級定為N級,那麼共生矩陣為N×N矩陣,可表示為M(Δx,Δy)(h,k),其中位於(h,k)的元素mhk的值表示一個灰度為h而另一個灰度為k的兩個相距為(Δx,Δy)的畫素對出現的次數。
     對
粗紋理的區域,其灰度共生矩陣的mhk值較集中於主對角線附近。因為對於粗紋理,畫素對趨於具有相同的灰度。而對於細紋理的區域,其灰度共生矩陣中的mhk值則散佈在各處。
     為了能更直觀地以共生矩陣描述紋理狀況,從共生矩陣匯出一些反映矩陣狀況的引數,典型的有以下幾種:
   (1)能量:是灰度共生矩陣元素值的平方和,所以也稱能量,反映了影象灰度分佈均勻程度和紋理粗細度。如果共生矩陣的所有值均相等,則ASM值小;相反,如果其中一些值大而其它值小,則ASM值大。當共生矩陣中元素集中分佈時,此時ASM值大。ASM值大表明一種較均一和規則變化的紋理模式。
  
 (2)對比度:反映了影象的清晰度和紋理溝紋深淺的程度。紋理溝紋越深,其對比度越大,視覺效果越清晰;反之,對比度小,則溝紋淺,效果模糊。灰度差即對比度大的象素對越多,這個值越大。灰度公生矩陣中遠離對角線的元素值越大,CON越大。
   (3)相關:它度量空間灰度共生矩陣元素在行或列方向上的相似程度,因此,相關值大小反映了影象中區域性灰度相關性。當矩陣元素值均勻相等時,相關值就大;相反,如果矩陣像元值相差很大則相關值小。如果影象中有水平方向紋理,則水平方向矩陣的COR大於其餘矩陣的COR值。
   (4)熵:是影象所具有的資訊量的度量,紋理資訊也屬於影象的資訊,是一個隨機性的度量,當共生矩陣中所有元素有最大的隨機性、空間共生矩陣中所有值幾乎相等時,共生矩陣中元素分散分佈時,熵較大。它表示了影象中紋理的非均勻程度或複雜程度。
   (5)逆差距:反映影象紋理的同質性,度量影象紋理區域性變化的多少。其值大則說明影象紋理的不同區域間缺少變化,區域性非常均勻。
        其它引數:中值<Mean>、協方差<Variance>、同質性/逆差距<Homogeneity>、反差 <Contrast>、差異性<Dissimilarity>、熵<Entropy>、二階距< Angular Second Moment>、自相關<Correlation>

參考文獻:高解析度衛星影像中陰影的自動提取與處理,許妙忠餘志惠。

http://apps.hi.baidu.com/share/detail/37069002

 

 

 

共生矩陣用兩個位置的象素的聯合概率密度來定義,它不僅反映亮度的分佈特性,也反映具有同樣亮度或接近亮度的象素之間的位置分佈特性,是有關圖象亮度變化的二階統計特徵。它是定義一組紋理特徵的基礎。

一幅圖象的灰度共生矩陣能反映出圖象灰度關於方向、相鄰間隔、變化幅度的綜合資訊,它是分析圖象的區域性模式和它們排列規則的基礎。

設f(x,y)為一幅二維數字圖象,其大小為M×N,灰度級別為Ng,則滿足一定空間關係的灰度共生矩陣為

P(i,j)=#{(x1,y1),(x2,y2)∈M×N|f(x1,y1)=i,f(x2,y2)=j}

其中#(x)表示集合x中的元素個數,顯然P為Ng×Ng的矩陣,若(x1,y1)與(x2,y2)間距離為d,兩者與座標橫軸的夾角為θ,則可以得到各種間距及角度的灰度共生矩陣P(i,j,d,θ)。

紋理特徵提取的一種有效方法是以灰度級的空間相關矩陣即共生矩陣為基礎的[7],因為影象中相距(Δx,Δy)的兩個灰度畫素同時出現的聯合頻率分佈可以用灰度共生矩陣來表示。若將影象的灰度級定為N級,那麼共生矩陣為N×N矩陣,可表示為M(Δx,Δy)(h,k),其中位於(h,k)的元素mhk的值表示一個灰度為h而另一個灰度為k的兩個相距為(Δx,Δy)的畫素對出現的次數。
  對粗紋理的區域,其灰度共生矩陣的mhk值較集中於主對角線附近。因為對於粗紋理,畫素對趨於具有相同的灰度。而對於細紋理的區域,其灰度共生矩陣中的mhk值則散佈在各處。

為了能更直觀地以共生矩陣描述紋理狀況,從共生矩陣匯出一些反映矩陣狀況的引數,典型的有以下幾種:

(1)能量:是灰度共生矩陣元素值的平方和,所以也稱能量,反映了影象灰度分佈均勻程度和紋理粗細度。如果共生矩陣的所有值均相等,則ASM值小;相反,如果其中一些值大而其它值小,則ASM值大。當共生矩陣中元素集中分佈時,此時ASM值大。ASM值大表明一種較均一和規則變化的紋理模式。

(2)對比度:,其中。反映了影象的清晰度和紋理溝紋深淺的程度。紋理溝紋越深,其對比度越大,視覺效果越清晰;反之,對比度小,則溝紋淺,效果模糊。灰度差即對比度大的象素對越多,這個值越大。灰度公生矩陣中遠離對角線的元素值越大,CON越大。

(3)相關:它度量空間灰度共生矩陣元素在行或列方向上的相似程度,因此,相關值大小反映了影象中區域性灰度相關性。當矩陣元素值均勻相等時,相關值就大;相反,如果矩陣像元值相差很大則相關值小。如果影象中有水平方向紋理,則水平方向矩陣的COR大於其餘矩陣的COR值。

(4)熵:是影象所具有的資訊量的度量,紋理資訊也屬於影象的資訊,是一個隨機性的度量,當共生矩陣中所有元素有最大的隨機性、空間共生矩陣中所有值幾乎相等時,共生矩陣中元素分散分佈時,熵較大。它表示了影象中紋理的非均勻程度或複雜程度。

(5)逆差距:反映影象紋理的同質性,度量影象紋理區域性變化的多少。其值大則說明影象紋理的不同區域間缺少變化,區域性非常均勻。

其它引數:

中值<Mean>

協方差<Variance>

同質性/逆差距<Homogeneity>

反差<Contrast>

差異性<Dissimilarity>

熵<Entropy>

二階距<Angular Second Moment>

自相關<Correlation>

當影象的區域性有較小的方差時,則灰度值佔有支配地位,當影象的區域性有較大的方差時,則紋理佔有支配地位。紋理是和區域性灰度及其空間組織相聯絡的,紋理在識別感興趣的目標和地區中有著非常重要的作用。

灰度共生矩陣表示了灰度的空間依賴性,它表示了在一種紋理模式下的畫素灰度的空間關係。它的弱點是沒有完全抓住區域性灰度的圖形特點,因此對於較大的區域性,此方法的效果不太理想。灰度共生矩陣為方陣,維數等於影象的灰度級。灰度共生矩陣中的元素(i,j)的值表示了在影象中其中一個畫素的灰度值為i,另一個畫素的灰度值為j,並且相鄰距離為d,方向為A的這樣兩個畫素出現的次數。在實際應用中A一般選擇為0°、45°、90°、135°。一般來說灰度影象的灰度級為256,在計算由灰度共生矩陣推匯出的紋理特徵時,要求影象的灰度級遠小於256,主要是因為矩陣維數較大而視窗的尺寸較小則灰度共生矩陣不能很好表示紋理,如要能夠很好表示紋理則要求視窗尺寸較大,這樣使計算量大大增加,而且當視窗尺寸較大時對於每類的邊界區域誤識率較大。所以在計算灰度共生矩陣之前需要對影象進行直方圖規定化,以減小影象的灰度級,一般規定化後的影象的灰度級為8或16。由灰度共生矩陣能夠匯出許多紋理特徵,本文計算了14種灰度共生矩陣特徵,分別為紋理二階距、紋理熵、紋理對比度、紋理均勻性、紋理相關、逆差分矩、最大概率、紋理方差、共生和均值、共生和方差、共生和熵、共生差均值、共生差方差、共生差熵。

由灰度共生矩陣能夠匯出許多紋理特徵,計算了14種灰度共生矩陣特徵,分別為紋理二階距、紋理熵、紋理對比度、紋理均勻性、紋理相關、逆差分矩、最大概率、紋理方差、共生和均值、共生和方差、共生和熵、共生差均值、共生差方差、共生差熵。

目前,人們對遙感影像上的紋理特徵的含義理解不盡相同,紋理有時被稱為結構、影紋和紋形等。Pickett認為紋理為保持一定的特徵重複性並且間隔規律可以任意安排的空間結構。HawKins認為[6]紋理具有三大標誌:某種區域性序列性不斷重複、非隨機排列和紋理區域內大致為均勻的統一體。LiWang和D. C. He認為[7],紋理是紋理基元組成的,紋理基元被認為是表現紋理特徵的最小單元,是一個像元在

其周圍8個方向上的特徵反應。紋理特徵有時是明顯的,以某種基本圖形在某一地區有規律的週期性出現,例如:大面積森林覆蓋地區的影像構成的紋理為斑點狀,沙漠地區的影像構成的紋理為鏈狀、新月狀等;而有時紋理特徵是不明顯的、隱晦的,具有不穩定性。一般來說,前者紋理比較均一,後者紋理比較複雜[9]。

紋理作為一種區域特徵,是對於影象各像元之間空間分佈的一種描述。由於紋理能充分利用影象資訊,無論從理論上或常識出發它都可以成為描述與識別影象的重要依據,與其他影象特徵相比,它能更好地兼顧影象巨集觀性質與細微結構兩個方面,因此紋理成為目標識別需要提取的重要特徵。提取紋理特徵的方法很多,如基於區域性統計特性的特徵、基於隨機場模型的特徵、基於空間頻率的特徵、分形特徵等,其中,應用最廣泛的是基於灰值共生矩陣的特徵[10]。

%**************************************************************************
% 影象檢索——紋理特徵
%基於共生矩陣紋理特徵提取,d=1,θ=0°,45°,90°,135°共四個矩陣
%所用影象灰度級均為256
%參考《基於顏色空間和紋理特徵的影象檢索》
%function : T=Texture(Image)
%Image : 輸入影象資料
%T : 返回八維紋理特徵行向量
%**************************************************************************
function T = Texture(path)
Image = imread(path);

% [M,N,O] = size(Image);
M = 256;
N = 256;
if isrgb(Image)%判斷是否是RGB
Gray=rgb2gray(Image);
end
%————————————————————————–
%1.將各顏色分量轉化為灰度
%————————————————————————–
%Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3))

%————————————————————————–
%2.為了減少計算量,對原始影象灰度級壓縮,將Gray量化成16級
%————————————————————————–
for i = 1:M
for j = 1:N
for n = 1:256/16
if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15
Gray(i,j) = n-1;
end
end
end
end

%--------------------------------------------------------------------------
%3.計算四個共生矩陣P,取距離為1,角度分別為0,45,90,135
%--------------------------------------------------------------------------
P = zeros(16,16,4);
for m = 1:16
for n = 1:16
for i = 1:M
for j = 1:N
if j P(m,n,1) = P(m,n,1)+1;
P(n,m,1) = P(m,n,1);
end
if i>1&j P(m,n,2) = P(m,n,2)+1;
P(n,m,2) = P(m,n,2);
end
if i P(m,n,3) = P(m,n,3)+1;
P(n,m,3) = P(m,n,3);
end
if i P(m,n,4) = P(m,n,4)+1;
P(n,m,4) = P(m,n,4);
end
end
end
if m==n
P(m,n,:) = P(m,n,:)*2;
end
end
end

%%---------------------------------------------------------
% 對共生矩陣歸一化
%%---------------------------------------------------------
for n = 1:4
P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));
end

%--------------------------------------------------------------------------
%4.對共生矩陣計算能量、熵、慣性矩、相關4個紋理引數
%--------------------------------------------------------------------------
H = zeros(1,4);
I = H;
Ux = H; Uy = H;
deltaX= H; deltaY = H;
C =H;
for n = 1:4
E(n) = sum(sum(P(:,:,n).^2)); %%能量
for i = 1:16
for j = 1:16
if P(i,j,n)~=0
H(n) = -P(i,j,n)*log(P(i,j,n))+H(n); %%熵
end
I(n) = (i-j)^2*P(i,j,n)+I(n); %%慣性矩

Ux(n) = i*P(i,j,n)+Ux(n); %相關性中μx
Uy(n) = j*P(i,j,n)+Uy(n); %相關性中μy
end
end
end
for n = 1:4
for i = 1:16
for j = 1:16
deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n); %相關性中σx
deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n); %相關性中σy
C(n) = i*j*P(i,j,n)+C(n);
end
end
C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n); %相關性
end

%--------------------------------------------------------------------------
%求能量、熵、慣性矩、相關的均值和標準差作為最終8維紋理特徵
%--------------------------------------------------------------------------
T(1) = mean(E); T(2) = sqrt(cov(E));
T(3) = mean(H); T(4) = sqrt(cov(H));
T(5) = mean(I); T(6) = sqrt(cov(I));
T(7) = mean(C); T(8) = sqrt(cov(C));

 

 

在計算灰度共生矩陣前,需要做影像的量化比如將256級影像量化為128級。有一種方法是線性量化,但是這種方法有可能對原始影像的紋理產生人為地影響,太“粗了”。所以想請教大家是否還有其他較好的影像灰度級量化的方法?

 

http://blog.csdn.net/linxue968/article/details/6034745

 

影象的灰度共生矩陣GLCM(matlab 函式幫助)

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))
反映了紋理的清晰程度和規則程度,紋理清晰、規律性較強、易於描述的,值較大;雜亂無章的,難於描述的,值較小

 

灰度共生矩陣就是一種通過研究灰度的空間相關特性來描述紋理的常用方法。

灰度共生矩陣是對影象上保持某距離的兩象素分別具有某灰度的狀況進行統計得到的。

取影象(N×N)中任意一點(x,y)及偏離它的另一點(x+a,y+b),設該點對的灰度值為(g1,g2)。令點(x,y)在整個畫面上移動,則會得到各種(g1,g2)。值,設灰度值的級數為,則(g1,g2)。的組合共有 k2種。對於整個畫面,統計出每一種(g1,g2)值出現的次數,然後排列成一個方陣,在用(g1,g2)出現的總次數將它們歸一化為出現的概率P(g1,g2),這樣的方陣稱為灰度共生矩陣。距離差分值(a,b)取不同的數值組合,可以得到不同情況下的聯合概率矩陣。(a,b)取值要根據紋理週期分佈的特性來選擇,對於較細的紋理,選取(1,0)、(1,1)、(2,0)等小的差分值。

 

   為了能更直觀地以共生矩陣描述紋理狀況,從共生矩陣匯出一些反映矩陣狀況的引數,典型的有以下幾種:

   (1)能量:是灰度共生矩陣元素值的平方和,所以也稱能量,反映了影象灰度分佈均勻程度和紋理粗細度。如果共生矩陣的所有值均相等,則ASM值小;相反, 如果其中一些值大而其它值小,則ASM值大。當共生矩陣中元素集中分佈時,此時ASM值大。ASM值大表明一種較均一和規則變化的紋理模式。

   (2)對比度:反映了影象的清晰度和紋理溝紋深淺的程度。紋理溝紋越深,其對比度越大,視覺效果越清晰;反之,對比度小,則溝紋淺,效果模糊。灰度差即對比度大的象素對越多,這個值越大。灰度公生矩陣中遠離對角線的元素值越大,CON越大。

   (3)相關:它度量空間灰度共生矩陣元素在行或列方向上的相似程度,因此,相關值大小反映了影象中區域性灰度相關性。當矩陣元素值均勻相等時,相關值就大; 相反,如果矩陣像元值相差很大則相關值小。如果影象中有水平方向紋理,則水平方向矩陣的COR大於其餘矩陣的COR值。

   (4)熵:是影象所具有的資訊量的度量,紋理資訊也屬於影象的資訊,是一個隨機性的度量,當共生矩陣中所有元素有最大的隨機性、空間共生矩陣中所有值幾乎相等時,共生矩陣中元素分散分佈時,熵較大。它表示了影象中紋理的非均勻程度或複雜程度。

   (5)逆差距: 反映影象紋理的同質性,度量影象紋理區域性變化的多少。其值大則說明影象紋理的不同區域間缺少變化,區域性非常均勻。

        其它引數:中值<Mean>、協方差<Variance>、同質性/逆差距<Homogeneity>、反差 <Contrast>、差異性<Dissimilarity>、熵<Entropy>、二階距< Angular Second Moment>、自相關<Correlation>

 

 

image=imread('F:/1021-4.bmp');
        %計算影象的灰度共生矩陣
[glcms,SI]=graycomatrix(image);
        %計算影象的灰度共生矩陣
stats = graycoprops(glcms,'Contrast Correlation energy')

 

 

%灰度共生矩陣紋理特徵提取
%提取了三個特徵引數。f1為角二階矩,f2為相關度,f3為熵
clc
clear
tu=imread('nvxing19.jpg');
IN=rgb2gray(tu);              %灰度化
g=256;
[R,C]=size(IN);
p1=zeros(g);             %計算共生矩陣
for M=1:R
    for N=1:(C-1)
        p1(IN(M,N)+1,IN(M,N+1)+1)= p1(IN(M,N)+1,IN(M,N+1)+1)+1;
        p1(IN(M,N+1)+1,IN(M,N)+1)= p1(IN(M,N+1)+1,IN(M,N)+1)+1;
    end
end
p2=double(p1)/(M*N);             %歸一化

%計算角二階矩 f1
f1=p2.^2;
f1=sum(f1(:))

% 計算相關度 f2
colour=0:(g-1);
m1=sum(p2)*colour(:);
m2=m1;
pp=sum(p2);
v1=((colour-m1).^2)*pp(:);
 v2=v1;
[m,n]=meshgrid(colour,colour);
pp=m.*n.*p2;
f2=(sum(pp(:))-m1*m2)/(v1+eps)*(v2+eps)

%計算墒 f3
pp=(p2.*log2(p2+eps));
f3=-sum(pp(:));

%計算對比度 f4
f4=0;
k_f4=0;

for k=1:g-1
    for i=1:g-1
        if(i+k)<=g
            k_f4=k_f4+2*p2(i,i+k);
        end
    end
    f4=f4+k_f4*k^2;
end

%計算逆矩陣 f5
f5=0;
for k=1:g
    for j=1:g
        f5=f5+p2(k,j)/(1+(j-k)^2);
    end
end

 

 

 

 

Matlab中實現灰度共生矩陣

 

%**************************************************************************
%                   影象檢索——紋理特徵
%基於共生矩陣紋理特徵提取,d=1,θ=0°,45°,90°,135°共四個矩陣
%所用影象灰度級均為256
%參考《基於顏色空間和紋理特徵的影象檢索》
%function : T=Texture(Image)
%Image    : 輸入影象資料
%T        : 返回八維紋理特徵行向量
%**************************************************************************
% function T = Texture(Image)
Gray = imread('d:\result5.bmp');
[M,N,O] = size(Gray);
M = 128;
N = 128;

%--------------------------------------------------------------------------
%1.將各顏色分量轉化為灰度
%--------------------------------------------------------------------------
% Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3));

%--------------------------------------------------------------------------
%2.為了減少計算量,對原始影象灰度級壓縮,將Gray量化成16級
%--------------------------------------------------------------------------
for i = 1:M
    for j = 1:N
        for n = 1:256/16
            if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15
                Gray(i,j) = n-1;
            end
        end
    end
end

%--------------------------------------------------------------------------
%3.計算四個共生矩陣P,取距離為1,角度分別為0,45,90,135
%--------------------------------------------------------------------------
P = zeros(16,16,4);
for m = 1:16
    for n = 1:16
        for i = 1:M
            for j = 1:N
                if j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1