ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:468.26KB ,
资源ID:11571307      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11571307.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字图像处理实验三中值滤波和均值滤波实验报告.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数字图像处理实验三中值滤波和均值滤波实验报告.docx

1、数字图像处理实验三中值滤波和均值滤波实验报告数字图像处理实验三中值滤波和均值滤波实验报告数字图像处理实验三均值滤波、中值滤波的计算机实现12281166 崔雪莹 计科1202班一、实验目的:1)熟悉均值滤波、中值滤波处理的理论基础;2)掌握均值滤波、中值滤波的计算机实现方法;3)学习VC+ 6。0 的编程方法;4)验证均值滤波、中值滤波处理理论;5)观察均值滤波、中值滤波处理的结果。二、实验的软、硬件平台: 硬件: 微型图像处理系统,包括:主机, PC机;摄像机;软件: 操作系统:WINDOWS2000或WINDOWSXP应用软件:VC+ 6.0三、实验内容:1)握高级语言编程技术;2)编制均

2、值滤波、中值滤波处理程序的方法;3)编译并生成可执行文件;4)考察处理结果。四、实验要求:1)学习VC+确6。0 编程的步骤及流程;2)编写均值滤波、中值滤波的程序;3)编译并改错;4)把该程序嵌入试验二给出的界面中(作适当修改);5)提交程序及文档;6)写出本次实验的体会。五、实验结果截图实验均值滤波采用的是3X3的方块,取周围的像素点取得其均值代替原像素点。边缘像素的处理方法是复制边缘的像素点,增加一个边框,计算里面的像素值得均值滤波。六、实验体会本次实验在前一次的实验基础上增加均值滤波和中值滤波,对于椒盐噪声的处理,发现中值滤波的效果更为好一点,而均值滤波是的整个图像变得模糊了一点,效果

3、差异较大。本次实验更加增加了对数字图像处理的了解与学习。七、实验程序代码注释及分析/ HistDemoADlg.h : 头文件/#include ImageWnd.h#pragma once/ CHistDemoADlg 对话框class CHistDemoADlg : public CDialogEx/ 构造public: CHistDemoADlg(CWnd* pParent = NULL); / 标准构造函数 int nWidth; int nHeight; int nLen; int nByteWidth; BYTE *lpBackup; BYTE *lpBitmap; BYTE *l

4、pBits; CString FileName; CImageWnd source,dest;/ 对话框数据 enum IDD = IDD_HISTDEMOA_DIALOG ; protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected: HICON m_hIcon; / 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnP

5、aint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP()public: void LoadBitmap(void); afx_msg void OnOpen(); afx_msg void OnHist(); void HistogramEq(void); void NoColor(void); void HistogramEq1(int nWidth,int nHeight,BYTE *lpInput,BYTE *lpOutput); void MeanFilter(int nWidth,int nHeight,BYTE

6、 *lpInput,BYTE *lpOutput); void MedianFilter(int nWidth,int nHeight,BYTE *lpInput,BYTE *lpOutput); afx_msg void OnBnClickedClose(); afx_msg void OnBnClickedMeanfilter(); afx_msg void OnBnClickedMedianfilter();HistDemoADlg.cpp对HistDemoADlg.h进行具体的实现,OnOpen()函数响应ID为IDC_OPEN的按钮事件,而且会调取文件选择对话框,选取文件之后,会显示

7、在原始图像区域显示对应的位图图像,OnHist()函数会响应ID为IDC_HIST的按钮事件,调用HistogramEq()进行直方图均衡化的处理,HistogramEq()会调用HistogramEq1()进行直方图均衡化的处理,并用dst.setImage()显示处理之后的图像,以及NoColor()函数,对原始图像转化为灰度图像之后再显示。/ HistDemoADlg.cpp : 实现文件/#include stdafx.h#include HistDemoA.h#include HistDemoADlg.h#include afxdialogex.h#ifdef _DEBUG#defi

8、ne new DEBUG_NEW#endif#define Point(x,y) lpPoints(x)+(y)*nWidth#define Point1(x,y) lpPoints1(x)+(y)*nWidth/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogExpublic: CAboutDlg();/ 对话框数据 enum IDD = IDD_ABOUTBOX ; protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现

9、protected: DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ CHistDemoADlg 对话框CHistDemoADlg:CHistDemoADlg(CWnd* pParent /*=NULL*/) : CDialogEx

10、(CHistDemoADlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); lpBitmap = 0; lpBackup = 0;void CHistDemoADlg:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CHistDemoADlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(

11、IDC_OPEN, &CHistDemoADlg:OnOpen) ON_BN_CLICKED(IDC_HIST, &CHistDemoADlg:OnHist) ON_BN_CLICKED(IDCLOSE, &CHistDemoADlg:OnBnClickedClose) ON_BN_CLICKED(IDC_MEANFILTER, &CHistDemoADlg:OnBnClickedMeanfilter) ON_BN_CLICKED(IDC_MEDIANFILTER, &CHistDemoADlg:OnBnClickedMedianfilter)END_MESSAGE_MAP()/ CHistD

12、emoADlg 消息处理程序BOOL CHistDemoADlg:OnInitDialog() CDialogEx:OnInitDialog(); / 将“关于.”菜单项添加到系统菜单中。 / IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / 设置此对话框的图标。当应用程序主窗口不是对话框

13、时,框架将自动 / 执行此操作 SetIcon(m_hIcon, TRUE); / 设置大图标 SetIcon(m_hIcon, FALSE); / 设置小图标 / TODO: 在此添加额外的初始化代码 source.Create(0,LSource,WS_CHILD|WS_VISIBLE,CRect(40,40,360,280),this,10000); dest.Create(0,LDestination,WS_CHILD|WS_VISIBLE,CRect(400,40,720,280),this,10001); return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoi

14、d CHistDemoADlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialogEx:OnSysCommand(nID, lParam); / 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CHistDemoADlg:OnPaint() if (IsIconic() CPaintDC dc(this);

15、/ 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); / 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; /

16、绘制图标 dc.DrawIcon(x, y, m_hIcon); else CDialogEx:OnPaint(); /当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CHistDemoADlg:OnQueryDragIcon() return static_cast(m_hIcon);void CHistDemoADlg:LoadBitmap() /位图文件:BITMAPFILEHEADER+BITMAPINFOHEADER+有效信息部分 BITMAPINFOHEADER *pInfo; /位图文件的头部信息指针pInfo pInfo=(BITMAPINFOHEADER

17、*)(lpBitmap+sizeof(BITMAPFILEHEADER); /pInfo指向位图文件的头部信息 nWidth=pInfo-biWidth; /图片宽度 nByteWidth=nWidth*3; /字节宽度 if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4); /使字节宽度为4的整数倍 nHeight=pInfo-biHeight; /图片高度 if (pInfo-biBitCount!=24) /位图的位深度不为24 if (pInfo-biBitCount!=8) /位深度不为8 AfxMessageBox(L无效位图); delet

18、e lpBitmap; lpBitmap=0; return; /位深度为8 unsigned int PaletteSize=1biBitCount; /左移8位,PaletteSize调色板尺寸 if (pInfo-biClrUsed!=0 & pInfo-biClrUsedbiClrUsed; / biClrUsed 位图实际使用的颜色表中的颜色数 lpBits=lpBitmap+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);/lpBits指向有效信息部分 RGBQUAD *pPalette=(RGBQUAD *)lpBits; /颜

19、色表部分 /* typedef struct tagRGBQUAD BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; RGBQUAD; */ lpBits+=sizeof(RGBQUAD)*PaletteSize;/lpBits指向图像有效信息部分 nLen=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nByteWidth*nHeight;/整个位图文件的长度 BYTE *lpTemp=lpBitmap; lpBitmap=new BYTEnLen; BITMAPFIL

20、EHEADER bmh; BITMAPINFOHEADER bmi; bmh.bfType=B+M*256; bmh.bfSize=nLen; bmh.bfReserved1=0; bmh.bfReserved2=0; bmh.bfOffBits=54; bmi.biSize=sizeof(BITMAPINFOHEADER); bmi.biWidth=nWidth; bmi.biHeight=nHeight; bmi.biPlanes=1; bmi.biBitCount=24; bmi.biCompression=BI_RGB; bmi.biSizeImage=0; bmi.biXPelsPe

21、rMeter=0; bmi.biYPelsPerMeter=0; bmi.biClrUsed=0; bmi.biClrImportant=0; int nBWidth=pInfo-biWidth; if (nBWidth%4) nBWidth+=4-(nBWidth%4); memset(lpBitmap,0,nLen); memcpy(lpBitmap,&bmh,sizeof(BITMAPFILEHEADER);/位图文件头部 memcpy(lpBitmap+sizeof(BITMAPFILEHEADER),&bmi,sizeof(BITMAPINFOHEADER);/位图信息头部 BYTE

22、 *lpBits2=lpBitmap+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);/位图图像信息部分 int x,y,p1,p2,Palette; for(y=0;ynHeight;y+) for(x=0;xnWidth;x+) p1=y*nBWidth+x; p2=y*nByteWidth+x*3; if (lpBitsp1PaletteSize) Palette=lpBitsp1; else Palette=0; lpBits2p2=pPalettePalette.rgbBlue; lpBits2p2+1=pPalettePalett

23、e.rgbGreen; lpBits2p2+2=pPalettePalette.rgbRed; delete lpTemp; lpBits=lpBitmap+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); if (lpBackup) delete lpBackup; lpBackup=new BYTEnLen; memcpy(lpBackup,lpBitmap,nLen);void CHistDemoADlg:OnOpen() /点击打开文件之后,对应的事件处理函数 / TODO: 在此添加控件通知处理程序代码 CFile File; CF

24、ileDialog dlg(TRUE,0,0,OFN_HIDEREADONLY,L位图文件|*.bmp|所有文件|*.*|,this);/新建文件选择对话框 if (dlg.DoModal()=IDOK) FileName=dlg.GetPathName(); /得到文件的路径 if (!File.Open(FileName,CFile:modeRead) return; /以只读方式打开文件 / TODO: add loading code here if (lpBitmap) delete lpBitmap; /保证lpBitmap为空 nLen=(int)File.GetLength()

25、; /得到文件的长度 lpBitmap=new BYTEnLen; /为lpBitmap分配空间 File.Read(lpBitmap,nLen); /将文件的内容读入到lpBitmap所指向的内存区域 LoadBitmap(); /调用LoadBitmap(),加载位图图像 if (lpBitmap) source.SetImage(nWidth,nHeight,lpBits); void CHistDemoADlg:OnHist() / TODO: 在此添加控件通知处理程序代码 HistogramEq();void GetPoints(int nWidth,int nHeight,BYTE

26、 *lpBits,BYTE *lpPoints) int x,y,p; int nByteWidth=nWidth*3; if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4); for(y=0;ynHeight;y+) /每一行 for(x=0;xnWidth;x+) /每一列 p=x*3+y*nByteWidth; lpPointsx+y*nWidth=(BYTE)(0.299*(float)lpBitsp+2+0.587*(float)lpBitsp+1+0.114*(float)lpBitsp+0.1); /三种颜色的比例计算对应点的颜色值,并且强

27、制转换成BYTE void PutPoints(int nWidth,int nHeight,BYTE *lpBits,BYTE *lpPoints) /逐个对lpBits进行赋值 int nByteWidth=nWidth*3; if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4); int x,y,p,p1; for(y=0;ynHeight;y+) /每一行 for(x=0;xnWidth;x+) /每一列 p=x*3+y*nByteWidth; p1=x+y*nWidth; lpBitsp=lpPointsp1; lpBitsp+1=lpPoin

28、tsp1; lpBitsp+2=lpPointsp1; void CHistDemoADlg:HistogramEq(void) if (lpBitmap=0) return; BYTE *lpOutput=new BYTEnByteWidth*nHeight; HistogramEq1(nWidth,nHeight,lpBits,lpOutput); dest.SetImage(nWidth,nHeight,lpOutput); /在直方图均衡化的区域显示结果 delete lpOutput; NoColor(); /将原始图像转换成灰度图像void CHistDemoADlg: NoColor() if (lpBitmap=0) return; int x,y,p; BYTE Point; for(y=0;ynHeight;y+) /每一行 for(x=0;xnWidth;x+) /每一列

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2