當前位置:編程學習大全網 - 編程語言 - 用C語言編寫灰度圖像直方圖變換增強

用C語言編寫灰度圖像直方圖變換增強

參考壹下這個程序:

#define IMAGEWIDTH 80

#define IMAGEHEIGHT 80

void Histogram(unsigned char *pImage,int nWidth,int nHeight,float fHisto[256]);

void Enhance(unsigned char *pImage,unsigned char *pImage1,int nWidth,int nHeight,float fHisto[256],float fHisto1[256]);

unsigned char dbImage[IMAGEWIDTH*IMAGEHEIGHT];

unsigned char dbTargetImage[IMAGEWIDTH*IMAGEHEIGHT];

float fHistogram[256],fHistogram1[256];

unsigned char lut[256];

/* 直方圖統計程序 */

int main()

{

... //準備壹幅灰度圖片到dbImage

Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram); //做直方圖統計

Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1); //直方圖增強輸出到dbTargetImage

...//完成後顯示

}

void Histogram(unsigned char *pImage,int nWidth,int nHeight,float fHisto[256])

{

int i,j;

unsigned int uWork;

unsigned char *pWork;

for ( i=0;i<256;i++ ) fHisto[i]=0.0f;

pWork=pImage;

for ( i=0;i<nHeight;i++ )

{

for ( j=0;j<nWidth;j++,pWork++ )

{

uWork=(unsigned int)(*pWork);

fHisto[uWork]++;

}

}

uWork=nWidth*nHeight;

for ( i=0;i<256;i++ )

{

fHisto[i]/=uWork;

fHisto[i]*=100;

}

}

void Enhance(unsigned char *pImage,unsigned char *pImage1,int nWidth,int nHeight,float fHisto[256],float fHisto1[256])

{

int i,j;

unsigned int uWork;

unsigned char *pWork,*pWork1;

for ( i=0;i<256;i++ )

fHisto1[i]=fHisto[i]/100;

for ( i=1;i<256;i++ )

fHisto1[i]+=fHisto1[i-1];

for ( i=0;i<256;i++ )

lut[i]=fHisto1[i]*256;

for ( i=0;i<256;i++ )

if ( lut[i]>=256 )

lut[i]=255;

pWork=pImage; pWork1=pImage1;

for ( i=0;i<nHeight;i++ )

for ( j=0;j<nWidth;j++,pWork++,pWork1++ )

(*pWork1)=lut[(*pWork)];

}

  • 上一篇:電動叉車基本知識
  • 下一篇:JAVA編程判斷撲克牌大小
  • copyright 2024編程學習大全網