灰度共生矩陣GLCM及其matlab實現
Prerequisites
概念
計算方式
對於精度要求高且紋理細密的紋理分佈,我們取畫素間距為
d = 1
,以下是方向的說明:
我們來看,matlab內建工具箱中的灰度共生矩陣的生成函式graycomatrix(gray-level co-occurrence matrix)對方向的說明:
如上圖所示,方向是在每一個畫素點(pixel of interest)的鄰域(當然,邊界點除外)中獲得的,只不過這裡的座標系變為了:
δ=(0,±1) \delta=(0, \pm 1)為水平方向掃描,也即θ=0∘orθ=180∘ \theta = 0^\circ or \theta = 180^\circ;δ=(±1,0) \delta=(\pm 1, 0)為垂直掃描(θ=90∘orθ=−90∘ \theta = 90^\circ or \theta = -90^\circ);δ=(1,−1),δ=(−1,1) \delta = (1, -1), \delta = (-1, 1)是−45∘ -45^\circ或135∘ 135^\circ掃描;δ=(1,1),δ=(−1,−1) \delta = (1, 1), \delta = (-1, -1)是45∘ 45^\circ掃描。
一旦畫素間距離
d
以及畫素間空間位置關係\delta
確定,即可生成灰度共生矩陣。
GLCM所表示的是紋理影象的某些統計特性,所謂統計,通俗地講就是累計某種情況出現的次數,用這一次數除以總的情況數,即可得其統計意義上的概率。
我們來統計灰度級2與2在-45度和135度方向上(也即
\delta = (1, -1)
或者\delta=(-1, 1)
)出現的次數,如圖所示,共出現九次,在兩個方向上即是18次。
matlab
matlab相關工具箱函式
使用灰度共生矩陣(GLCM)描述和提取影象紋理特徵,是一個強大且流行的工具,自然matlab工具箱會提供相應的函式——graycomatrix
:
給出一個影象矩陣,設定一些引數,得到其灰度共生矩陣,這就是函式的基本用法:
[glcm, SI] = graycomatrix(I, ...)
主要的引數有二個,分別是
NumLevels
(灰度級數)
最終glcm
的size是NumLevels
*NumLevels
Offset
(方向[0, 1; -1, 1; -1, 0; -1, -1]):
[0, 1]
中的1
表示的偏移數(offset),當然也可以取2
或者更多,如上文所說,對於精度要求高且影象紋理本身即很豐富的影象來說,為了更精細地刻畫,我們取偏移量(offset)為1
。
我們將原始I
轉換為SI
,對SI
計算GLCM,SI
中元素的值介於[1, NumLevels]之間。
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', [])
% 'Offset'的default值為`[0, 1]`
glcm =
0 0 2 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0
0 0 0 2 0 0 0 0 0
0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 1 0
0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1
SI =
2 2 6 7 9 9
3 4 6 8 1 3
1 3 4 6 7 8
demo
這裡先寫一個demo,稍微有點難懂的地方在於灰度共生矩陣的計算方式,然後是一些程式設計上的迴圈判斷。其他方向的情況還未考慮(在第三和第四層迴圈的地方可能會略有不同),以及將其封裝成一個函式的操作還是留待以後吧:
clear, clc
P = [ 0 1 2 0 1 2
1 2 0 1 2 0
2 0 1 2 0 1
0 1 2 0 1 2
1 2 0 1 2 0
2 0 1 2 0 1];
[r, c] = size(P);
P_u = unique(P); % 去重,得到所有的灰度級
n = length(P_u); % 不同灰度級的個數
G = zeros(n, n); % 初始化灰度共生矩陣為全0矩陣,
%% 四層迴圈,最外層的兩層迴圈用來為GLCM的各個位置賦值
% 內層的兩層迴圈時遍歷原始影象矩陣,累計符合某一對應關係的的情況出現的次數
for p = 1:n,
for q = 1:n,
cnt = 0; % GLCM刻畫的是灰度影象畫素的統計特性,在matlab中通過次數的統計計算得到
for i = 1:r,
for j = 1:c,
if (j+1) <= c && ((P(i, j) == p && P(i, j+1) == q) || P(i, j) == q && P(i, j+1) == p),
cnt = cnt + 1;
end
end
end
G(p, q) = cnt;
end
end
G
References
相關文章
- 灰度直方圖均衡化及其實現直方圖
- MATLAB(4)矩陣操作Matlab矩陣
- Matlab生成隨機矩陣Matlab隨機矩陣
- python將矩陣轉化為灰度圖Python矩陣
- matlab矩陣連線圖解Matlab矩陣圖解
- MATLAB(5) 特殊矩陣的建立Matlab矩陣
- 主成分分析及其matlab實現Matlab
- C++實現蛇形矩陣C++矩陣
- OpenCL之矩陣乘法實現矩陣
- matlab標量或矩陣比較Matlab矩陣
- MATLAB(6)矩陣和向量運算Matlab矩陣
- 矩陣LU分解---使用MATLAB和DEV-C++實現的程式碼過程矩陣MatlabdevC++
- matlab如何統計矩陣各元素的出現次數Matlab矩陣
- matlab計算含有未知數的矩陣Matlab矩陣
- matlab比較兩個矩陣是否相等Matlab矩陣
- Hadoop 2.6 使用Map Reduce實現矩陣相乘1 矩陣轉置Hadoop矩陣
- 幾種常見窗函式及其MATLAB實現函式Matlab
- matlab練習程式(灰度拉伸)Matlab
- 仿射變換及其變換矩陣的理解矩陣
- 矩陣的奇異值分解(SVD)及其應用矩陣
- Matlab統計矩陣內各值出現次數以及所佔比例Matlab矩陣
- C語言實現矩陣螺旋輸出C語言矩陣
- matlab產生隨機數或隨機矩陣Matlab隨機矩陣
- matlab之cat:以特定維度連線矩陣Matlab矩陣
- 模擬退火演算法舉例及其matlab實現演算法Matlab
- 生成螺旋矩陣(方陣、矩陣)矩陣
- 科學計算與Matlab筆記:第2章:Matlab矩陣處理Matlab筆記矩陣
- 矩陣變換:沿任意軸旋轉及其推導矩陣
- Matlab產生特定範圍的隨機數矩陣Matlab隨機矩陣
- matlab之size:返回矩陣的行數和列數Matlab矩陣
- 用matlab生成同一元素的矩陣Matlab矩陣
- verilog實現矩陣卷積運算矩陣卷積
- 資料結構實驗 二維矩陣的實現資料結構矩陣
- 鄰接矩陣、度矩陣矩陣
- 巨大的矩陣(矩陣加速)矩陣
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- 求Matlab矩陣中各個不同元素或者某個元素出現的次數Matlab矩陣