基于VC++的数字图像处理课程设计
一、概述
本次电子课程设计是基于VC++ 6.0 MFC多文档编程编写一个图像处理软件,这个软件能够实现BMP格式图像的浏览与编辑,打开和保存。
实现对图像的平滑处理,包括邻域平均法和中值滤波法。
还有对图像的锐化处理,包括梯度法和拉普拉斯算子法。
BMP文件是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图和设备无关位图,使用非常广。
它采用位映射存储格式,除了图像深度可选外,不采用其他任何压缩,因此BMP文件所占用的空间很大。
由于BMP文件格式是Windows环境交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
图像平滑的目的是为了消除噪声,主要处理的方式有邻域平均法即通过提高信噪比,取得较好的平滑效果;空间域低通滤波采用低通滤波的方法去除噪声;以及频率低通滤波法通过除去其高频分量就能去掉噪声,从而使图像的到平滑。
图像锐化的主要目的是为了增强图像边缘、轮廓和细节,使模糊的图像变得更加清晰,颜色、细节变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的图像。
经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可对其进行逆运算(如微分运算)就可以使图像变得清晰。
从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。
主要功能概述:
1、打开和保存8位bmp图像
2、图像平滑处理:分为邻域平均法和中值滤波法。
邻域平均法中又有3*3均值滤波器
法、超限邻域平均法、n*n均值滤波器法、有选择的局部平均化。
中值滤波法中有n*n中值滤波器法、十字形中值滤波法、n*n最大值滤波器法。
3、图像锐化处理:分为梯度法和拉普拉斯算子法。
二、程序流程图
三、运行效果
1、软件界面:
2、原图:
3、邻域平均法3*3均值滤波器平滑处理后:
4、十字形中值滤波平滑处理后:
5、梯度法锐化处理后:
6、Laplace算子法锐化处理后:
四、程序源代码:
void CDynSplitView2::OnFilesave()
{
CFileDialog
dlg(FALSE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROM PT,_T("位图文件(*.BMP)|*.BMP|"));
if(IDOK==dlg.DoModal())
CString filename;
filename.Format ("%s",dlg.GetPathName() );
CDibNew1->SaveFile(filename);
state2=1;
Invalidate();
}
void CDynSplitView2::On33junzhi()
{
clearmem();
CDibNew1->threethree();//对图像进行3*3均值滤波
Invalidate();
}
void CDynSplitView2::OnChaoxian()
{
clearmem();
THREETHREEJUNZHI dlg;
if(IDOK==dlg.DoModal())
{
int t=dlg.m_T;
CDibNew1->Chaoxian(t);//超限邻域平均法
Invalidate();
}
}
void CDynSplitView2::OnNnjunzhi()
{
clearmem();
NNJUNZHI dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->nn(dlg.m_n);//对图像进行n*n均值滤波
Invalidate();
}
}
void CDynSplitView2::OnJubupingjun()
Invalidate();
}
void CDynSplitView2::OnNnzhongzhi()
{
clearmem();
NNJUNZHI dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->nnzhong(dlg.m_n);//对图像进行N*N中值滤波
Invalidate();
}
}
void CDynSplitView2::OnShizi()
{
clearmem();
NNJUNZHI dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->shizi(dlg.m_n);//对图像进行十字型中值滤波
Invalidate();
}
}
void CDynSplitView2::OnNnzuida()
{
clearmem();
NNJUNZHI dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->nnzuida(dlg.m_n);//对图像进行N*N最大滤波
Invalidate();
}
}
void CDynSplitView2::OnTidu()
{
// TODO: Add your command handler code here
clearmem();
CDibNew1->GuDingRuiHua(); //对图像进行固定阈值锐化Invalidate();
}
void CDynSplitView2::OnLaplace()
{
// TODO: Add your command handler code here
clearmem();。