圖像 銳化處理代碼_第1頁
圖像 銳化處理代碼_第2頁
圖像 銳化處理代碼_第3頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VisualC++實現(xiàn)數(shù)字圖像增強(qiáng)處理圖像處理/OpenCV2012-12-1017:08266評論(1)前言果這階段處理不好,后面的工作根本無法展開。一、圖像的直方圖圖像直方圖是圖像處理中一種十分重要的圖像分析工具"ZFT"的(2001年在天極網(wǎng)上發(fā)表的一篇VC實現(xiàn)數(shù)字圖像處理的文章):[cpp]viewplaincopyprint?11//////////////////////////////////直方圖對話框構(gòu)造函數(shù);ZFT::ZFT(CWnd*pParent/*=NULL*/):CDialog(ZFT::IDD,為定義的用來顯示直方圖的對話框類;4.{5.Width=Height=0;//對話框初始化階段設(shè)置圖像的寬和高為"0";6.}7////////////////////////對話框重畫函數(shù);8.voidZFT::OnPaint()9.{CRect矩形區(qū)域?qū)ο?;CWnd得到圖片框的窗口指針;pWnd=GetDlgItem(IDC_Graphic);//ZFT對話框內(nèi)的"Frame"控件的指針;file://(IDC_Graphic為放置在對話框上的一個"Picture""Frame")。pWnd->GetClientRect(&rect);//"Frame"控件窗口的"視"區(qū)域;inti;CPaintDC"Frame"控件的設(shè)備上下文;file://、y軸;dc.MoveTo(0,rect.Height());dc.LineTo(rect.Width(),rect.Height());dc.MoveTo(0,rect.Height());dc.LineTo(0,0);file://是的內(nèi)部數(shù)組變量,存放的是圖像各個灰度級出現(xiàn)的概率;該數(shù)組的各個分量在 示具體圖像的直方圖時設(shè)置;根據(jù)圖像上的各個灰度級出現(xiàn)出現(xiàn)概率的直線構(gòu)成了圖像的直方圖;24. {25. dc.MoveTo(i+1,rect.Height());26.dc.LineTo(i+1,(rect.Height()-rect.Height()*num[i]*30));27. num"30"是為了放大個灰度級上對應(yīng)的出現(xiàn)概率直線,增強(qiáng)顯示效果;28. }29. }30. ////////////////////////////////////////////////////////voidZFT::OnMouseMove(UINTnFlags,CPointpoint){//OnMouseMove函數(shù)處理鼠標(biāo)消息,顯示當(dāng)前鼠標(biāo)所在直方圖上的灰度值等信息;CWnd定義兩個窗口對象;CPoint定義個一個點對象;point1=point;//存放當(dāng)前鼠標(biāo)的位置信息;CRect矩形對象;CStringstring;字符串對象;pWnd=GetDlgItem(IDC_Graphic);//得到顯示直方圖的框架窗口對象指針;框?qū)ο蟠翱诘闹羔?;pWnd->GetWindowRect(&rect);//獲取pWnd窗口對象窗口區(qū)域位置;file://屏幕坐標(biāo)轉(zhuǎn)換為客戶區(qū)坐標(biāo);ScreenToClient(&rect);file://判斷當(dāng)前鼠標(biāo)是否指在直方圖內(nèi);if(rect.PtInRect(point))45. {intx=point1.x-rect.left;當(dāng)前鼠標(biāo)位置減去區(qū)域的起始位置恰好為當(dāng)前鼠標(biāo)所指位置所表示的灰度級;string.Format("%d",x);顯示當(dāng)前位置對應(yīng)的圖像的灰度級;pWndText->SetWindowText((LPCTSTR)string);51. }52. CDialog::OnMouseMove(nFlags,point);53. }54. ////////////////////////////////////////voidCDibView::OnImagehorgm()57.{58.CDibDoc*pDoc=GetDocument();59.HDIBhdib;60.hdib=pDoc->GetHDIB();57.{58.CDibDoc*pDoc=GetDocument();59.HDIBhdib;60.hdib=pDoc->GetHDIB();61.BITMAPINFOHEADER位圖信息頭結(jié)構(gòu)指針;62. BYTE指向位圖像素灰度值的指針;63.lpDIBHdr=(BITMAPINFOHEADER*)GlobalLock(hdib);//得到圖像的位圖頭信息64.lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);65. file://獲取圖像像素值66.ZFTdialog;//直方圖對話框模板對象;67.inti,j;68.intwImgWidth=lpDIBHdr->biWidth;69.intwImgHeight=lpDIBHdr->biHeight;file://a[]數(shù)組用來存放各個灰度級出現(xiàn)的概率;floata[256];72. for(i=0;i<256;i++)//初始化數(shù)組;73. {74. a[i]=0;75. }file://統(tǒng)計各個灰度級出現(xiàn)的次數(shù);for(i=0;i {for(j=0;j {a[*(lpDIBBits+WIDTHBYTES(wImgWidth*8)*i+j)]++;80. }81. 統(tǒng)計各個灰度級出現(xiàn)的概率;82. for(i=0;i<256;i++)83. {84. a[i]=a[i]/(wImgHeight*wImgWidth);//得到每個灰度級的出現(xiàn)概率;85.memcpy(dialog.num,a,256*sizeof(float));86. }87. }88. dialog.DoModal();//顯示直方圖對話框;89. }return;91. }圖一上圖為LENA的原始圖像和其對應(yīng)的直方圖,在圖中的135135灰度級上,在低灰度級上圖像的像素數(shù)幾乎為零。二、圖像增強(qiáng)影響系統(tǒng)圖像清晰程度的因素很多中;由攝像頭)獲得的圖像經(jīng)過A/D(數(shù)/模轉(zhuǎn)換,該功能在圖像系統(tǒng)中由數(shù)字采集卡來實現(xiàn)轉(zhuǎn)換、線路傳送都會產(chǎn)生噪聲污染等等。因此圖像質(zhì)量不可避免的降低了DCT變換等的系數(shù),灰度變換簡單的說灰度變換就是指對圖像上各個像素點的灰度值x按某個函數(shù)變換到例如為了提高圖像的清晰度,需要將圖像的灰度級整個范圍或其中某一段擴(kuò)展或壓縮到,B);需要顯示出圖像的細(xì)節(jié)部分等都要求采用灰度變換方法。灰度變換有時又被稱為圖像的對比度增強(qiáng)或?qū)Ρ榷壤旒俣ㄝ斎雸D像中的一個像素的灰度級為經(jīng)過T(Z)函數(shù)變換后輸出圖像對應(yīng)的灰度級為Z 其中要求Z和Z 都要在圖像的灰度范圍之內(nèi)根據(jù)T()形式可以將灰度變換分為線性變換和非線性變換具體應(yīng)用中采用何種需要根據(jù)變換的要求而定。的取值動態(tài)范圍。若像素點的原灰度為R,變換后的灰度為S,需要注意的是RS是歸一化后的灰度值,其灰度變換函數(shù)T()為:是第j是圖像中j是圖像中灰度級的S效果圖:[cpp]viewplaincopyprint?voidCDibView::OnZftJh()2.{CClientDCHDC獲取當(dāng)前設(shè)備上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);CDibDoc*pDoc=GetDocument();HDIBhdib;hdib=pDoc->GetHDIB();BITMAPINFOHEADER位圖信息頭結(jié)構(gòu)指針;BYTE指向位圖像素灰度值的指針;lpDIBHdr=(BITMAPINFOHEADER*)GlobalLock(hdib);//得到圖像的位圖頭信息lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);file://獲取圖像像素值14. floatp[256],p1[256],num[256];15. inti,j,k;16. for(i=0;i<256;i++)//;17. {num[i]=0.0f;18. p[i]=0.0f;19. p1[i]=0.0f;20. }file://num[];intHeight=lpDIBHdr->biHeight;intWidth=lpDIBHdr->biWidth;for(i=0;i for(j=30;j {num[*(lpDIBBits+WIDTHBYTES(Width*8)*i+j)]++;26. }27. file://p[]存放圖像各個灰度級的出現(xiàn)概率;28. for(i=0;i<256;i++)29. {30. p[i]=num[i]/(Width*Height);31. }32. 存放各個灰度級之前的概率和,用于直方圖變換;33. for(i=0;i<256;i++)34. {35. for(k=0;k<=i;k++)36. p1[i]+=p[k];37. }38. 直方圖變換;39.for(i=0;ifor(j=30;j{*(lpDIBBits+WIDTHBYTES(Width*8)*i+j)=(BYTE)(p1[*(lpDIBBits+WIDTHBYTES(Width*8)*i+j)]*255+0.5);40. }41.StretchDIBits(hDC,0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight,0,0,42.43.lpDIBBits,(LPBITMAPINFO)lpDIBHdr,45.46. }

SRCCOPY);//顯示圖像;圖二后的LENA的圖像直方圖分布更均勻了,在每個灰度級上圖像都有像素點。但是直方圖均衡化存在著兩個缺點:變換后圖像的灰度級減少,某些細(xì)節(jié)消失;某些圖像,如直方圖有高峰,經(jīng)處理后對比度不自然的過分增強(qiáng)。為此M.KamelLianGuan等人從圖像相鄰像素一般高度相關(guān)這一事實出發(fā),將灰度圖像平滑n*n"0"的像素點擴(kuò)展圖像的邊緣。下面給出了采用加權(quán)均值濾波的圖像平滑函數(shù)代碼和效果圖:[cpp]viewplaincopyprint?1.1.void2.{CDibView::OnImagePh()CClientDCHDC獲取當(dāng)前設(shè)備上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);HANDLEdata1handle;LPBITMAPINFOHEADERlpBi;CDibDoc*pDoc=GetDocument();HDIBhdib;unsignedchar*hData;unsignedchar*data;hdib=pDoc->GetHDIB();14.lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);15.hData=(unsignedchar*)FindDIBBits((LPSTR)lpBi);16. 17.data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);18.data=(unsignedchar*)GlobalLock((HGLOBAL)data1handle);AfxGetApp()->BeginWaitCursor();inti,j,s,t,ms=1;intsum=0,sumw=0;22.intmask[3][3]={{1,1,1},{1,2,1},{1,1,1}};//定義3x3加權(quán)平滑模板;23.for(i=0;ibiHeight;i++)24.for(j=0;jbiWidth;j++)25.{26.sumw=0;sum=0;27.28.

for(s=(-ms);s<=ms;s++)for(t=(-ms);t<=ms;t++) ((j+t)>=0)&&((i+s)biHeight)&&((j+t)biWidth))29. {30. sumw+=mask[1+s][1+t];31.sum+=*(hData+(i+s)*WIDTHBYTES(lpBi->biWidth*8)+(j+t))*mask[1+s][1+t];32. }if(sumw==0)sumw=1;sum/=sumw;35. if(sum>255)sum=255;36. 37.*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j)=sum;38. }39. for(j=0;jbiHeight;j++)40.for(i=0;ibiWidth;i++) *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);41.StretchDIBits(hDC,0,0,lpBi->biWidth,lpBi->biHeight,0,0,42.lpBi->biWidth,lpBi->biHeight,43.hData,(LPBITMAPINFO)lpBi,44.DIB_RGB_COLORS,45.SRCCOPY);//顯示圖像;46.}圖三晰又能消除噪聲的方法,其算法如圖四所示:圖像銳化

圖四圖像平滑模板(如微分運算為了要把圖像中間任何方向伸展的的邊緣和輪廓線變得清晰算是各向同性的??梢宰C明偏導(dǎo)平方和的運算是各向同性的,既:的基礎(chǔ)上開方得到的。圖像點的梯度值:較,如果大于閾值,該像素點的灰度用梯度值表示,否則用一個固定的灰度值表示。我們在對圖像增強(qiáng)的過程中,采用的是一種簡單的高頻濾波增強(qiáng)方法:式中f,g表示對圖像f進(jìn)行二可以用下面的模板來近似。在具體實現(xiàn)時,上述模板H這個系數(shù)的選擇也很重要,太大了2-8之間往往可以達(dá)到比較滿意的效果。下面給出kτ4的情況下的實現(xiàn)代碼和效果圖:[cpp]viewplaincopyprint?voidCDibView::OnMenuitem32785()2.{CClientDCHDChDC=pDC.GetSafeHdc();//獲取當(dāng)前設(shè)備上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);CDibDoc*pDoc=GetDocument();HDIBhdib;hdib=pDoc->GetHDIB();BITMAPINFOHEADER位圖信息頭結(jié)構(gòu)指針;BYTE指向位圖像素灰度值的指針;lpDIBHdr=(BITMAPINFOHEADER*)GlobalLock(hdib);//得到圖像的位圖頭信息lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//獲取圖像像素值BYTE*pData1;13. staticinta[3][3]={{1,4,1},{4,-20,4},{1,4,1}};//拉普拉斯算子模板;intm,n,i,j,sum;intWidth=lpDIBHdr->biWidth;intH

溫馨提示

  • 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

提交評論