對圖像進(jìn)行均值濾波課程設(shè)計_第1頁
對圖像進(jìn)行均值濾波課程設(shè)計_第2頁
對圖像進(jìn)行均值濾波課程設(shè)計_第3頁
對圖像進(jìn)行均值濾波課程設(shè)計_第4頁
對圖像進(jìn)行均值濾波課程設(shè)計_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學(xué)院圖形圖像處理與應(yīng)用題 目 對圖像進(jìn)行均值濾波 院(系)專業(yè)級班學(xué) 號 姓 名 指導(dǎo)教師 成 績 完成時間 2012 年 06 月均 值 濾 波均值濾波的原理 均值濾波是典型的線性濾波算法,它是指在圖像上對目標(biāo)像素給一個模板,該模板包括了其周圍的臨近像素(以目標(biāo)象素為中心的周圍8個象素,構(gòu)成一個濾波模板,即去掉目標(biāo)象素本身)。再用模板中的全體像素的平均值來代替原來像素值。均值濾波也稱為線性濾波,其采用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當(dāng)前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當(dāng)

2、前像素點(x,y),作為處理后圖像在該點上的灰度個g(x,y),即個g(x,y)=1/m f(x,y) m為該模板中包含當(dāng)前像素在內(nèi)的像素總個數(shù)。均值濾波的實現(xiàn)算法均值濾波將每個像素點的灰度值設(shè)置為以該點為中心的鄰域窗口內(nèi)的所有像素灰度值的平均值,以實現(xiàn)像素的平滑,達(dá)到圖像去噪的目的。設(shè)輸入圖像信號為f(x,y),去噪處理后的輸出圖像為g(x,y),則有g(shù)(x,y)= | f(x,y)- ¬u (x,y)| 。 通過上式可以達(dá)到消除信號噪聲的目的,但對于其中的每一個灰度值來說,都需要按照式求取以該點中心的鄰域窗口內(nèi)所有像素的平均值,對長度為(2n+1)的信號來說,需要進(jìn)行(2n+1)

3、次加法、一次乘法、一次除法。所以說,均值計算占用了均值濾波處理的大量時間費用。均值濾波應(yīng)用均值濾波就是在一定的時間內(nèi)對輸入信號進(jìn)行連續(xù)的采樣然后求出幾次采樣值的平均值。設(shè)x0xi是采樣值,yk是對采樣進(jìn)行平均值濾波的輸出值,其關(guān)系如下:在工程應(yīng)用中,均值濾波對于周期性的干擾有很好的抑制作用,另外,均值濾波對于熱噪聲產(chǎn)生的干擾也有很好的抑制作用。n的取值取決n系統(tǒng)的參數(shù),如果系統(tǒng)對輸入的靈敏度要求很高,則n的取值應(yīng)比較小,如果系統(tǒng)的輸入變化速度不快,系統(tǒng)對輸入的靈敏性要求也不是很高,為了抑制干擾,提高輸入的精度,可以將n取得比較大。均值濾波器均值濾波器也是平滑線性濾波器,常用于模糊處理和減小噪聲

4、,模糊處理經(jīng)常用于預(yù)處理。例如,在提取大的目標(biāo)之前除去信號中的一些瑣碎細(xì)節(jié)、橋接直線或曲線的縫隙。通過線性濾波器和非線性濾波器可以減小噪聲。程序設(shè)計:具體代碼如下:/ MyDIPView.cpp : implementation of the CMyDIPView class/#include "stdafx.h"#include "MyDIP.h"#include "MyDIPDoc.h"#include "MyDIPView.h"#include "math.h"#ifdef _DEBUG#

5、define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/* * 函數(shù)名稱:* Template:* 參數(shù):* HDIB hDIB 圖像的句柄* double *tem 指向模板的指針* int tem_w 模板的寬度* int tem_h 模板的高度* double xishu 模板的系數(shù)* * 功能:* 對圖像進(jìn)行模板操作* 說明:* 為處理方便起見,模板的寬度和高度都應(yīng)為奇數(shù)*/ HDIB Template(HDIB hDIB,double * tem ,int tem_w,int tem_h,do

6、uble xishu) /統(tǒng)計中間值 double sum; /指向圖像起始位置的指針 BYTE *lpDIB=(BYTE*):GlobalLock(HGLOBAL) hDIB);/指向象素起始位置的指針BYTE *pScrBuff =(BYTE*):FindDIBBits(char*)lpDIB); /獲取圖像的顏色信息 int numColors=(int) :DIBNumColors(char *)lpDIB); /如果圖像不是256色返回 if (numColors!=256) /解除鎖定 :GlobalUnlock(HGLOBAL) hDIB);/返回return(hDIB); /將

7、指向圖像象素起始位置的指針,賦值給指針變量 BYTE* oldbuf = pScrBuff; /循環(huán)變量 int i,j,m,n;int w, h, dw;/獲取圖像的寬度w = (int) :DIBWidth(char *)lpDIB);/獲取圖像的高度h = (int) :DIBHeight(char *)lpDIB);/計算圖像每行的字節(jié)數(shù)dw = (w+3)/4*4; /建立一個和原圖像大小相同的25色灰度位圖 HDIB newhDIB=NewDIB(w,h,8); /指向新的位圖的指針BYTE *newlpDIB=(BYTE*):GlobalLock(HGLOBAL) newhDIB

8、);/指向新的位圖的象素起始位置的指針 BYTE *destBuf = (BYTE*)FindDIBBits(char *)newlpDIB); /將指向新圖像象素起始位置的指針,賦值給指針變量 BYTE *newbuf=destBuf; /對圖像進(jìn)行掃描 /行 for(i=0;i<h;i+) /列 for(j=0;j<w;j+) /為統(tǒng)計變量賦初始值 sum=0; /對于圖像的4個邊框的象素保持原灰度不變 if( j<(tem_w-1)/2) | j>(w-(tem_w+1)/2) | i<(tem_h-1)/2) | i>(h-(tem_h+1)/2)

9、) *(newbuf+i*dw+j)=*(oldbuf+i*dw+j); /對于其他的象素進(jìn)行模板操作 else /將點(i,j)點作為模板的中心 for(m=i-(tem_h-1)/2);m<=i+(tem_h-1)/2);m+) for(n=j-(tem_w-1)/2);n<=j+(tem_w-1)/2);n+) /將以點(i,j)為中心,與模板大小相同的范圍內(nèi)的象素與模板對用位置的系數(shù) /進(jìn)行相乘并線形疊加 sum+=*(oldbuf+m*dw+n)* tem(m-i+(tem_h-1)/2)*tem_w+n-j+(tem_w-1)/2); /將結(jié)果乘上總的模板系數(shù) sum=

10、(int)sum*xishu; /計算絕對值 sum = fabs(sum); /如果小于0,強(qiáng)制賦值為0 if(sum<0) sum=0; /如果大于255,強(qiáng)制賦值為255 if(sum>255) sum=255; /將計算的結(jié)果放到新的位圖的相應(yīng)位置 *(newbuf+i*dw+j)=sum; /解除鎖定:GlobalUnlock(HGLOBAL)hDIB); /返回新的位圖的句柄 return(newhDIB);/ CMyDIPViewIMPLEMENT_DYNCREATE(CMyDIPView, CScrollView)BEGIN_MESSAGE_MAP(CMyDIPVi

11、ew, CScrollView)/AFX_MSG_MAP(CMyDIPView)ON_COMMAND(ID_MENUITEM32778, OnMenuitem32778)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CScrollView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView:OnFilePrintPreview)END

12、_MESSAGE_MAP()/ CMyDIPView construction/destructionCMyDIPView:CMyDIPView()/ TODO: add construction code hereCMyDIPView:CMyDIPView()BOOL CMyDIPView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CScrollView:PreCreateWindow(c

13、s);/ CMyDIPView drawingvoid CMyDIPView:OnDraw(CDC* pDC) CMyDIPDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(pDoc->m_hDIB = NULL)return ;/ TODO: add draw code for native data hereint i,j; unsigned char *lpSrc;LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc->m_hDIB);int cxDIB = (int) :DIBWidth

14、(lpDIB); / Size of DIB - xint cyDIB = (int) :DIBHeight(lpDIB); / Size of DIB - yLPSTR lpDIBBits=:FindDIBBits (lpDIB);/ 計算圖像每行的字節(jié)數(shù)long lLineBytes = WIDTHBYTES(cxDIB * 8);/ 每行for(i = 0; i < cyDIB; i+)/ 每列for(j = 0; j < cxDIB; j+)/ 指向DIB第i行,第j個象素的指針lpSrc = (unsigned char*)lpDIBBits + lLineBytes *

15、 (cyDIB - 1 - i) + j;/ 計算新的灰度值/*(lpSrc) = BYTE(255-*lpSrc);:GlobalUnlock(HGLOBAL) pDoc->m_hDIB);CRect rect(0,0,cxDIB,cyDIB), rcDIB(0,0,cxDIB,cyDIB);:PaintDIB(pDC->m_hDC, &rect, pDoc->m_hDIB, &rcDIB, pDoc->m_palDIB);/ CMyDIPView printingBOOL CMyDIPView:OnPreparePrinting(CPrintInfo

16、* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyDIPView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMyDIPView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyDIPView diagnostic

17、s#ifdef _DEBUGvoid CMyDIPView:AssertValid() constCScrollView:AssertValid();void CMyDIPView:Dump(CDumpContext& dc) constCScrollView:Dump(dc);CMyDIPDoc* CMyDIPView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDIPDoc);return (CMyDIPDoc*)m_pDocument;#en

18、dif /_DEBUG/ CMyDIPView message handlersvoid CMyDIPView:OnSize(UINT nType, int cx, int cy)CScrollView:OnSize(nType, cx, cy);void CMyDIPView:OnInitialUpdate()CScrollView:OnInitialUpdate();SetScrollSizes(MM_TEXT, GetDocument()->m_sizeDoc);/對比度拉伸/DEL void CMyDIPView:OnMenuitem32777() /DEL /DEL /DEL / 獲取文檔/DEL CMyDIPDoc* pDoc = GetDocument();/DEL int i,j;/DEL int r1=60,r2=200;/DEL double k=1.5;/DEL unsigned char *lpSrc;/DEL ASSERT_VALID(pDoc);/DEL if(pDoc->m_hDIB = NULL)/DEL return ;/DEL LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc->m_hDIB);/DEL LPSTR lpDIBBits=:FindDI

溫馨提示

  • 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

提交評論