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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論