




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數字圖像辦理實驗三中值濾波和均值濾波實驗報告數字圖像辦理實驗三中值濾波和均值濾波實驗報告15/15數字圖像辦理實驗三中值濾波和均值濾波實驗報告數字圖像辦理實驗三均值濾波、中值濾波的計算機實現崔雪瑩計科1202班一、實驗目的:1)熟悉均值濾波、中值濾波辦理的理論基礎;2)掌握均值濾波、中值濾波的計算機實現方法;3)學習VC+6。0的編程方法;4)考據均值濾波、中值濾波辦理理論;5)觀察均值濾波、中值濾波辦理的結果。二、實驗的軟、硬件平臺:硬件:微型圖像辦理系統,包括:主機,PC機;攝像機;軟件:操作系統:WINDOWS2000或WINDOWSXP應用軟件:VC+三、實驗內容:1)握高級語言編程技
2、術;2)編制均值濾波、中值濾波辦理程序的方法;3)編譯并生成可執行文件;4)觀察辦理結果。四、實驗要求:1)學習VC+確6。0編程的步驟及流程;2)編寫均值濾波、中值濾波的程序;3)編譯并改錯;4)把該程序嵌入試驗二給出的界面中(作合適更正);5)提交程序及文檔;6)寫出本次實驗的領悟。五、實驗結果截圖實驗均值濾波采用的是3X3的方塊,取周圍的像素點獲取其均值代替原像素點。邊緣像素的辦理方法是復制邊緣的像素點,增加一個邊框,計算里面的像素值得均值濾波。六、實驗領悟本次實驗在前一次的實驗基礎上增加均值濾波和中值濾波,對于椒鹽噪聲的辦理,發現中值濾波的收效更加好一點,而均值濾波是的整個圖像變得模糊
3、了一點,收效差異較大。本次實驗更加增加了對數字圖像辦理的認識與學習。七、實驗程序代碼說明及解析.”菜單項增加到系統菜單中。gbBlue;lpBits2p2+1=pPalettePalette.rgbGreen;lpBits2p2+2=pPalettePalette.rgbRed;deletelpTemp;lpBits=lpBitmap+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);if(lpBackup)deletelpBackup;lpBackup=newBYTEnLen;memcpy(lpBackup,lpBitmap,nLen);vo
4、idCHistDemoADlg:OnOpen()mp|所有文件|*.*|,this);/新建文件選擇對話框if()=IDOK)FileName=();/獲取文件的路徑if(!(FileName,CFile:modeRead)return;/以只讀方式打開文件/TODO:addloadingcodehereif(lpBitmap)deletelpBitmap;/保證lpBitmap為空nLen=(int)();/獲取文件的長度lpBitmap=newBYTEnLen;/為lpBitmap分配空間(lpBitmap,nLen);/將文件的內容讀入到lpBitmap所指向的內存地域LoadBitma
5、p();/調用LoadBitmap(),加載位圖圖像if(lpBitmap)(nWidth,nHeight,lpBits);voidCHistDemoADlg:OnHist()TODO:在此增加控件通知辦理程序代碼HistogramEq();voidGetPoints(intnWidth,intnHeight,BYTE*lpBits,BYTE*lpPoints)intx,y,p;intnByteWidth=nWidth*3;if(nByteWidth%4)nByteWidth+=4-(nByteWidth%4);for(y=0;ynHeight;y+)/每一行for(x=0;xnWidth;x
6、+)/每一列p=x*3+y*nByteWidth;lpPointsx+y*nWidth=(BYTE)*(float)lpBitsp+2+*(float)lpBitsp+1+*(float)lpBitsp+;/制變換成BYTE三種顏色的比率計算對應點的顏色值,并且強voidPutPoints(intnWidth,intnHeight,BYTE*lpBits,BYTE*lpPoints)/lpBits進行賦值逐個對intnByteWidth=nWidth*3;if(nByteWidth%4)nByteWidth+=4-(nByteWidth%4);intx,y,p,p1;for(y=0;ynHei
7、ght;y+)/每一行for(x=0;xnWidth;x+)/每一列p=x*3+y*nByteWidth;p1=x+y*nWidth;lpBitsp=lpPointsp1;lpBitsp+1=lpPointsp1;lpBitsp+2=lpPointsp1;voidCHistDemoADlg:HistogramEq(void)if(lpBitmap=0)return;BYTE*lpOutput=newBYTEnByteWidth*nHeight;HistogramEq1(nWidth,nHeight,lpBits,lpOutput);(nWidth,nHeight,lpOutput);/在直方圖
8、均衡化的地域顯示結果deletelpOutput;NoColor();/將原始圖像變換成灰度圖像voidCHistDemoADlg:NoColor()if(lpBitmap=0)return;intx,y,p;BYTEPoint;for(y=0;ynHeight;y+)/每一行for(x=0;xnWidth;x+)/每一列p=x*3+y*nByteWidth;Point=(BYTE)*(float)lpBitsp+2+*(float)lpBitsp+1+*(float)lpBitsp+;/計算顏色值,在0-255的灰度級之間lpBitsp+2=Point;lpBitsp+1=Point;lpB
9、itsp=Point;(nWidth,nHeight,lpBits);/將彩色圖像轉變為灰度圖像voidCHistDemoADlg:HistogramEq1(intnWidth,intnHeight,BYTE*lpInput,BYTE*lpOutput)intx,y;BYTE*lpPoints=newBYTEnWidth*nHeight;/像素點的個數GetPoints(nWidth,nHeight,lpInput,lpPoints);/lpPoints存的是顏色值intr256,s256;/顏色值數組,統計對應顏色值像素點的個數ZeroMemory(r,1024);ZeroMemory(s,
10、1024);for(y=0;ynHeight;y+)/統計對應顏色值像素點的個數,Point(x,y)是lpPoints(x,y)for(x=0;xnWidth;x+)rPoint(x,y)+;s0=r0;for(y=1;y256;y+)sy=sy-1;sy+=ry;/計算顏色值的前y種顏色的總像素點的個數(像素點顏色值=y)for(y=0;ynHeight;y+)/將計算對應點的像素值,直方圖平均化的結果保存在lpPointsfor(x=0;xnWidth;x+)Point(x,y)=sPoint(x,y)*255/nWidth/nHeight;PutPoints(nWidth,nHeigh
11、t,lpOutput,lpPoints);/輸出lpPoints到lpOutputdeletelpPoints;voidCHistDemoADlg:OnBnClickedClose()TODO:在此增加控件通知辦理程序代碼/ExitProcess(0);/注意使用時先釋放分配的內存/exit(0);/正常停止程序;exit(非0)非正常停止程序PostQuitMessage(0);/最常用,省得造成內存泄露voidCHistDemoADlg:OnBnClickedMeanfilter()TODO:在此增加控件通知辦理程序代碼if(lpBitmap=0)return;BYTE*lpOutput=
12、newBYTEnByteWidth*nHeight;MeanFilter(nWidth,nHeight,lpBits,lpOutput);(nWidth,nHeight,lpOutput);/在直方圖均衡化的地域顯示結果deletelpOutput;NoColor();/將原始圖像變換成灰度圖像voidCHistDemoADlg:MeanFilter(intnWidth,intnHeight,BYTE*lpInput,BYTE*lpOutput)intx,y;BYTE*lpPoints=newBYTEnWidth*nHeight;/像素點的個數BYTE*lpPoints1=newBYTE(nW
13、idth+2)*(nHeight+2);GetPoints(nWidth,nHeight,lpInput,lpPoints);/lpPoints存的是顏色值for(y=1;ynHeight+1;y+)/中間最整塊圖像的拷貝for(x=1;xnWidth;x+)Point1(x,y)=Point(x-1,y-1);/lpPoints1yx=lpPointsy-1x-1;for(y=1;ynHeight+1;y+)/Point1(0,y)=Point(0,y-1);最左邊和最右邊一列的拷貝Point1(nWidth+1,y)=Point(nWidth-1,y-1);/lpPoints1y0=lpP
14、ointsy-10;/lpPoints1ynWidth+1=lpPointsy-1nWidth-1;for(x=0;xnWidth+2;x+)/最上邊和最下邊一行的拷貝Point1(x,0)=Point1(x,1);Point1(x,nHeight+1)=Point1(x,nHeight);/lpPoints10 x=lpPoints11x;/lpPoints1nHeight+1x=lpPoints1nHeightx;for(y=0;ynHeight;y+)/求以某點為中心的九個數平均值for(x=0;xnWidth;x+)Point(x,y)=(Point1(x,y)+Point1(x+1,
15、y)+Point1(x+2,y)+Point1(x,y+1)+Point1(x+1,y+1)+Point1(x+2,y+1)+Point1(x,y+2)+Point1(x+1,y+2)+Point1(x+2,y+2)/9;/*lpPointsyx=(lpPoints1yx+lpPoints1yx+1+lpPoints1yx+2+lpPoints1y+1x+lpPoints1y+1x+1+lpPoints1y+1x+2+lpPoints1y+2x+lpPoints1y+2x+1+lpPoints1y+2x+2)/9;*/PutPoints(nWidth,nHeight,lpOutput,lpPo
16、ints);/輸出lpPoints到lpOutputdeletelpPoints;voidCHistDemoADlg:MedianFilter(intnWidth,intnHeight,BYTE*lpInput,BYTE*lpOutput)intx,y;BYTE*lpPoints=newBYTEnWidth*nHeight;/像素點的個數BYTE*lpPoints1=newBYTE(nWidth+2)*(nHeight+2);GetPoints(nWidth,nHeight,lpInput,lpPoints);/lpPoints存的是顏色值for(y=1;ynHeight+1;y+)/for(
17、x=1;xnWidth;x+)Point1(x,y)=Point(x-1,y-1);中間一整塊拷貝for(y=1;ynHeight+1;y+)/最左邊和最右邊一列的拷貝Point1(0,y)=Point(0,y-1);Point1(nWidth+1,y)=Point(nWidth-1,y-1);for(x=0;xnWidth+2;x+)/最上邊和最下邊一行的拷貝Point1(x,0)=Point1(x,1);Point1(x,nHeight+1)=Point1(x,nHeight);BYTE*window=newBYTE9;for(y=0;ynHeight;y+)for(x=0;xnWidth
18、;x+)intk=0;for(inti=y;i=y+2;i+)for(intj=x;j=x+2;j+)if(k9)windowk+=Point1(j,i);for(intm=0;m5;+m)/求9個數的中值,window4為中值intmin=m;for(intn=m+1;n9;+n)if(windownFillSolidRect(0,0,320,240,BACKGROUND);returnTRUE;voidCImageWnd:OnPaint()/繪制函數,每次需要顯示的圖像發生變化,就會重畫,重復調用這個函數進行重畫CPaintDCdc(this);/當前對象作為參數if(lpBits)int
19、x,y;x=-HScrollPosition;y=-VScrollPosition;if(nWidth320)x=(320-nWidth)/2;if(nHeight240)y=(240-nHeight)/2;設置繪制位圖文件的頭信息BITMAPINFOHEADERbmi;sizeof(BITMAPINFOHEADER);nWidth;nHeight;1;24;BI_RGB;0;0;0;0;0;將像素點填充到繪圖地域StretchDIBits,x,y,nWidth,nHeight,0,0,nWidth,nHeight,lpBits,(BITMAPINFO*)&bmi,DIB_RGB_COLORS
20、,SRCCOPY);voidCImageWnd:OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)/水平滾輪事件辦理函數,switch(nSBCode)caseSB_LINEDOWN:/每次滑動的間隔為HScrollPosition+=5;break;caseSB_LINEUP:HScrollPosition-=5;break;caseSB_PAGEDOWN:/滑到最底端HScrollPosition+=320;break;caseSB_PAGEUP:/滑到最頂端HScrollPosition-=320;break;caseSB_THUM
21、BPOSITION:caseSB_THUMBTRACK:HScrollPosition=nPos;break;5個像素點if(HScrollPositionHScrollMax)HScrollPosition=HScrollMax;/滑動地址大于最大值,設為最大值SetScrollPos(SB_HORZ,HScrollPosition);/水平方向滑動距離if(HCurrentPosition!=HScrollPosition)/HCurrentPosition和HScrollPosition不相等就滑動ScrollWindow(HCurrentPosition-HScrollPosition
22、,0);/窗口滑動多少HCurrentPosition=HScrollPosition;/將當前滑動地址設為HScrollPositionCWnd:OnHScroll(nSBCode,nPos,pScrollBar);voidCImageWnd:OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)/垂直方向的滑動事件辦理switch(nSBCode)caseSB_LINEDOWN:VScrollPosition+=5;break;caseSB_LINEUP:VScrollPosition-=5;break;caseSB_PAGEDOWN:V
23、ScrollPosition+=240;break;caseSB_PAGEUP:VScrollPosition-=240;break;caseSB_THUMBPOSITION:caseSB_THUMBTRACK:VScrollPosition=nPos;break;if(VScrollPositionVScrollMax)VScrollPosition=VScrollMax;SetScrollPos(SB_VERT,VScrollPosition);if(VCurrentPosition!=VScrollPosition)ScrollWindow(0,(VCurrentPosition-VScrollPosition);VCurrentPosition=VScrollPosition;CWnd:OnVScroll(nSBCode,nPos,pScrollBar);intCImageWnd:OnCreate(LPCREATESTR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外專局外籍教師協議
- 電視廣告制作協議
- 離職手續完成證明及勞動關系終止書(6篇)
- 互聯網科技產業融資狀況表格
- 電力系統運行與維護專業試題
- 授權啤酒銷售合同
- 軟件著作權申請流程及實例解析
- 在職員工基本信息一覽表
- 地理學創新人才培養中的自主學習與終身教育機制
- 員工收入及獎金詳細證明(5篇)
- 馬工程-公共財政概論-課程教案
- GB/T 25177-2010混凝土用再生粗骨料
- GB/T 17817-2010飼料中維生素A的測定高效液相色譜法
- 中國石化加油站視覺形象(vi)標準手冊
- 機場行李輸送系統設計論文-本科論文
- 2022年全國工會財務知識大賽參考題庫精簡600題(含各題型)
- 新教材教科版五年級下冊科學全冊課時練(課后作業設計)(含答案)
- 廣西基本醫療保險異地就醫備案登記表-示例樣表
- 供應商綠色環保環境管理體系評估表
- GB∕T 11344-2021 無損檢測 超聲測厚
- 外科無菌操作技術PPT學習教案
評論
0/150
提交評論