灰度共生矩陣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
                    P(m,n,1) = P(m,n,1)+1;
                    P(n,m,1) = P(m,n,1);
                end
                if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1
                    P(m,n,2) = P(m,n,2)+1;
                    P(n,m,2) = P(m,n,2);
                end
                if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1
                    P(m,n,3) = P(m,n,3)+1;
                    P(n,m,3) = P(m,n,3);
                end
                if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1
                    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維紋理特征
%--------------------------------------------------------------------------
a1 = mean(E)  
b1 = sqrt(cov(E))

a2 = mean(H)
b2 = sqrt(cov(H))

a3 = mean(I) 
b3 = sqrt(cov(I))

a4 = mean(C)
b4 = sqrt(cov(C))

sprintf('0,45,90,135方向上的能量依次為: %f, %f, %f, %f',E(1),E(2),E(3),E(4))  % 輸出數據;
sprintf('0,45,90,135方向上的熵依次為: %f, %f, %f, %f',H(1),H(2),H(3),H(4))  % 輸出數據;
sprintf('0,45,90,135方向上的慣性矩依次為: %f, %f, %f, %f',I(1),I(2),I(3),I(4))  % 輸出數據;
sprintf('0,45,90,135方向上的相關性依次為: %f, %f, %f, %f',C(1),C(2),C(3),C(4))  % 輸出數據;
 

  

 

灰度共生矩陣只是描述紋理的一種方法,其本身是不能作為特征的.
特別是灰度等級大的時候.
但是灰度共生矩陣的能量\相關等二次特征可以表征圖像的一些特性.
問題一:接下來然后怎么辦?
  接下來轉化為其它的特征作為輸入.
問題二:一副圖像的紋理特征提取出來的矩陣和原來矩陣的維數是相同的還是不同的?
  一般不是相同的,一般要小,特征嘛,要不然不需要降維,直接讓原圖像作為原始特征.

 

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

 

 

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

 

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

 

 

灰度-梯度共生矩陣紋理特征分析既可用灰度本身的信息,又可用灰度變化的梯度信息。灰度-梯度共生矩陣紋理分析方法是用灰度和梯度的綜合信息提取紋理特征,它考慮像素灰度與邊緣梯度的聯合統計分布。利用灰度-梯度共生矩陣我們計算了小梯度優勢、大梯度優勢、灰度分布不均勻性、梯度分布不均勻性、能量、灰度平均、梯度平均、灰度方差、梯度方差、相關、梯度熵,灰度熵、混合熵、慣性、以及逆矩差等十五個紋理特征量參數說明: GrayNumLevels 灰度級參數 GradsNumLevels 梯度級參數 Method='sobel' 梯度算子提取特征如下: SmallGradsDominance 小梯度優勢 BigGradsDominance 大梯度優勢 GrayAsymmetry 灰度分布不均勻性 GradsAsymmetry 梯度分布不均勻性 Energy 能量 GrayMean 灰度平均 GradsMean 梯度平均 GrayVariance 灰度方差 GradsVariance 梯度方差 Correlation 相關 GrayEntropy 灰度熵 GradsEntropy 梯度熵 Entropy 混合熵 Inertia 慣性 DifferMo
 

灰度共生矩陣法,顧名思義,就是通過計算灰度圖像得到它的共生矩陣,然后透過計算這個共生矩陣得到矩陣的部分特征值,來分別代表圖像的某些紋理特征(紋理的定義仍是難點)。灰度共生矩陣能反映圖像灰度關於方向、相鄰間隔、變化幅度的綜合信息,它是分析圖像的局部模式和它們排列規則的基礎。

對於灰度共生矩陣的理解,需要明確幾個概念:方向,偏移量和灰度共生矩陣的階數。

1、  方向

一般計算過程會分別選在幾個不同的方向來進行,常規的是0°、45°、90°、135°,理論上的所有方向計算方法不可取。

定義如下:

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

水平方向為0°垂直的90°,以及45°和135°(大致如上圖所畫)

2、偏移量(offset:下面例子中,取值為1來幫助理解)

3、灰度共生矩陣的階數和灰度圖像的灰度值的階數是一致的,即當灰度圖像的灰度值的階數是N時,灰度共生矩陣為N*N的矩陣。

 

0

0

0

1

2

0

0

1

1

2

0

1

1

1

1

1

1

2

2

1

1

2

2

1

0

假定offset為1,取0°方向求共生矩陣時:

最初取點(1,1) 和(1,2) ,此時在頻度矩陣的(0,0)處加1((1,1)點的灰度值為0,(1,2)點的灰度也為0);

然后取(1,2) 和(1,3)點,此時也在頻度矩陣的(0,0)處加1;

接着取到(1,3) 和(1,4)點,此時也在頻度矩陣的(0,0)處加1;

接着取到(1,4) 和(1,5) 點,此時在頻度矩陣的(1,0)處加1((1,5)點的灰度值為1 ,(1,4)點的灰度為0)。

直到每一行都取遍即可。

假定offset為1,取45°方向求共生矩陣時:

最初取點(1,1) 和(2,2) ,此時在45°方向頻度矩陣的(0,0)處加1((1,1)點的灰度值為0,(2,2)點的灰度也為0);

然后取(1,2) 和(2,3)點,此時在45°方向頻度矩陣的(0,1)處加1;

接着取到(1,3) 和(2,4)點,此時也在45°方向頻度矩陣的(0,1)處加1;

接着取到(1,4) 和(2,5) 點,此時在45°方向頻度矩陣的(1,2)處加1((1,4)點的灰度值為1,(2,5)點的灰度為2)。

然后下一行,直到每一行合適的值都取遍即可。

另兩個方向的情況相似。

最后得到如下四個頻度矩陣

 

10

0

1

2

0

3

3

0

1

1

5

4

2

0

2

2

11

0

1

2

0

1

5

0

1

0

3

5

2

1

1

0

 

 

 

 

 

 

0°方向頻度矩陣                  45°方向頻度矩陣

                                        

10

0

1

2

0

3

3

0

1

1

6

3

2

0

2

2

10

0

1

2

0

3

0

0

1

0

7

2

2

0

2

2

 

 

 

 

 

90°方向頻度矩陣              135°方向頻度矩陣

 

在用matlab編程時由於matlab的矩陣的下腳標是從1開始的所以矩陣的形式類似於下面的形式:

p(I(i,j)+1,I(i,j+1)+1)= p(I(i,j)+1,I(i,j+1)+1)+1;這是0°方向的計算式

這里,灰度階數即從最低的0變成最低為1

四個方向的計算式,大致如下:

p1(IN(M,N)+1,IN(M,N+1)+1)= p1(IN(M,N)+1,IN(M,N+1)+1)+1;%是共生矩陣0度的計算式

p1(IN(M,N)+1,IN(M-1,N+1)+1)= p1(IN(M,N)+1,IN(M-1,N+1)+1)+1;%是45度的計算式

p1(IN(M,N)+1,IN(M-1,N)+1)= p1(IN(M,N)+1,IN(M-1,N)+1)+1;%是共生矩陣90度的計算式

p1(IN(M,N)+1,IN(M-1,N-1)+1)= p1(IN(M,N)+1,IN(M-1,N-1)+1)+1;%是135度的計算式

 

 

現在各個方向統計完畢,然后將頻度矩陣/總頻次即得共生矩陣

這時候得到四個共生矩陣,分別是紋理特征分析的灰度共生矩陣(GLCM)紋理特征分析的灰度共生矩陣(GLCM)紋理特征分析的灰度共生矩陣(GLCM)紋理特征分析的灰度共生矩陣(GLCM)

其編程實現,可參見如下代碼:

%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

                    P(m,n,1) = P(m,n,1)+1;

                    P(n,m,1) = P(m,n,1);

                end

                if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1

                    P(m,n,2) = P(m,n,2)+1;

                    P(n,m,2) = P(m,n,2);

                end

                if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1

                    P(m,n,3) = P(m,n,3)+1;

                    P(n,m,3) = P(m,n,3);

                end

                if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1

                    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

 

http://archive.cnblogs.com/a/2115266/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM