灰度共生矩陣(GLCMGray-LevelCo-occurrenceMatrix)_第1頁
灰度共生矩陣(GLCMGray-LevelCo-occurrenceMatrix)_第2頁
灰度共生矩陣(GLCMGray-LevelCo-occurrenceMatrix)_第3頁
灰度共生矩陣(GLCMGray-LevelCo-occurrenceMatrix)_第4頁
灰度共生矩陣(GLCMGray-LevelCo-occurrenceMatrix)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

灰度共?矩陣(GLCM,Gray-LevelCo-occurrenceMatrix)概念由于紋理是由灰度分布在空間位置上反復(fù)出現(xiàn)?形成的,因?在圖像空間中相隔某距離的兩像素之間會存在?定的灰度關(guān)系,即圖度的空間相關(guān)特性。灰度共?矩陣就是?種通過研究灰度的空間相關(guān)特性來描述紋理的常??法?;叶裙?矩陣是涉及像素距離和?度的矩陣函數(shù),它通過計算圖像中?定距離和?定?向的兩點(diǎn)灰度之間的相關(guān)性,來反映圖像在?向、間隔、變化幅度及快慢上的綜合信息?;叶戎?圖是對圖像上單個像素具有某個灰度進(jìn)?統(tǒng)計的結(jié)果,?灰度共?矩陣是對圖像上保持某距離的兩像素分別具有某灰度的狀況進(jìn)?統(tǒng)計得到的。GLCM所代表的含義灰度共?矩陣元素所表?的含義,以(1,1)點(diǎn)為例,GLCM(1,1)值為1說明左側(cè)原圖只有?對灰度為1的像素?平相鄰。GLCM(1,2)值為2,是因為原圖有兩對灰度為1和2的像素?平相鄰。共?矩陣計算紋理特征能量(Energy):是灰度共?矩陣各元素值的平?和,是對圖像紋理的灰度變化穩(wěn)定程度的度量,反應(yīng)了圖像灰度分布均勻程度和紋理粗細(xì)度。能量值?表明當(dāng)前紋理是?種規(guī)則變化較為穩(wěn)定的紋理。熵(Entropy):是圖像包含信息量的隨機(jī)性度量。當(dāng)共?矩陣中所有值均相等或者像素值表現(xiàn)出最?的隨機(jī)性時,熵最?;因此熵值表明了圖像灰度分布的復(fù)雜程度,熵值越?,圖像越復(fù)雜。最?概率(Maximumprobability):表?圖像中出現(xiàn)次數(shù)最多的紋理特征。對?度(Contrast):度量矩陣的值是如何分布和圖像中局部變化的多少,反應(yīng)了圖像的清晰度和紋理的溝紋深淺。紋理的溝紋越深,反差越?,效果清晰;反之,對?值?,則溝紋淺,效果模糊。對公式(6),典型的有κ=2,λ=1。倒數(shù)差分矩(Inversedifferencemoment):反映圖像紋理的同質(zhì)性,度量圖像紋理局部變化的多少。其值?則說明圖像紋理的不同區(qū)域間缺少變化,局部?常均勻。相關(guān)性(Correlation):?相關(guān)反應(yīng)了圖像紋理的?致性。如果圖像中有?平?向紋理,則?平?向共?矩陣Correlation值?于其余?向共?矩陣Correlation的值。它度量空間灰度共?矩陣元素在?或列?向上的相似程度,因此,相關(guān)值??反映了圖像中局部灰度相關(guān)性。當(dāng)矩陣元素值均勻相等時,相關(guān)值就?;相反,如果矩陣像元值相差很?則相關(guān)值?。其中μx,μy為均值,σx,σy為標(biāo)準(zhǔn)差,計算公式如下4.算法實現(xiàn)#pragmaonce#include<iostream>#include<cassert>#include<vector>#include<iterator>#include<functional>#include<algorithm>#include<opencv2/opencv.hpp>usingnamespacestd;usingnamespacecv;typedefvector<vector<int>>VecGLCM;typedefstruct_GLCMFeatures{_GLCMFeatures():energy(0.0),entropy(0.0),contrast(0.0),idMoment(0.0){}doubleenergy;//能量doubleentropy;//熵doublecontrast;//對?度doubleidMoment;//逆差分矩,inversedifferencemoment}GLCMFeatures;classGLCM{public:GLCM();~GLCM();public://枚舉灰度共?矩陣的?向enum{GLCM_HORIZATION=0,//?平//垂直GLCM_VERTICAL=1,GLCM_ANGLE45=2,GLCM_ANGLE135=3//45度?//135度?};public://計算灰度共?矩陣//voidcalGLCM(IplImage*inputImg,VecGLCM&vecGLCM,intangle);voidcalGLCM(cv::Mat&inputImg,VecGLCM&vecGLCM,intangle);//計算特征值voidgetGLCMFeatures(VecGLCM&vecGLCM,GLCMFeatures&features);public://初始化灰度共?矩陣voidinitGLCM(VecGLCM&vecGLCM,intsize=16);//設(shè)置灰度劃分等級,默認(rèn)值為16voidsetGrayLevel(intgrayLevel){m_grayLevel=grayLevel;}//獲取灰度等級intgetGrayLevel()const{returnm_grayLevel;}private://計算?平灰度共?矩陣voidgetHorisonGLCM(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight);//計算垂直灰度共?矩陣voidgetVertialGLCM(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight);//計算45度灰度共?矩陣voidgetGLCM45(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight);//計算135度灰度共?矩陣voidgetGLCM135(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight);private:intm_grayLevel;//將灰度共?矩陣劃分為grayLevel個等級};12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576#include"GLCM.h"GLCM::GLCM():m_grayLevel(16){}GLCM::~GLCM(){}//==============================================================================//函數(shù)名稱:initGLCM//參數(shù)說明:vecGLCM,要進(jìn)?初始化的共?矩陣,為?維?陣//size,?維矩陣的??,必須與圖像劃分的灰度等級相等//函數(shù)功能:初始化?維矩陣//==============================================================================voidGLCM::initGLCM(VecGLCM&vecGLCM,intsize){assert(size==m_grayLevel);vecGLCM.resize(size);for(inti=0;i<size;++i){vecGLCM[i].resize(size);}for(inti=0;i<size;++i){for(intj=0;j<size;++j){vecGLCM[i][j]=0;}}}//==============================================================================//函數(shù)名稱:getHorisonGLCM//參數(shù)說明:src,要進(jìn)?處理的矩陣,源數(shù)據(jù)//////dst,輸出矩陣,計算后的矩陣,即要求的灰度共?矩陣imgWidth,圖像寬度imgHeight,圖像?度//函數(shù)功能:計算?平?向的灰度共?矩陣//==============================================================================voidGLCM::getHorisonGLCM(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight){intheight=imgHeight;intwidth=imgWidth;for(inti=0;i<height;++i){for(intj=0;j<width-1;++j){introws=src[i][j];intcols=src[i][j+1];dst[rows][cols]++;}}}//==============================================================================//函數(shù)名稱:getVertialGLCM//參數(shù)說明:src,要進(jìn)?處理的矩陣,源數(shù)據(jù)//參數(shù)說明:src,要進(jìn)?處理的矩陣,源數(shù)據(jù)//////dst,輸出矩陣,計算后的矩陣,即要求的灰度共?矩陣imgWidth,圖像寬度imgHeight,圖像?度//函數(shù)功能:計算垂直?向的灰度共?矩陣//==============================================================================voidGLCM::getVertialGLCM(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight){intheight=imgHeight;intwidth=imgWidth;for(inti=0;i<height-1;++i){for(intj=0;j<width;++j){introws=src[i][j];intcols=src[i+1][j];dst[rows][cols]++;}}}//==============================================================================//函數(shù)名稱:getGLCM45//參數(shù)說明:src,要進(jìn)?處理的矩陣,源數(shù)據(jù)//////dst,輸出矩陣,計算后的矩陣,即要求的灰度共?矩陣imgWidth,圖像寬度imgHeight,圖像?度//函數(shù)功能:計算45度的灰度共?矩陣//==============================================================================voidGLCM::getGLCM45(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight){intheight=imgHeight;intwidth=imgWidth;for(inti=0;i<height-1;++i){for(intj=0;j<width-1;++j){introws=src[i][j];intcols=src[i+1][j+1];dst[rows][cols]++;}}}//==============================================================================//函數(shù)名稱:getGLCM135//參數(shù)說明:src,要進(jìn)?處理的矩陣,源數(shù)據(jù)//////dst,輸出矩陣,計算后的矩陣,即要求的灰度共?矩陣imgWidth,圖像寬度imgHeight,圖像?度//函數(shù)功能:計算135度的灰度共?矩陣//==============================================================================voidGLCM::getGLCM135(VecGLCM&src,VecGLCM&dst,intimgWidth,intimgHeight){intheight=imgHeight;intwidth=imgWidth;for(inti=0;i<height-1;++i){for(intj=1;j<width;++j){introws=src[i][j];intcols=src[i+1][j-1];intcols=src[i+1][j-1];dst[rows][cols]++;}}}//==============================================================================//函數(shù)名稱:calGLCM//參數(shù)說明:inputImg,要進(jìn)?紋理特征計算的圖像,為灰度圖像////vecGLCM,輸出矩陣,根據(jù)灰度圖像計算出的灰度共?陣angle,灰度共?矩陣的?向,有?平、垂直、45度、135度四個?向//函數(shù)功能:計算灰度共?矩陣//==============================================================================//voidGLCM::calGLCM(IplImage*inputImg,VecGLCM&vecGLCM,intangle)//{//assert(inputImg->nChannels==1);//IplImage*src=NULL;//src=cvCreateImage(cvGetSize(inputImg),IPL_DEPTH_32S,inputImg->nChannels);//cvConvert(inputImg,src);////intheight=src->height;//intwidth=src->width;//intmaxGrayLevel=0;////尋找最?像素灰度最?值//for(inti=0;i<height;++i)//{//////////////////for(intj=0;j<width;++j){intgrayVal=cvGetReal2D(src,i,j);if(grayVal>maxGrayLevel){maxGrayLevel=grayVal;}}//}//endfori////++maxGrayLevel;//VecGLCMtempVec;////初始化動態(tài)數(shù)組//tempVec.resize(height);//for(inti=0;i<height;++i)//{//tempVec[i].resize(width);//}////if(maxGrayLevel>16)//若灰度級數(shù)?于16,則將圖像的灰度級縮??16級,減?灰度共?矩陣的??。//{//////////////////////////////////for(inti=0;i<height;++i){for(intj=0;j<width;++j){inttmpVal=cvGetReal2D(src,i,j);tmpVal/=m_grayLevel;tempVec[i][j]=tmpVal;}}if(angle==GLCM_HORIZATION)//?平?向getHorisonGLCM(tempVec,vecGLCM,width,height);if(angle==GLCM_VERTICAL)//垂直?向getVertialGLCM(tempVec,vecGLCM,width,height);if(angle==GLCM_ANGLE45)//45度灰度共?陣getGLCM45(tempVec,vecGLCM,width,height);if(angle==GLCM_ANGLE135)//135度灰度共?陣//if(angle==GLCM_ANGLE135)//135度灰度共?陣//getGLCM135(tempVec,vecGLCM,width,height);//}//else//若灰度級數(shù)?于16,則?成相應(yīng)的灰度共?矩陣//{//for(inti=0;i<height;++i)//{//for(intj=1;j<width;++j)//{//inttmpVal=cvGetReal2D(src,i,j);//tempVec[i][j]=tmpVal;//}}//////if(angle==GLCM_HORIZATION)//?平?向getHorisonGLCM(tempVec,vecGLCM,width,height);if(angle==GLCM_VERTICAL)//垂直?向//////getVertialGLCM(tempVec,vecGLCM,width,height);if(angle==GLCM_ANGLE45)//45度灰度共?陣getGLCM45(tempVec,vecGLCM,width,height);if(angle==GLCM_ANGLE135)//135度灰度共?陣getGLCM135(tempVec,vecGLCM,width,height);//////////}////cvReleaseImage(&src);//}voidGLCM::calGLCM(cv::Mat&inputImg,VecGLCM&vecGLCM,intangle){assert(inputImg.channels()==1);intheight=inputImg.rows;intwidth=inputImg.cols;intmaxGrayLevel=0;//尋找最?像素灰度最?值for(inti=0;i<height;++i){for(intj=0;j<width;++j){intgrayVal=inputImg.at<uchar>(i,j);if(grayVal>maxGrayLevel){maxGrayLevel=grayVal;}}}++maxGrayLevel;VecGLCMtempVec;tempVec.resize(height);for(inti=0;i<height;++i){tempVec[i].resize(width);}if(maxGrayLevel>16){for(inti=0;i<height;++i){for(intj=0;j<width;++j){inttmpVal=inputImg.at<uchar>(i,j);tmpVal/=m_grayLevel;tempVec[i][j]=tmpVal;}}if(angle==GLCM_HORIZATION){getHorisonGLCM(tempVec,vecGLCM,width,height);}elseif(angle==GLCM_VERTICAL){getVertialGLCM(tempVec,vecGLCM,width,height);}elseif(angle==GLCM_ANGLE45){getGLCM45(tempVec,vecGLCM,width,height);}elseif(angle==GLCM_ANGLE135){getGLCM135(tempVec,vecGLCM,width,height);}}else{for(inti=0;i<height;++i){for(intj=0;j<width;++j){inttmpVal=inputImg.at<uchar>(i,j);tempVec[i][j]=tmpVal;}}if(angle==GLCM_HORIZATION){getHorisonGLCM(tempVec,vecGLCM,width,height);}elseif(angle==GLCM_VERTICAL){getVertialGLCM(tempVec,vecGLCM,width,height);}elseif(angle==GLCM_ANGLE45){getGLCM45(tempVec,vecGLCM,width,height);}elseif(angle==GLCM_ANGLE135){getGLCM135(tempVec,vecGLCM,width,height);}}}//==============================================================================//函數(shù)名稱:getGLCMFeatures//參數(shù)說明:vecGLCM,輸?矩陣,灰度共?陣//features,灰度共?矩陣計算的特征值,主要包含了能量、熵、對?度、逆差分矩//函數(shù)功能:根據(jù)灰度共?矩陣計算的特征值//==============================================================================voidGLCM::getGLCMFeatures(VecGLCM&vecGLCM,GLCMFeatures&features){inttotal=0;for(inti=0;i<m_grayLevel;++i){for(intj=0;j<m_grayLevel;++j){total+=vecGLCM[i][j];//求所有圖像的灰度值的和}}vector<vector<double>>temp;temp.resize(m_grayLevel);for(inti=0;i<m_grayLevel;++i){temp[i].resize(m_grayLevel);}//歸?化for(inti=0;i<m_grayLevel;++i){for(intj=0;j<m_grayLevel;++j){temp[i][j]=(double)vecGLCM[i][j]/(double)total;}}for(inti=0;i<m_grayLevel;++i){for(intj=0;j<m_grayLevel;++j){features.energy+=temp[i][j]*temp[i][j];if(temp[i][j]>0)features.entropy-=temp[i][j]*log(temp[i][j]);//熵features.contrast+=(double)(i-j)*(double)(i-j)*temp[i][j];//對?度features.idMoment+=temp[i][j]/(1+(double)(i-j)*(double)(i-j));//逆差矩}}}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485

8687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142

143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199

20

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論