数字图像处理实验三中值滤波和均值滤波实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验三
均值滤波、中值滤波的计算机实现12281166 崔雪莹计科1202班
一、实验目的:
1)熟悉均值滤波、中值滤波处理的理论基础;
2)掌握均值滤波、中值滤波的计算机实现方法;
3)学习VC++ 6。0 的编程方法;
4)验证均值滤波、中值滤波处理理论;
5)观察均值滤波、中值滤波处理的结果。
二、实验的软、硬件平台:
硬件:微型图像处理系统,包括:主机,PC机;摄像机;
软件:操作系统:WINDOWS2000或WINDOWSXP应用软件:VC++ 6.0
三、实验内容:
1)握高级语言编程技术;
2)编制均值滤波、中值滤波处理程序的方法;
3)编译并生成可执行文件;
4)考察处理结果。
四、实验要求:
1)学习VC++确6。0 编程的步骤及流程;
2)编写均值滤波、中值滤波的程序;
3)编译并改错;
4)把该程序嵌入试验二给出的界面中(作适当修改);
5)提交程序及文档;
6)写出本次实验的体会。
五、实验结果截图
实验均值滤波采用的是3X3的方块,取周围的像素点取得其均值代替原像素点。边缘像素的处理方法是复制边缘的像素点,增加一个边框,计算里面的像素值得均值滤波。
六、实验体会
本次实验在前一次的实验基础上增加均值滤波和中值滤波,对于椒盐噪声的处理,发现中值滤波的效果更为好一点,而均值滤波是的整个图像变得模糊了一点,效果差异较大。本次实验更加增加了对数字图像处理的了解与学习。
七、实验程序代码注释及分析
// 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 *lpBits;
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 OnPaint();
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 *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的按钮事件,而且会调取文件选择对话框,选取文件之后,会显示在原始图像区域显示对应的位图图像,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
#define new DEBUG_NEW
#endif
#define Point(x,y) lpPoints[(x)+(y)*nWidth]
#define Point1(x,y) lpPoints1[(x)+(y)*nWidth]
// 用于应用程序“关于”菜单项的CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)