使用灰度共生矩陣 GLCM 提取影像紋理信息

撰文/熊氏阿回

灰度共生矩陣

Google Earth Engine 不僅解決一些常見的地學遙感圖像處理問題,也可用於特定的圖像分析,比如紋理特徵的提取和識別。

紋理特徵是一種不依賴於顏色或亮度而反映圖像中同質現象的視覺特徵,包含了物體表面結構組織排列的重要信息以及它們與周圍環境的聯繫。紋理識別不僅可以應用在遙感圖像上,對醫學、天文、顯微圖像等都具有應用價值。

由於紋理是由灰度分布在空間位置上反覆出現而形成的,因而在圖像空間中相隔某距離的兩像素之間會存在一定的灰度關係,即圖像中灰度的空間相關特性。

灰度共生矩陣就是一種通過研究灰度的空間相關特性來描述紋理的常用方法。1973 年由 Haralick 提出,灰度共生矩陣是涉及像素距離和角度的矩陣函數,它通過計算圖像中一定距離和一定方向的兩點灰度之間的相關性,來反映圖像在方向、間隔、變化幅度及快慢上的綜合信息。

下圖是灰度共生矩陣元素所表示的含義,以(1,1)點為例,GLCM(1,1)值為1說明左側原圖只有一對灰度為1的像素水平相鄰。GLCM(1,2)值為2,是因為原圖有兩對灰度為1和2的像素水平相鄰。

灰度共生矩陣的特徵量

1) 角二階矩(Angular Second Moment, ASM)

公式:ASM = sum(p(i,j).^2),其中 p(i,j) 表示歸一後的灰度共生矩陣

意義:角二階矩是圖像灰度分布均勻程度和紋理粗細的一個度量,當圖像紋理絞細緻、灰度分布均勻時,能量值較大,反之,較小。

2) 熵(Entropy, ENT)

公式:ENT=sum(p(i,j)*(-log(p(i,j)))

意義:描述圖像具有的信息量的度量,表明圖像的複雜程度,當複雜程度高時,熵值較大,反之則較小。

3) 反差分矩陣(Inverse Differential Moment, IDM)

公式:IDM=sum(p(i,j)/(1+(i-j)^2))

意義:反映了紋理的清晰程度和規則程度,紋理清晰、規律性較強、易於描述的,值較大;雜亂無章的,難於描述的,值較小。

GEE 實現與結果

GEE 中已經提供了 GLCM 的函數介面,可以一次生成所有波段的 GLCM 紋理,只需要按照需要把想要的部分增強顯示出來:

var region = ee.Geometry.Polygon([[[-97.7237319946289, 25.425601933964312],n [-97.46932983398438, 25.428702591345065],n [-97.46143341064453, 25.578369229079655],n [-97.72956848144531, 25.57589179857278]]]);nMap.addLayer(region); nMap.setCenter(-97.46143341064453, 25.578369229079655, 14)nvar cloudMask = function(image) {n var bqa = image.select(BQA)n .eq([61440,59424,57344,56320,53248,39936,36896,36864,61440, 59424, 57344, 31744, 28672, 28590, 26656, 24576,20516]).reduce(max);n return image.updateMask(bqa.not());n};nnvar NDVI = function(img) { n var ndvi = img.normalizedDifference([B5,B4]);n return ndvi;}; n nvar l8 = ee.ImageCollection(LANDSAT/LC8_L1T_TOA).filterDate(2016-01-01, 2016-12-31)n .select(B5, B4, BQA).map(cloudMask);nnvar ndvi = l8.map(NDVI).median().clip(region);nMap.addLayer(ndvi,{min:-1,max:1});nnvar input = ndvi.add(127.5).multiply(127.5).toUint16()nMap.addLayer(input, {min:16291,max:16300}, GLCM input);nnprint(input.reduceRegion(ee.Reducer.stdDev(), region, 30).get(nd))nnvar glcm = input.glcmTexture();nMap.addLayer(glcm.select(nd_savg),{min:32582,max:32591}, GLCM output (SAVG));nMap.addLayer(glcm.select(nd_var),{min:0,max:20}, GLCM output (VAR));n

待分析影像

紋理信息一:區分有/無植被

紋理信息二:有/無植被地塊的邊界信息

參考資料

  1. Mathworks: Texture Analysis Using the Gray-Level Co-Occurrence Matrix (GLCM)
  2. Wikipedia: Co-occurrence matrix
  3. 圖像的灰度共生矩陣 - CSDN博客
  4. 灰度共生矩陣及相關特徵值的計算--opencv - yanxiaopan的博客 - CSDN博客
  5. OpenCV22(灰度共現矩陣/灰度共生矩陣) - CSDN博客

推薦閱讀:

ps教程—摳圖秘籍之自由鋼筆工具摳圖

TAG:云计算 | 图像处理 | 纹理 |