基于VisualC的数字图像处理.docx
- 文档编号:8932608
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:10
- 大小:368.76KB
基于VisualC的数字图像处理.docx
《基于VisualC的数字图像处理.docx》由会员分享,可在线阅读,更多相关《基于VisualC的数字图像处理.docx(10页珍藏版)》请在冰豆网上搜索。
基于VisualC的数字图像处理
数字图像处理设计
一、设计题目
基于VisualC++的图像平滑、锐化处理
二、设计要求
基于VisualC++的MFC程序设计,实现对灰度图像简单的平滑处理与拉普拉斯锐化处理。
并能得到处理后所需的图像。
三、设计原理
(一)、图像平滑
1图像平滑的基本概述
图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。
2图像平滑的基本方法
(1)线性滤波(领域平均法)
对一些图像进行线性滤波可以去除图像中某些类型的噪声。
领域平均法就是
一种非常适合去除通过扫描得到的图像中的噪声颗粒的线性滤波。
领域平均法是空间域平滑噪声技术。
对于给定的图像fi,j中的每个像素点m,n,取其领域S。
设S含有M个像素,取其平均值作为处理后所得图像像素点m,n处的灰度。
用一像素领域内各像素灰度平均值来代替该像素原来的灰度,即领域平均技术。
领域S的形状和大小根据图像特点确定。
一般取的形状是正方形、矩形及十字形等,S的形状和大小可以在全图处理过程中保持不变,也可以根据图像的局部统计特性而变化,点(m,n)—般位于S的中心。
女口S为3X3领域,点(m,n)位
于S中心,贝U
111fm,n]=6二二fmi,nj
假设噪声n是加性噪声,在空间各点互不相关,且期望为0,方差为二2,图像g是未受污染的图像,含有噪声图像f经过加权平均后为
111
fm,n二丄'fi,jgi,j丄'ni,j
MMM212
即方差变小,
由上式可知,经过平均后,噪声的均值不变,方差匚二一匚,
M说明噪声强度减弱了,抑制了噪声。
(2)中值滤波
中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。
但是对一些细节多,特别是点、线、尖顶细节多的图像不宜采用中值滤波的方法。
中值滤波的基本原理是把数字图像或数字序列中一点的
值用该点的一个邻域中各点值的中值代替
设有一个一维序列f1,…,fn,取窗口长度为m(m为奇数),对此序列进行中值滤波,就是从输入序列中f2相继抽出m个数,f」,…,fid,…,fi,v,其中i为窗口的中心位置,v=吐11,再将这m个点按其数值大
2
小排列,取其序号为正中间的那作为输出。
用数学公式表示为:
Y=Med{f」,…,£,…,£抽}
m—1
iZ,v=
2
例如,有一个序列为{1,3,4,0,7},则中值滤波为重新排序后的序列{0,1,3,4,7}中间的值为3。
此例若用平均滤波,窗口也是取5,那么平均滤波输出为13407七.0。
因此平均滤波的一般输出为:
7(£亠
Yi,j=Med{Xj}
其中,A为滤波窗口。
(二)、图像锐化
1图像锐化的基本概述
图像在传输过程中,通常质量都要降低,除了噪声因素外,图像一般都要变得模糊。
这主要是因为图像的传输或转换系统的传递函数对高频成分的衰减作用,造成图像的细节轮廓不清晰。
图像锐化就是补偿图像的轮廓,使图像比较清晰。
2图像锐化的基本方法
(1)微分算子法
设有一副图像fx,y,它的梯度用数学概念描述为一个向量,定义为『八\11,^cf
GLf(x,y卩=\——
该向量的模为
”叽
它是x,y的函数,实际上
上式所表示的G[f(x,y卩称为图像卜卜,丫)的梯
也是图像fx,y的梯度图像。
对于数字图像fx,y来讲,微分-和丄只能用查分来近似。
上式按差分运算近似后的梯度表达式为'1
1
G〔f(x,yR=|〔f(x,y)—f(x+1,y卩+〔f(x,y)—f(x,y+1)平
但是,实际计算时,用这种方式计算量较大,为了节省计算机计算的时间,在计算精度允许的情况下,可蔡勇绝对差法。
对应的绝对差算法为
G[f(x,y“=f(x,y)—f(x+1,y汁f(x,y)—f(x,y+1D
必须注意的是,用梯度计算时,对于一个MXN的数字图像
f(x,y)(x=0,M-1,y=0,N-1),
点(M-1,y)和(X,N-1)的梯度是无法进行计算的。
因此,图像f(x,y)的最后一行(第M-1行)和最后一列(第N-1列)的像素的梯度值应该进行特殊处理。
常用
的方法是(M-1,y)的梯度值用(M-2,y)的梯度值来代替,(x,N-1)的梯度值用(x,N-2)的梯度值来代替。
(2)拉氏算子
拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性,比较适用于改善因为光线的漫反射造成的图像模糊。
其原理是,在摄像记录图像的过程中,
光点将光漫反射到其周围区域,这个过程满足扩散方程
不模糊图像等于
ct
经过推导,可以发现当图像的模糊是由光的漫反射造成时,模糊图像减去它的拉普拉斯变换的常数倍。
另外,人们还发现,即使模糊不是由于光的漫反射造成的,对图像进行拉普拉斯变换也可以使图像更清晰。
拉普拉斯锐化的一维处理表达式是:
2
gx=fx一dfx
dx
在二维情况下,拉普拉斯算子使走向不同的轮廓能够在垂直的方向上具有类
ifi,j「Ji,j\2fi,j
其中
Jfi,j
7xfi,j1
^x'-fi1,j-fi,j1
vxfi1,jxfi,j
fi1,j-fi,j-fi,jfi-1,jfi1,jfi-1,j-2fi,j
同理
vyfi,j二fi,j-fi,j-1
类似的有
2
Iyfi,j二fi,j1fi,j-1-2fi,j
所以有
可2f(i,j)=f(i+1,j)+f(iQj)1f(i0j+1)+f(i,j—1)—4f(i,j)则拉式算子的模板表示为:
1-41
四、源程序清单〔010丿
#include"stdafx.h"
#include"DlPDemo.h"
#include"DIPDemoDoc.h"
#include"DlPDemoView.h"
#include"mainfrm.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
IMPLEMENT_DYNCREATE(CDIPDemoView,CScrollView)
BEGIN_MESSAGE_MAP(CDIPDemoView,CScrollView)
〃{{AFX_MSG_MAP(CDIPDemoView)
ON_COMMAND(ID_ENHA_SMOOTH,OnEnhaSmooth)
ON_COMMAND(ID_ENHA_SHARP,OnEnhaSharp)//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CDIPDemoView:
:
CDIPDemoView()
:
m_bLBtnDblClkSrv(O)
{
//TODO:
addconstructioncodehere
}
CDIPDemoView:
:
~CDIPDemoView()
{
}
voidCDIPDemoView:
:
OnDraw(CDC*pDC)
{
BeginWaitCursor();//显示等待光标
CDlPDemoDoc*pDoc=GetDocument();//获取文档
ASSERT_VALID(pDoc);
if(pDoc->m_lmage.IsValidate())
{
CPalette*pOldPalette;
CPalette*pPalette=pDoc->GetDocPalette();if(pPalette!
=NULL)
{
pOldPalette=pDC->SelectPalette(pPalette,FALSE);pDC->RealizePalette();//更新系统调色板
}
pDoc->m」mage.Draw(pDC);//绘制图像
if(pPalette!
=NULL)pDC->SelectPalette(pOldPalette,FALSE);
}
EndWaitCursor();//恢复正常光标
}
voidCDIPDemoView:
:
OnEnhaSmooth()//图像平滑
{
CDIPDemoDoc*pDoc=GetDocument();//获取文档
CImgProcessimgInput=pDoc->m_lmage;//输入对象
if(imgInput.m_pBMIH->biBitCount!
=8)
{
AfxMessageBox("不是8-bpp灰度图像,无法处理!
");return;
}//检查图像是灰度图
CImgProcessimgOutput=imgInput;//输出的临时对象
intnTempH;//模板高度
intnTempW;//模板宽度
FLOATfTempC;//模板系数
intnTempMX;//模板中心元素X坐标
intnTempMY;//模板中心元素Y坐标
FLOATaValue[25]={1.0,1.0,1.0,0.0,0.0,
1.0,1.0,1.0,0.0,0.0,
1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
0.0,0.0,0.0,0.0,0.0,};
BeginWaitCursor();//更改光标形状
nTempH=3;
nTempW=3;
nTempMX=1;
nTempMY=1;
初始化对话框变量值
nTempH,nTempWjnTempMYnTempMX,
fTempC=(FLOAT)(1.0/9.0);//
imglnput.Template(&imgOutput,
aValue,fTempC);
将结果返回给文档类
设置脏标记
更新视图
恢复光标
//调用Template()函数实现平滑滤波
pDoc->m_lmage=imgOutput;//pDoc->SetModifiedFlag(TRUE);//pDoc->UpdateAIIViews(NULL);//EndWaitCursor();//
}
//拉普拉斯锐化
获取文档
//输入对象
voidCDIPDemoView:
:
OnEnhaSharp()
{
CDIPDemoDoc*pDoc=GetDocument();//CImgProcessimgInput=pDoc->m」mage;if(imgInput.m_pBMIH->biBitCount!
=8){
AfxMessageBox("不是8-bpp灰度图像,无法处理!
");
return;
}//检查图像是灰度图
CImgProcessimgOutput=imgInput;//输出的临时对象
intnTempH;//滤波器的高度
intnTempW;//滤波器的宽度
intnTempMX;//中心元素的X坐标
intnTempMY;//中心元素的Y坐标
FLOATfCoef;//模板系数
BeginWaitCursor();
nTempW=3;
nTempH=3;
fCoef=1.0;
nTempMX=1;
nTempMY=1;//设置拉普拉斯模板参数
imglnput.Template(&imgOutput,
nTempH,nTempWnTempMYnTempMX,
Template_Laplacian2,fCoef);
将结果返回给文档类设置脏标记更新视图
恢复光标
//调用Template()函数用拉普拉斯模板锐化
pDoc->m_lmage=imgOutput;//pDoc->SetModifiedFlag(TRUE);//pDoc->UpdateAIIViews(NULL);//EndWaitCursor();//
进行图像平滑处理后如下图所示:
图像进行拉普拉斯锐化后如下示:
六、收获和体会
在这一个礼拜的图像处理程序设计中,我经过多次的实践和多次的失败,终
于在最后成功设计好了程序。
同时深刻体会到图像平滑让图像中的细节成分越来越少,而相对的,图像锐化则是凸显图像的细节部分
图像平滑处理,在很多噪声的情况下,图像平滑能够有效的减弱噪声对图像的影响。
无论是高斯噪声、椒盐噪声还是乘性噪声,都能很好的在图像平滑中将
这几种噪声很好的去除。
虽然不能完全复原如原图一样的情况,但是在图像平滑
过后,噪声在图像中的存在确实少了许多。
但是对于一些本身比较清晰的图像,效果就不那么明显了。
图像平滑的弊端在于会把图像本身一些很好的细节部分给模糊掉,从而降低图像的质量。
对一些分辨率很高而且细节很唯美的图像来说,图像平滑来处理噪声反而效果不是很好。
而在图像的锐化中则是让图像变得更为清晰。
通过图像锐化可以使图像的细
节部分变得清楚起来。
但是如果图像有噪声,只会让图像变得更加模糊,图像锐化不能对有噪声的图像进行处理。
七、参考文献
1、段玉平.VisualC++程序设计[M].北京:
高等教育出版社,1996,6.
2、孙宏琦,施维颖,巨永峰.利用中值滤波进行图像处理[J].长安大学学
报(自然科学版),2003
3、NoelJerke.VisualBasic6参考大全[M].北京:
希望电子出版
社,1999,10.
4、ConzalezR,WoodsR.数字图像处理[M].北京:
电子工业出版社,
2011.6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VisualC 数字图像 处理