灰度共生矩陣VC++實現(xiàn)_第1頁
灰度共生矩陣VC++實現(xiàn)_第2頁
灰度共生矩陣VC++實現(xiàn)_第3頁
灰度共生矩陣VC++實現(xiàn)_第4頁
灰度共生矩陣VC++實現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、/ GrayShow.cpp: implementation of the CGrayShow class./ 灰灰灰灰灰灰灰灰灰灰 /#include "stdafx.h"#include "GrayShow.h"#include "math.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/CGrayShow:CGrayShow()PMatrixRD =

2、NULL; /45灰度度度度灰灰灰灰灰灰 PMatrixLD = NULL; /135灰度度度度灰灰灰灰灰灰 PMatrixV = NULL; /90灰度度度度灰灰灰灰灰灰 PMatrixH = NULL; /0灰度度度度灰灰灰灰灰灰/ ImageArray = NULL; /原原度原原原原原原/m_tOriPixelArray = NULL;/原原原原原原 /m_tResPixelArray = NULL;/參參原原原原/ m_dib = new CDib();distance = 5;FilterWindowWidth = 16;GrayLayerNum = 16; /初原初初初8個灰灰個

3、,可可可可 /這這灰灰灰灰這初GrayLayerNum×GrayLayerNumPMatrixH = new intGrayLayerNum*GrayLayerNum;PMatrixLD= new intGrayLayerNum*GrayLayerNum; PMatrixRD= new intGrayLayerNum*GrayLayerNum;PMatrixV = new intGrayLayerNum*GrayLayerNum;/ for(i=0; i<GrayLayerNum; i+)/ / PMatrixHi = new intGrayLayerNum;/ PMatrix

4、LDi= new intGrayLayerNum;/ PMatrixRDi= new intGrayLayerNum;/ PMatrixVi = new intGrayLayerNum;/ CGrayShow:CGrayShow()if(PMatrixRD)delete PMatrixRD ;if(PMatrixLD)delete PMatrixLD ; /135灰度度度度灰灰灰灰灰灰 if(PMatrixV)delete PMatrixV ; /90灰度度度度灰灰灰灰灰灰 if(PMatrixH)delete PMatrixH;/功功:裝裝原原 /參原:FilePathName原原圖圖圖圖圖

5、 / void CGrayShow:LoadImage(CString &FilePathName)/ / / / int i,j;/ /檢檢檢檢初檢,不初檢不不不不不不 / if(m_tOriPixelArray !=NULL)/ / for(i=0; i<ImageHeight; i+)/ / delete m_tOriPixelArrayi;/ delete m_tResPixelArrayi;/ delete ImageArrayi;/ / / m_dib->Open(FilePathName);/ ImageWidth = m_dib->GetWidth()

6、;/ ImageHeight = m_dib->GetHeight();/ BYTE *colorTable;/ colorTable = (BYTE *)m_dib->m_pDibBits;/ int byteBitCount = m_dib->GetBiBitCount()/8;/ m_tOriPixelArray = new RGBQUAD*ImageHeight;/ m_tResPixelArray = new RGBQUAD*ImageHeight;/ ImageArray = new BYTE*ImageHeight;/ for(int l=0 ; l<Im

7、ageHeight; l+)/ / m_tOriPixelArrayl = new RGBQUADImageWidth;/ m_tResPixelArrayl = new RGBQUADImageWidth;/ ImageArrayl = new BYTEImageWidth;/ / int count = 0;/ for(i=ImageHeight-1; i>=0; i-)/ / for(j=0; j<ImageWidth; j+)/ / m_tOriPixelArrayij.rgbBlue =colorTablecount+;/ m_tOriPixelArrayij.rgbGr

8、een=colorTablecount+;/ m_tOriPixelArrayij.rgbRed =colorTablecount+;/ m_tOriPixelArrayij.rgbReserved = 0;/ m_tResPixelArrayij=m_tOriPixelArrayij;/ ImageArrayij = (BYTE)(unsigned int)m_tOriPixelArrayij.rgbBlue/ +(unsigned int)m_tOriPixelArrayij.rgbGreen/ +(unsigned int)m_tOriPixelArrayij.rgbRed)/3);/

9、count += byteBitCount-3;/ / count += (4-(ImageWidth*byteBitCount)%4)%4;/ /函原功功:計灰計計計計 /參原:FeatureEnergy功能 / FeatureEntropy熵 / FeatureInertiaQuadrature慣慣灰 / FeatureCorrelation相相 / FeatureLocalCalm局局局局 / pMatrix灰灰灰灰 / dim灰灰灰灰度共原 /void CGrayShow:ComputeFeature(double &FeatureEnergy, double &Fea

10、tureEntropy,double &FeatureInertiaQuadrature, double &FeatureCorrelation, double &FeatureLocalCalm, int* pMatrix, int dim)int i,j;double *pdMatrix;pdMatrix = new doubledim*dim;int total = 0;for(i=0; i<dim; i+)for(j=0; j<dim; j+)total += pMatrixi*dim+j;for(i=0; i<dim; i+)for(j=0;

11、 j<dim; j+)pdMatrixi*dim + j = (double)pMatrixi*dim + j/(double)total;FeatureEnergy = 0.0;FeatureEntropy = 0.0;FeatureInertiaQuadrature = 0.0;FeatureLocalCalm = 0.0; /計灰功能、熵、慣慣灰、局局局局 for(i=0; i<dim; i+)for(j=0; j<dim; j+) /功能 FeatureEnergy += pdMatrixi*dim+j*pdMatrixi*dim+j; /熵 if(pdMatrixi

12、*dim+j>1e-12)FeatureEntropy -= pdMatrixi*dim+j*log(pdMatrixi*dim+j); /慣慣灰 FeatureInertiaQuadrature += (double)(i-j)*(double)(i-j)*pdMatrixi*dim+j; /局局局局 FeatureLocalCalm += pdMatrixi*dim+j/(1+(double)(i-j)*(double)(i-j); /計灰ux double ux = 0.0;double localtotal = 0.0;for(i=0; i<dim; i+)localtot

13、al = 0.0;for(j=0; j<dim; j+)localtotal += pdMatrixi*dim+j;ux += (double)i * localtotal; /計灰uy double uy = 0.0;for(j=0; j<dim; j+)localtotal = 0.0;for(i=0; i<dim; i+)localtotal += pdMatrixi*dim+j;uy += (double)j * localtotal; /計灰sigmax double sigmax = 0.0;for(i=0; i<dim; i+)localtotal = 0

14、.0;for(j=0; j<dim; j+)localtotal += pdMatrixi*dim+j;sigmax += (double)(i-ux) * (double)(i-ux) * localtotal; /計灰sigmay double sigmay = 0.0;for(j=0; j<dim; j+) localtotal = 0.0;for(i=0; i<dim; i+)localtotal += pdMatrixi*dim+j;sigmay += (double)(j-uy) * (double)(j-uy) * localtotal;/計灰相相 Featur

15、eCorrelation = 0.0;for(i=0; i<dim; i+)for(j=0; j<dim; j+)FeatureCorrelation += (double)(i-ux) * (double)(j-uy) * pdMatrixi*dim+j;FeatureCorrelation /= sigmax;FeatureCorrelation /= sigmay;delete pdMatrix;pdMatrix = NULL;/功功:計灰灰灰灰灰 /參原:LocalImage用用計灰度局局計計用用原原 / window局局計計用用局灰 /void CGrayShow:Com

16、puteMatrix(LPBYTE LocalImage,const WORD width,/local image 度局 const WORD height,/local image 度的 int i_count, /rowint j_count, /col int window )memset(PMatrixH,0,GrayLayerNum*GrayLayerNum*sizeof(int);memset(PMatrixLD,0,GrayLayerNum*GrayLayerNum*sizeof(int); memset(PMatrixRD,0,GrayLayerNum*GrayLayerNu

17、m*sizeof(int);memset(PMatrixV,0,GrayLayerNum*GrayLayerNum*sizeof(int);int i,j;/計灰0灰度灰灰灰灰灰 for( i=i_count; i<i_count+window; i+)for( j=j_count; j<j_count+window-distance; j+)LPBYTE lptemp = LocalImage + i*width*3 + j*3; BYTE gray_I_J =BYTE(*(lptemp)*0.114 + *(lptemp+1)*0.587+*(lptemp+2)*.299)/(

18、256/GrayLayerNum); LPBYTE lpdistance = lptemp +distance*3;BYTE gray_I_Distance = BYTE(*(lpdistance)*0.114+*(lpdistance+1)*0.587+*(lpdistance+2)*0.299)/(256/GrayLayerNum);PMatrixHgray_I_J*GrayLayerNum + gray_I_Distance += 1; PMatrixHgray_I_Distance*GrayLayerNum + gray_I_J += 1;/計灰90灰度灰灰灰灰灰 for(i=i_co

19、unt; i<i_count+window-distance; i+)for(j=j_count; j<j_count+window; j+) LPBYTE lptemp = LocalImage + i*width*3 + j*3;BYTE gray_I_J =BYTE(*(lptemp)*0.114 + *(lptemp+1)*0.587+*(lptemp+2)*.299)/(256/GrayLayerNum);LPBYTE lpdistance = /*lptemp +distance*3*/LocalImage + (i+distance)*width*3 + j*3;BY

20、TE gray_I_Distance = BYTE(*(lpdistance)*0.114+*(lpdistance+1)*0.587+*(lpdistance+2)*0.299)/(256/GrayLayerNum); PMatrixVgray_I_J*GrayLayerNum + gray_I_Distance += 1;PMatrixVgray_I_Distance*gray_I_J + gray_I_J += 1;/計灰135灰度灰灰灰灰灰 for(i=i_count; i<i_count+window-distance; i+)for(j=j_count; j<j_cou

21、nt+window-distance; j+)int newi, newj;newi = i+distance;newj = j+distance;LPBYTE lptemp = LocalImage + i*width*3 + j*3;BYTE gray_I_J =BYTE(*(lptemp)*0.114 + *(lptemp+1)*0.587+*(lptemp+2)*.299)/(256/GrayLayerNum);LPBYTE lpdistance = /*lptemp +distance*3*/LocalImage + (newi)*width*3 + newj*3;BYTE gray

22、_I_Distance = BYTE(*(lpdistance)*0.114+*(lpdistance+1)*0.587+*(lpdistance+2)*0.299)/(256/GrayLayerNum); PMatrixLDgray_I_J*GrayLayerNum + gray_I_Distance += 1;PMatrixLDgray_I_Distance*gray_I_J + gray_I_J += 1; /計灰45灰度灰灰灰灰灰 for(i=i_count+distance; i<i_count+window; i+) for(j=j_count; j<j_count+w

23、indow-distance; j+) int newi, newj;newi = i-distance;newj = j+distance;LPBYTE lptemp = LocalImage + i*width*3 + j*3;BYTE gray_I_J =BYTE(*(lptemp)*0.114 + *(lptemp+1)*0.587+*(lptemp+2)*.299)/(256/GrayLayerNum);LPBYTE lpdistance = /*lptemp +distance*3*/LocalImage + (newi)*width*3 + newj*3;BYTE gray_I_Distance = BYTE(*(lpdistance)*0.114+*(lpdistance+1)*0.587+*(lpdistance+2)*0.299)/(256/GrayLayerNum);PMatrixRDgr

溫馨提示

  • 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

提交評論