版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 圖形圖像處理與應(yīng)用</b></p><p> 題 目 對(duì)圖像進(jìn)行均值濾波 </p><p><b> 院(系)專業(yè)級(jí)班</b></p><p> 學(xué) 號(hào) </p>&l
2、t;p> 姓 名 </p><p> 指導(dǎo)教師 </p><p> 成 績(jī) </p><p> 完成時(shí)間 2012 年 06 月</p><p><b> 均 值 濾 波</b></p>
3、<p><b> 均值濾波的原理</b></p><p> 均值濾波是典型的線性濾波算法,它是指在圖像上對(duì)目標(biāo)像素給一個(gè)模板,該模板包括了其周?chē)呐R近像素(以目標(biāo)象素為中心的周?chē)?個(gè)象素,構(gòu)成一個(gè)濾波模板,即去掉目標(biāo)象素本身)。再用模板中的全體像素的平均值來(lái)代替原來(lái)像素值。</p><p> 均值濾波也稱為線性濾波,其采用的主要方法為鄰域平均法。線
4、性濾波的基本原理是用均值代替原圖像中的各個(gè)像素值,即對(duì)待處理的當(dāng)前像素點(diǎn)(x,y),選擇一個(gè)模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當(dāng)前像素點(diǎn)(x,y),作為處理后圖像在該點(diǎn)上的灰度個(gè)g(x,y),即個(gè)g(x,y)=1/m ∑f(x,y) m為該模板中包含當(dāng)前像素在內(nèi)的像素總個(gè)數(shù)。</p><p><b> 均值濾波的實(shí)現(xiàn)算法</b></p>
5、<p> 均值濾波將每個(gè)像素點(diǎn)的灰度值設(shè)置為以該點(diǎn)為中心的鄰域窗口內(nèi)的所有像素灰度值的平均值,以實(shí)現(xiàn)像素的平滑,達(dá)到圖像去噪的目的。設(shè)輸入圖像信號(hào)為f(x,y),去噪處理后的輸出圖像為g(x,y),則有g(shù)(x,y)= | f(x,y)- ¬u (x,y)| 。 </p><p> 通過(guò)上式可以達(dá)到消除信號(hào)噪聲的目的,但對(duì)于其中的每一個(gè)灰度值來(lái)說(shuō),都需要按照式求取以該點(diǎn)中心的鄰域窗口內(nèi)所有
6、像素的平均值,對(duì)長(zhǎng)度為(2n+1)的信號(hào)來(lái)說(shuō),需要進(jìn)行(2n+1)次加法、一次乘法、一次除法。所以說(shuō),均值計(jì)算占用了均值濾波處理的大量時(shí)間費(fèi)用。</p><p><b> 均值濾波應(yīng)用</b></p><p> 均值濾波就是在一定的時(shí)間內(nèi)對(duì)輸入信號(hào)進(jìn)行連續(xù)的采樣然后求出幾次采樣值的平均值。設(shè)x0...xi是采樣值,yk是對(duì)采樣進(jìn)行平均值濾波的輸出值,其關(guān)系如下:&
7、lt;/p><p> 在工程應(yīng)用中,均值濾波對(duì)于周期性的干擾有很好的抑制作用,另外,均值濾波對(duì)于熱噪聲產(chǎn)生的干擾也有很好的抑制作用。</p><p> n的取值取決n系統(tǒng)的參數(shù),如果系統(tǒng)對(duì)輸入的靈敏度要求很高,則n的取值應(yīng)比較小,如果系統(tǒng)的輸入變化速度不快,系統(tǒng)對(duì)輸入的靈敏性要求也不是很高,為了抑制干擾,提高輸入的精度,可以將n取得比較大。</p><p><
8、b> 均值濾波器</b></p><p> 均值濾波器也是平滑線性濾波器,常用于模糊處理和減小噪聲,模糊處理</p><p> 經(jīng)常用于預(yù)處理。例如,在提取大的目標(biāo)之前除去信號(hào)中的一些瑣碎細(xì)節(jié)、橋接直線或曲線的縫隙。通過(guò)線性濾波器和非線性濾波器可以減小噪聲。</p><p><b> 程序設(shè)計(jì):</b></p&g
9、t;<p><b> 具體代碼如下:</b></p><p> // MyDIPView.cpp : implementation of the CMyDIPView class</p><p><b> //</b></p><p> #include "stdafx.h"<
10、;/p><p> #include "MyDIP.h"</p><p> #include "MyDIPDoc.h"</p><p> #include "MyDIPView.h"</p><p> #include "math.h"</p>&
11、lt;p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FILE[] = __FILE__;</p><p><b> #endif</b></p&g
12、t;<p> /*****************************************************</p><p><b> * </b></p><p><b> * 函數(shù)名稱:</b></p><p> * Template:</p><p
13、><b> *</b></p><p><b> * 參數(shù):</b></p><p> * HDIB hDIB -圖像的句柄</p><p> * double *tem -指向模板的指針</p><p> *
14、int tem_w -模板的寬度</p><p> * int tem_h -模板的高度</p><p> * double xishu -模板的系數(shù)</p><p> * </p><p><b> * 功能:</b
15、></p><p> * 對(duì)圖像進(jìn)行模板操作</p><p><b> *</b></p><p><b> * 說(shuō)明:</b></p><p> * 為處理方便起見(jiàn),模板的寬度和高度都應(yīng)為奇數(shù)</p><p> **************
16、*****************************************/</p><p> HDIB Template(HDIB hDIB,double * tem ,int tem_w,int tem_h,double xishu)</p><p><b> {</b></p><p><b> //統(tǒng)計(jì)中間值&l
17、t;/b></p><p> double sum;</p><p> //指向圖像起始位置的指針</p><p> BYTE *lpDIB=(BYTE*)::GlobalLock((HGLOBAL) hDIB);</p><p> //指向象素起始位置的指針</p><p> BYTE *pScrBu
18、ff =(BYTE*)::FindDIBBits((char*)lpDIB);</p><p> //獲取圖像的顏色信息</p><p> int numColors=(int) ::DIBNumColors((char *)lpDIB);</p><p> //如果圖像不是256色返回</p><p> if (numColors!
19、=256) </p><p><b> { </b></p><p><b> //解除鎖定</b></p><p> ::GlobalUnlock((HGLOBAL) hDIB);</p><p><b> //返回</b></p><p>
20、; return(hDIB);</p><p><b> }</b></p><p> //將指向圖像象素起始位置的指針,賦值給指針變量</p><p> BYTE* oldbuf = pScrBuff;</p><p><b> //循環(huán)變量</b></p><p&g
21、t; int i,j,m,n;</p><p> int w, h, dw;</p><p><b> //獲取圖像的寬度</b></p><p> w = (int) ::DIBWidth((char *)lpDIB);</p><p><b> //獲取圖像的高度</b></p&
22、gt;<p> h = (int) ::DIBHeight((char *)lpDIB);</p><p> //計(jì)算圖像每行的字節(jié)數(shù)</p><p> dw = (w+3)/4*4; </p><p> //建立一個(gè)和原圖像大小相同的25色灰度位圖</p><p> HDIB newhDIB=NewDIB(
23、w,h,8); </p><p> //指向新的位圖的指針</p><p> BYTE *newlpDIB=(BYTE*)::GlobalLock((HGLOBAL) newhDIB);</p><p> //指向新的位圖的象素起始位置的指針 </p><p> BYTE *destBuf = (BYTE*)FindDIBBits(
24、(char *)newlpDIB);</p><p> //將指向新圖像象素起始位置的指針,賦值給指針變量</p><p> BYTE *newbuf=destBuf; </p><p><b> //對(duì)圖像進(jìn)行掃描</b></p><p><b> //行 </b></p>
25、<p> for(i=0;i<h;i++)</p><p><b> { </b></p><p><b> //列</b></p><p> for(j=0;j<w;j++)</p><p><b> { </b></p>
26、<p> //為統(tǒng)計(jì)變量賦初始值</p><p><b> sum=0;</b></p><p> //對(duì)于圖像的4個(gè)邊框的象素保持原灰度不變</p><p> if( j<((tem_w-1)/2) || j>(w-(tem_w+1)/2) || i<((tem_h-1)/2) || i>(h-(te
27、m_h+1)/2) )</p><p> *(newbuf+i*dw+j)=*(oldbuf+i*dw+j);</p><p> //對(duì)于其他的象素進(jìn)行模板操作</p><p><b> else </b></p><p><b> { </b></p><p>
28、//將點(diǎn)(i,j)點(diǎn)作為模板的中心</p><p> for(m=i-((tem_h-1)/2);m<=i+((tem_h-1)/2);m++)</p><p><b> {</b></p><p> for(n=j-((tem_w-1)/2);n<=j+((tem_w-1)/2);n++)</p><p&
29、gt; //將以點(diǎn)(i,j)為中心,與模板大小相同的范圍內(nèi)的象素與模板對(duì)用位置的系數(shù)</p><p> //進(jìn)行相乘并線形疊加</p><p> sum+=*(oldbuf+m*dw+n)* tem[(m-i+((tem_h-1)/2))*tem_w+n-j+((tem_w-1)/2)];</p><p><b> }</b></
30、p><p> //將結(jié)果乘上總的模板系數(shù)</p><p> sum=(int)sum*xishu;</p><p><b> //計(jì)算絕對(duì)值</b></p><p> sum = fabs(sum);</p><p> //如果小于0,強(qiáng)制賦值為0</p><p>
31、 if(sum<0) </p><p><b> sum=0;</b></p><p> //如果大于255,強(qiáng)制賦值為255</p><p> if(sum>255)</p><p><b> sum=255;</b></p><p> //將
32、計(jì)算的結(jié)果放到新的位圖的相應(yīng)位置</p><p> *(newbuf+i*dw+j)=sum;</p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b>
33、 //解除鎖定</b></p><p> ::GlobalUnlock((HGLOBAL)hDIB);</p><p> //返回新的位圖的句柄</p><p> return(newhDIB);</p><p><b> }</b></p><p> //////////
34、///////////////////////////////////////////////////////////////////</p><p> // CMyDIPView</p><p> IMPLEMENT_DYNCREATE(CMyDIPView, CScrollView)</p><p> BEGIN_MESSAGE_MAP(CMyDIPVie
35、w, CScrollView)</p><p> //{{AFX_MSG_MAP(CMyDIPView)</p><p> ON_COMMAND(ID_MENUITEM32778, OnMenuitem32778)</p><p> //}}AFX_MSG_MAP</p><p> // Standard printing comma
36、nds</p><p> ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScro
37、llView::OnFilePrintPreview)</p><p> END_MESSAGE_MAP()</p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMyDIPView construction/des
38、truction</p><p> CMyDIPView::CMyDIPView()</p><p><b> {</b></p><p> // TODO: add construction code here</p><p><b> }</b></p><p>
39、 CMyDIPView::~CMyDIPView()</p><p><b> {</b></p><p><b> }</b></p><p> BOOL CMyDIPView::PreCreateWindow(CREATESTRUCT& cs)</p><p><b>
40、 {</b></p><p> // TODO: Modify the Window class or styles here by modifying</p><p> // the CREATESTRUCT cs</p><p> return CScrollView::PreCreateWindow(cs);</p><
41、;p><b> }</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMyDIPView drawing</p><p> void CMyDIPView::OnDraw(C
42、DC* pDC)</p><p><b> { </b></p><p> CMyDIPDoc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> if(pDoc->m_hDIB == NULL)</p><p&g
43、t;<b> return ;</b></p><p> // TODO: add draw code for native data here</p><p><b> int i,j;</b></p><p> unsigned char *lpSrc;</p><p> LPSTR
44、lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);</p><p> int cxDIB = (int) ::DIBWidth(lpDIB); // Size of DIB - x</p><p> int cyDIB = (int) ::DIBHeight(lpDIB); // Size of
45、 DIB - y</p><p> LPSTR lpDIBBits=::FindDIBBits (lpDIB);</p><p> // 計(jì)算圖像每行的字節(jié)數(shù)</p><p> long lLineBytes = WIDTHBYTES(cxDIB * 8);</p><p><b> // 每行</b></
46、p><p> for(i = 0; i < cyDIB; i++)</p><p><b> {</b></p><p><b> // 每列</b></p><p> for(j = 0; j < cxDIB; j++)</p><p><b>
47、 {</b></p><p> // 指向DIB第i行,第j個(gè)象素的指針</p><p> lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;</p><p> // 計(jì)算新的灰度值</p><p> //*(lpSrc) = BYTE
48、(255-*lpSrc);</p><p><b> }</b></p><p><b> }</b></p><p> ::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);</p><p> CRect rect(0,0,cxDIB,cyDIB), rcDI
49、B(0,0,cxDIB,cyDIB);</p><p> ::PaintDIB(pDC->m_hDC, &rect, pDoc->m_hDIB, &rcDIB, pDoc->m_palDIB);</p><p><b> }</b></p><p> ///////////////////////////
50、//////////////////////////////////////////////////</p><p> // CMyDIPView printing</p><p> BOOL CMyDIPView::OnPreparePrinting(CPrintInfo* pInfo)</p><p><b> {</b></p
51、><p> // default preparation</p><p> return DoPreparePrinting(pInfo);</p><p><b> }</b></p><p> void CMyDIPView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /
52、*pInfo*/)</p><p><b> {</b></p><p> // TODO: add extra initialization before printing</p><p><b> }</b></p><p> void CMyDIPView::OnEndPrinting
53、(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p><b> {</b></p><p> // TODO: add cleanup after printing</p><p><b> }</b></p><p> ////////////////
54、/////////////////////////////////////////////////////////////</p><p> // CMyDIPView diagnostics</p><p> #ifdef _DEBUG</p><p> void CMyDIPView::AssertValid() const</p><
55、p><b> {</b></p><p> CScrollView::AssertValid();</p><p><b> }</b></p><p> void CMyDIPView::Dump(CDumpContext& dc) const</p><p><b&g
56、t; {</b></p><p> CScrollView::Dump(dc);</p><p><b> }</b></p><p> CMyDIPDoc* CMyDIPView::GetDocument() // non-debug version is inline</p><p><b&
57、gt; {</b></p><p> ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDIPDoc)));</p><p> return (CMyDIPDoc*)m_pDocument;</p><p><b> }</b></p><p> #e
58、ndif //_DEBUG</p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMyDIPView message handlers</p><p> void CMyDIPView::OnSize(UINT nT
59、ype, int cx, int cy)</p><p><b> {</b></p><p> CScrollView::OnSize(nType, cx, cy);</p><p><b> }</b></p><p> void CMyDIPView::OnInitialUpdate(
60、)</p><p><b> {</b></p><p> CScrollView::OnInitialUpdate();</p><p> SetScrollSizes(MM_TEXT, GetDocument()->m_sizeDoc);</p><p><b> }</b><
61、;/p><p><b> //對(duì)比度拉伸</b></p><p> //DEL void CMyDIPView::OnMenuitem32777() </p><p><b> //DEL {</b></p><p><b> //DEL </b></p>
62、<p> //DEL // 獲取文檔</p><p> //DEL CMyDIPDoc* pDoc = GetDocument();</p><p> //DEL int i,j;</p><p> //DEL int r1=60,r2=200;</p><p> //DEL double k=1.5;</
63、p><p> //DEL unsigned char *lpSrc;</p><p> //DEL ASSERT_VALID(pDoc);</p><p> //DEL if(pDoc->m_hDIB == NULL)</p><p> //DEL return ;</p><p> //
64、DEL LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);</p><p> //DEL LPSTR lpDIBBits=::FindDIBBits (lpDIB);</p><p> //DEL int cxDIB = (int) ::DIBWidth(lpDIB); // Size of
65、 DIB - x</p><p> //DEL int cyDIB = (int) ::DIBHeight(lpDIB); // Size of DIB - y</p><p> //DEL long lLineBytes = WIDTHBYTES(cxDIB * 8); // 計(jì)算圖像每行的字節(jié)數(shù)</p><p> //DEL /
66、/ 每行</p><p> //DEL for(i = 0; i < cyDIB; i++)</p><p><b> //DEL {</b></p><p> //DEL // 每列</p><p> //DEL for(j = 0; j < cxDIB; j++)</p>
67、<p><b> //DEL {</b></p><p> //DEL // 指向DIB第i行,第j個(gè)象素的指針</p><p> //DEL lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;</p><p> //DE
68、L // 計(jì)算新的灰度值</p><p> //DEL if(*lpSrc<r1) *lpSrc=BYTE(*lpSrc/k);</p><p> //DEL else if(*lpSrc<r2) *lpSrc= BYTE((*lpSrc-r1)*k+r1/k);</p><p> //DEL else *lpSrc=BYT
69、E((*lpSrc-r2)/k+255-(255-r2)/k);</p><p><b> //DEL }</b></p><p><b> //DEL }</b></p><p> //DEL ::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);</p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖像濾波增強(qiáng)方法研究 課程設(shè)計(jì)
- 頻域?yàn)V波課程設(shè)計(jì)
- 數(shù)字信號(hào)處理課程設(shè)計(jì)---應(yīng)用 matlab對(duì)信號(hào)進(jìn)行頻譜分析及濾波
- k均值課程設(shè)計(jì)---k均值聚類(k-means)優(yōu)化
- 濾波器設(shè)計(jì)與信號(hào)濾波課程設(shè)計(jì)報(bào)告
- 圖像處理課程設(shè)計(jì)
- 數(shù)字圖像處理課程設(shè)計(jì)--最大值、最小值濾波圖像增強(qiáng)
- iir濾波器課程設(shè)計(jì)
- dsp課程設(shè)計(jì)--語(yǔ)音噪聲濾波
- 語(yǔ)音濾波器課程設(shè)計(jì)
- 語(yǔ)音濾波器課程設(shè)計(jì)
- 課程設(shè)計(jì)--帶通濾波器
- 中值濾波,均值濾波,銳化濾波原理
- 帶通濾波課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)--對(duì)參賽結(jié)果分?jǐn)?shù)進(jìn)行處理
- 圖像處理課程設(shè)計(jì)
- 圖像增強(qiáng)課程設(shè)計(jì)
- dsp課程設(shè)計(jì)--濾波器
- 濾波器的課程設(shè)計(jì)
- 語(yǔ)音濾波器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論