数字图像处理课程设计
(应用拉普拉斯算子对图像图像实施空域高通滤波锐化)
1.课程设计概述
1.1 简述图像处理和图像的锐化
随着计算机技术的不断发展以及人们在日常生活中对图像信息的不断需求,数字图像处
理技术在近年来得到了迅速的发展,成为当代科学研究和应用开发中一道亮丽的风景线。数
字图像处理技术以其信息量大、处理和传输方便、应用广等一系列优点,成为人类获得信息
的重要来源和利用信息的重要手段,并在宇宙探测、遥感、生物医学、工农业生产、军事、
公安、办公室自动化等领域得到广泛的应用,显示出广泛的应用前景。
在图像识别中需要有边缘鲜明的图像,即图像锐化。图像锐化的的目的是为了突出图像
的边缘信息,加强图像的轮廓特征,以便于人眼的观察和机器的识别。增强图像边缘和线条,
使图像边缘变得清晰的处理称为图像的锐化。
1.2 课程设计任务说明
应用拉普拉斯算子对图像实施空域高通滤波,以锐化图像
2.算法概述
边缘和轮廓一般都位于灰度突变的地方,由此人们很自然的想起用灰度差分突出其变换。然
而,由于边缘和轮廓在一幅图像中乘车具有任意方向,而一般的差分运算是有方向性的,因
此和差分方向一致饿边缘、轮廓便检测不出来。为此人们希望找到一些各向同性的检测算法。
应用拉普拉斯算子对图像实施空域高通滤波,以锐化图像是现在比较流行的一种算法。
2.1 拉普拉斯算法简介
拉普拉斯算子是常用的边缘增强处理算子,它是各向同性的二阶导数,一个连续的二元
函数 f(x,y),为了要把图像中间任何方向伸展的的边缘和轮廓线变得清晰,我们希望对图像
的某种运算是各向同性的。可以证明偏导平方和的运算是各向同性的,既:
式中(
)是图像旋转前的坐标,(
)是图像旋转后的坐标。梯度运算就是在这个
式子的基础上开方得到的。图像(x,y)点的梯度值:
为了突出物体的边缘,常常采用梯度值的改进算法,将图像各个点的梯度值与某一阈值
作比较,如果大于阈值,该像素点的灰度用梯度值表示,否则用一个固定的灰度值表示。
2.2 高频滤波增强方法概述
由于图像中的边缘、线条等细节部分与图像频谱中的分量相应,在频域中用高通滤波处理。
采用高通滤波的方法可以让高频分量顺利通过,使低频分量受到限制,就可以增强高频的成分。
高频滤波增强的数学表达式:
式中 f,g 分别为锐化前后的图像, 是与扩散效应有关的系数。
表示对图像 f 进行
二次微分的拉普拉斯算子。这表明不模糊的图像可以由模糊的图像减去乘上系数的模糊图像拉普
拉斯算子来得到。本次课程设计我使用的是下面的模板 H={{0,-1,0},{-1,5,-1},{0,
-1,0}}来近似。
3.实现要点分析
图像銳化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑
的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算
(如微分运算)就可以使图像变的清晰。从频率域来考虑,图像模糊的实质是因为其高频分
量被衰减,因此可以用高通滤波器来使图像清晰。 拉普拉斯高斯算法是一种二阶边缘检测
方法。它通过寻找图像灰度值中二阶微分中的过零点来检测边缘点,其原理为,灰度级变形
成的边缘经过微风算子形成一个单峰函数,峰值位置对应边缘点;对单峰函数进行微分,则
峰值处的微分值为 0,峰值两侧符号相反,而原先的极值点对英语二阶微分中的过零点,通
过检测过零点即可将图像的边缘提取出来。所以我们可以设定一个模板来与它相似。
4.核心代码解析
4.1 设定模板
void CMyDIPView::OnMenuitem32778()
{
CMyDIPDoc* pDoc = GetDocument();
//设定模板参数
double tem[9]={0,-1,0,
-1,5,-1,
0,-1,0};
//设定模板系数
double
xishu = 1;
//进行模板操作
pDoc->m_hDIB =Template(pDoc->m_hDIB,tem ,3,3, xishu);(调用 Template 函数,对
图像进行模板操作)
Invalidate(TRUE);
}
4.2 对图像进行模板操作函数设计
for(i=0;i
//为统计变量赋初始值
sum=0;
//对于图像的 4 个边框的象素保持原灰度不变
if( j<((tem_w-1)/2) || j>(w-(tem_w+1)/2) || i<((tem_h-1)/2) ||
i>(h-(tem_h+1)/2) )
*(newbuf+i*dw+j)=*(oldbuf+i*dw+j);
//对于其他的象素进行模板操作
else
{
//将点(i,j)点作为模板的中心
for(m=i-((tem_h-1)/2);m<=i+((tem_h-1)/2);m++)
{
for(n=j-((tem_w-1)/2);n<=j+((tem_w-1)/2);n++)
//将以点(i,j)为中心,与模板大小相同的范围内的象素与模板对用
位置的系数
//进行相乘并线形叠加
tem[(m-i+((tem_h-1)/2))*tem_w+n-j+((tem_w-1)/2)];
sum+=*(oldbuf+m*dw+n)*
}
//将结果乘上总的模板系数
sum=(int)sum*xishu;
//计算绝对值
sum = fabs(sum);
//如果小于 0,强制赋值为 0
if(sum<0)
sum=0;
//如果大于 255,强制赋值为 255
if(sum>255)
sum=255;
//将计算的结果放到新的位图的相应位置
*(newbuf+i*dw+j)=(int)sum;
}
}
}
5.测试及结果分析
原图像如下:
运行结果如下:
结果分析:两图像对比显示了用拉普拉斯模板对该图像滤波后的结果。由图可以看出,将原
始图像通过拉普拉斯变换后增强了图像中灰度突变处的对比度,使图像中小的细节部分得到
增强并保留了图像的背景色调,使图像的细节比原始图像更加清晰。
6.总结
这次课程设计相对来说工作量较大,主要原因是我们对开发工具以及对数字图像在
VC++中处理方法不了解,所以在做课程设计之前,就必须先对开发工具有所了解,对一种开
发工具的了解是能基于该软件开发的基本前提,在这次学习中让我对 VC 的 MFC 类库有了基
本的了解,以及 MFC 类库中的类的调用、实现等。数字图像处理课程设计的另外的一个难点
就是位图与算法的实现,要对图像进行处理,就要先弄懂实现机制。包括最基本的要了解位
图的基本操作,对数据存储、控制等。
通过这次课程设计让我深刻的了解到,要学好一门语言,一门技术就必须多做实际的联
系。开发工具不是语言,学好 VC++也做不出项目,单学好语言了解算法,也没有办法运用
在开发工具之上。要做好一个项目就必须是两者的结合。所以,在我们的计算机科学的道路
上,要是想走得更远、更长,就必须不断的深入学习,把握学习的方法,才能成为一名合格
的 IT 人士。