基於opencv的灰度梯度共生矩陣

2022-09-14 13:06:09 字數 3484 閱讀 2900

來自於gitee,直接上源**:

//

//created by lihao on 2020/4/15.

//#ifndef detect_socks_ggcm_h

#define detect_socks_ggcm_h#include

#include

#include

using

namespace

std;

using

namespace

cv;typedef vector

int>>vecggcm;

typedef

struct

_ggcmfeatures

float small_grads_dominance; //

小梯度優勢

float big_grads_dominance; //

大梯度優勢

float gray_asymmetry; //

灰度分布不均勻性

float grads_asymmetry; //

梯度分布不均勻性

float energy; //

能量float gray_mean ; //

灰度均值

float grads_mean ; //

梯度均值

float gray_variance ; //

灰度均方差

float grads_variance ; //

梯度均方差

float corelation ; //

相關性float gray_entropy ; //

灰度熵float grads_entropy ; //

梯度熵float entropy ; //

混合熵float inertia ; //

慣性float differ_moment ; //

逆差距} ggcmfeatures;

class

ggcm ;

#endif

//detect_socks_ggcm_h

然後是實現檔案:

//

//created by lihao on 2020/4/15.

//#include

"ggcm.h

"ggcm::ggcm() : m_graylevel(

16){}

ggcm::~ggcm(){}

void ggcm::initggcm(vecggcm& vecggcm, int

size)

for (int i = 0; i < size; ++i)

}}void ggcm::calggcm(mat &inputimg, vecggcm& vecggcm,vecggcm &tempvec_gray,vecggcm &tempvec_gradient)}}

++maxgraylevel;

tempvec_gray.resize(height);

for (int i = 0; i < height; ++i)

//灰度歸一化

if (maxgraylevel > m_graylevel)//

若灰度級數大於16,則將影象的灰度級縮小至16級。}}

else}}

tempvec_gradient.resize(height);

for (int i = 0; i < height; ++i)

int maxgradientlevel = 0

;

//求影象的梯度

for (int i = 0; i < height; ++i)

else}}

}++maxgradientlevel;

//梯度歸一化

if(maxgradientlevel>m_graylevel)}}

//得到梯度-灰度共生矩陣

for (int i = 0; i < height; ++i)

}}//

二維陣列求和

templatefloat sumvvector(vector>v)

}return

ans;}//

二維陣列按行求和

templatefloat sumrowvvector(vector> v, int

num)

return

ans;}//

二維陣列按列求和

templatefloat sumcolvvector(vector> v, int

num)

return

ans;

}void ggcm::getggcmfeatures(vecggcm& vecggcm, ggcmfeatures&features)

features.gray_asymmetry += pow(sumrowgray, 2

); features.grads_asymmetry += pow(sumcolgrad, 2

); }

features.small_grads_dominance /=total;

features.big_grads_dominance /=total;

features.gray_asymmetry /=total;

features.grads_asymmetry /=total;

vector

float>>vecpggcm;

vecpggcm.resize(m_graylevel);

for (int i = 0; i < m_graylevel; ++i)

for(int i=0;i)

}for(int i=0;i)

features.differ_moment += vecpggcm[i][j] / (1 + pow((i-j), 2

)); }

features.gray_mean += (i+1) *sumrowgray;

features.grads_mean += (i+1) *sumcolgrad;

if(sumrowgray != 0

)

if(sumcolgrad!=0

) }

for(int i=0;i)

features.gray_variance = pow(features.gray_variance, 0.5

); features.grads_variance = pow(features.grads_variance, 0.5

);

for(int i = 0; i < m_graylevel; ++i)

}features.corelation=features.corelation/(features.gray_variance*features.grads_variance);

}

用法很簡單,直接按照順序呼叫三個public函式即可!

灰度梯度共生矩陣紋理特徵

灰度梯度共生矩陣模型集中反映了影象中兩種最基本的要素,即像點的灰度和梯度 或邊緣 的相互關係。各像點的灰度是構成一副影象的基礎,而梯度是構成影象邊緣輪廓的要素,影象的主要資訊是由影象的邊緣輪廓提供的。灰度梯度空間很清晰的描繪了影象內各畫素點灰度與梯度的分辨規律,同時也給出了各像點與其領域像點的空間關...

OpenCV22(灰度共現矩陣 灰度共生矩陣)

理解它的最好辦法,就是我們來一起算一次。灰度共現 共生矩陣,其上元素,是灰度影象中某種形狀的畫素對,在全圖中出現的次數 或者是概率 不理解?沒關係,一會就明白了 可以用作影象的一種特徵,藉以區分不同的影象。灰度共現矩陣是方陣,矩陣的行數是影象灰度的等級。不理解?沒關係 ok,開始做題。假設乙個影象的...

灰度共生 共現 矩陣的求法

前段時間在寫關於影象的作業時,出現了灰度共生矩陣的求法問題。於是就上網查資料發現不是很理想,翻書查閱也是不同的書籍出現的解法也是不一樣,上別的課時老師也給我們講了下,但是發現與我所看到的資料上講的不一樣。經總結思考後算是明白了,現在就班門弄斧分享下自己的心得。至於灰度共生矩陣的用途,我只知道它在檢測...