數(shù)字圖像處理課程設(shè)計(jì)報(bào)告直方圖均衡化_第1頁
數(shù)字圖像處理課程設(shè)計(jì)報(bào)告直方圖均衡化_第2頁
數(shù)字圖像處理課程設(shè)計(jì)報(bào)告直方圖均衡化_第3頁
數(shù)字圖像處理課程設(shè)計(jì)報(bào)告直方圖均衡化_第4頁
數(shù)字圖像處理課程設(shè)計(jì)報(bào)告直方圖均衡化_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、設(shè)計(jì)題目:直方圖均衡化1、直方圖的理論基礎(chǔ):(1)直方圖概念:灰度直方圖表示圖像中每種灰度出現(xiàn)的頻率。(2)直方圖的作用: 反映一幅圖像的灰度分布特性(3)直方圖的計(jì)算:式中:nk為圖像中出現(xiàn)rk級灰度的像素?cái)?shù),n是圖像像素總數(shù),而nk/n即為頻數(shù)。2、設(shè)計(jì)目的: 產(chǎn)生一幅灰度級分布具有均勻概率密度的圖像,擴(kuò)展像素取值的動態(tài)范圍,達(dá)到了圖象增強(qiáng)的目的。3、直方圖均衡化的效果 : 1)變換后直方圖趨向平坦,灰級減少,灰度合并。 2)原始象含有象素?cái)?shù)多的幾個灰級間隔被拉大了,壓縮的只是象素?cái)?shù)少的幾個灰度級,實(shí)際視覺能夠接收的信息量大大地增強(qiáng)了,增加了圖象的反差。同時(shí),也增加了圖象的可視粒度。 4、

2、離散情況下的直方圖均衡化的算法:A、列出原始圖像的灰度級 B、統(tǒng)計(jì)各灰度級的像素?cái)?shù)目C、計(jì)算原始圖像直方圖各灰度級的頻數(shù)D、計(jì)算累積分布函數(shù)F、應(yīng)用以下公式計(jì)算映射后的輸出圖像的灰度級,P為輸出圖像灰度級的個數(shù),其中INT為取整符號:G、用的映射關(guān)系修改原始圖像的灰度級,從而獲得直方圖近似為均勻分布的輸出圖像。3、源程序代碼 / cqxhistView.cpp : implementation of the CCqxhistView class#include "stdafx.h"#include "cqxhist.h"#include "cq

3、xhistDoc.h"#include "cqxhistView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CCqxhistViewIMPLEMENT_DYNCREATE(CCqxhistView, CView)BEGIN_MESSAGE_MAP(CCqxhistView, CView)/AFX_MSG_MAP(CCqxhistView)ON_COMMAND(ID_OPEN_IMAGE, OnOpenImage)ON_COMM

4、AND(ID_HIST_IMAGE, OnHistImage)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_, CView:On)ON_COMMAND(ID_, CView:On)ON_COMMAND(ID_, CView:On)END_MESSAGE_MAP()/ CCqxhistView construction/destructionCCqxhistView:CCqxhistView()/ TODO: add construction code hereCCqxhistView:CCqxhistView()BOOL CCqxh

5、istView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CCqxhistView drawingvoid CCqxhistView:OnDraw(CDC* pDC)CCqxhistDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native

6、data hereif(m_dib.m_bLoaded=true) /判斷是否加載圖像/獲取圖像寬和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();/ 顯示圖像(具體的參數(shù)見CDIB類的該函數(shù)說明)m_dib.ShowDIB(pDC,10,10,nw,nh,m_dib.m_pDIBData,m_dib.m_pBMI);m_dib.ShowDIB(pDC,400,10,nw,nh,m_dib.m_pDumpDIBData,m_dib.m_pBMI);if(m_bHist=true) /繪制原圖像的直方圖CString str;int

7、 nh=m_dib.GetDIBHeight();int i;/畫坐標(biāo)軸/ 繪制坐標(biāo)軸pDC->MoveTo(410,nh+20); /(410,nh+20 )是直方圖的左上角坐標(biāo) / 垂直軸pDC->LineTo(410,nh+200);/(410,nh+200 )是直方圖的左下角坐標(biāo) / 水平軸pDC->LineTo(710,nh+200);/(710,nh+200 )是直方圖的右下角坐標(biāo) / 寫X軸刻度值str.Format("0");pDC->TextOut(410, nh+200+10, str);str.Format("50&q

8、uot;);pDC->TextOut(460, nh+200+10, str);str.Format("100");pDC->TextOut(510, nh+200+10, str);str.Format("150");pDC->TextOut(560, nh+200+10, str);str.Format("200");pDC->TextOut(610, nh+200+10, str);str.Format("255");pDC->TextOut(665, nh+200+10, st

9、r);/ 繪制X軸刻度for ( i = 0; i < 256; i += 25)if (i & 1) = 0)/ 10的倍數(shù)pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);else/ 10的倍數(shù)pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);/ 繪制X軸箭頭pDC->MoveTo(705,nh+200-5);pDC->LineTo(710,nh+200);pDC->LineTo(705,nh+2

10、00+5);/ 繪制y軸箭頭pDC->MoveTo(410,nh+20);pDC->LineTo(405,nh+20+5);pDC->MoveTo(410,nh+20);pDC->LineTo(415,nh+20+5);int max=0;for(i=0;i<256;i+)if(m_yuani>max)max=m_yuani;for(i=0;i<256;i+)pDC->MoveTo(410+i,nh+200);pDC->LineTo(410+i,nh+200-(m_yuani*160/max);if(m_bHist=true)/繪畫直方圖C

11、String str;int nh=m_dib.GetDIBHeight();int i;/畫坐標(biāo)軸/ 繪制坐標(biāo)軸pDC->MoveTo(10,nh+20); /(10,nh+20 )是直方圖的左上角坐標(biāo) / 垂直軸pDC->LineTo(10,nh+200);/(10,nh+200 )是直方圖的左下角坐標(biāo) / 水平軸pDC->LineTo(310,nh+200);/(310,nh+200 )是直方圖的右下角坐標(biāo) / 寫X軸刻度值str.Format("0");pDC->TextOut(10, nh+200+10, str);str.Format(&

12、quot;50");pDC->TextOut(60, nh+200+10, str);str.Format("100");pDC->TextOut(110, nh+200+10, str);str.Format("150");pDC->TextOut(160, nh+200+10, str);str.Format("200");pDC->TextOut(210, nh+200+10, str);str.Format("255");pDC->TextOut(265, nh+20

13、0+10, str);/ 繪制X軸刻度for ( i = 0; i < 256; i += 25)if (i & 1) = 0)/ 10的倍數(shù)pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);else/ 10的倍數(shù)pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);/ 繪制X軸箭頭pDC->MoveTo(305,nh+200-5);pDC->LineTo(310,nh+200);pDC->LineTo(

14、305,nh+200+5);/ 繪制y軸箭頭pDC->MoveTo(10,nh+20);pDC->LineTo(5,nh+20+5);pDC->MoveTo(10,nh+20);pDC->LineTo(15,nh+20+5);int max=0;for(i=0;i<256;i+)if(m_histi>max)max=m_histi;for(i=0;i<256;i+)pDC->MoveTo(10+i,nh+200);pDC->LineTo(10+i,nh+200-(m_histi*160/max);/ CCqxhistView printin

15、gBOOL CCqxhistView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CCqxhistView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CCqxhistView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO

16、: add cleanup after printing/ CCqxhistView diagnostics#ifdef _DEBUGvoid CCqxhistView:AssertValid() constCView:AssertValid();void CCqxhistView:Dump(CDumpContext& dc) constCView:Dump(dc);CCqxhistDoc* CCqxhistView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CL

17、ASS(CCqxhistDoc);return (CCqxhistDoc*)m_pDocument;#endif /_DEBUG/ CCqxhistView message handlersvoid CCqxhistView:OnOpenImage() / TODO: Add your command handler code here/ TODO: Add your command handler code herestatic char szFilter="BMP文件(*.bmp)|*.bmp|" /定義過濾文件的類型 C dlg(TRUE,"bmp"

18、;,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);/定義文件對話框?qū)ο?CString ;int ret=dlg.DoModal(); /運(yùn)行打開文件對方框if(ret=IDOK)(); /獲取所選擇圖像的路徑 m_dib.LoadFrom); /加載圖像 if(!m_dib.m_bLoaded) /判斷是否加載圖像成功AfxMessageBox("圖像打不開"); return;for(int i=0;i<256;i+) /初始化直方圖數(shù)組 m_histi=0; m_yuani=0; m_bHist=fals

19、e;int nw=m_dib.GetDIBWidth(); int nh=m_dib.GetDIBHeight(); for(int j=0;j<nh;j+)for(int i=0;i<nw;i+) BYTE temp=m_dib.m_pdataj*nw+i; m_yuantemp+;Invalidate(1);/刷新屏幕void CCqxhistView:OnHistImage() / TODO: Add your command handler code here/功能:實(shí)現(xiàn)直方圖均衡化/判斷圖像是否打開,沒打開,則彈出提示框并退出函數(shù)if(!m_dib.m_bLoaded) AfxMessageBox("圖像還打開,請先打開圖像!");return; /獲取圖像寬和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j,k; int count256=0;/定義一個數(shù)組,用于存放灰度級個數(shù) float p256;/定義一個數(shù)組,用于存放灰度級出現(xiàn)頻率/對圖像進(jìn)行直方圖

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論