第五章 图像锐化处理.doc
文本预览下载声明
图像锐化处理
图像锐化的概念
补偿图像轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。
图像锐化的目的是加强图像中景物的细节边缘和轮廓。
锐化的作用是使灰度反差增强。
因为边缘和轮廓都位于灰度突变的地方。所以锐化算法的实现是基于微分作用。
图像锐化方法
图像的景物细节特征;
一阶微分锐化方法;
二阶锐化微分方法;
一阶、二阶微分锐化方法效果比较。
图像细节的灰度变化特性
扫描线
1、一阶微分锐化 —— 基本原理
一阶微分的计算公式非常简单:
离散化之后的差分方程:
考虑到图像边界的拓扑结构性,根据这个原理派生出许多相关的方法。
单方向一阶微分锐化
无方向一阶微分锐化
? 交叉微分锐化
? Sobel锐化
? Priwitt锐化
(1)单方向的一阶锐化 —— 基本原理
单方向的一阶锐化是指对某个特定方向上的边缘信息进行增强。
因为图像为水平、垂直两个方向组成,所以,所谓的单方向锐化实际上是包括水平方向与垂直方向上的锐化。
水平方向的一阶锐化---基本方法
水平方向的锐化非常简单,通过一个可以检测出水平方向上的像素值的变化模板来实现。
问题:计算结果中出现了小于零的像素值?
(2)垂直方向的一阶锐化 —— 基本方法
垂直锐化算法的设计思想与水平锐化算法相同,通过一个可以检测出垂直方向上的像素值的变化模板来实现。
单方向锐化的后处理
这种锐化算法需要进行后处理,以解决像素值为负的问题。
后处理的方法不同,则所得到的效果也就不同。
方法1:整体加一个正整数,以保证所有的像
素值均为正。(比如+128,还有0的则视为0,若有255的则视为255处理)
这样做的结果是:可以获得类似浮雕的效果。
下例是+20后的效果
void CDynSplitView::OnHsharpen()
{
// TODO: 在此添加命令处理程序代码
int i,j,buf;
int w[3][3]={{1,2,1},{0,0,0},{-1,-2,-1}};
clearmem();
int ysize=m_imagey,xsize=m_imagex;
for(j=1;jysize-1;j++)
for (i=1;ixsize-1;i++)
{ buf=(int)(*(image_in+(j-1)*xsize+i-1)*w[0][0]+
*(image_in+(j-1)*xsize+i)*w[0][1]+
*(image_in+(j-1)*xsize+i+1)*w[0][2]+
*(image_in+j*xsize+i-1)*w[1][0]+
*(image_in+j*xsize+i)*w[1][1]+
*(image_in+j*xsize+i+1)*w[1][2]+
*(image_in+(j+1)*xsize+i-1)*w[2][0]+
*(image_in+(j+1)*xsize+i)*w[2][1]+
*(image_in+(j+1)*xsize+i+1)*w[2][2]
);
buf+=128;
if (buf0) buf=0;
if (buf255) buf=255;
*(image_out+j*xsize+i)=buf;
}
Invalidate();
}
添加菜单,设置其ID属性:
ID_HSHARPEN, ID_VSHARPEN
为菜单添加事件处理程序。
方法2:将所有的像素值取绝对值。
这样做的结果是,可以获得对边缘的有方向提取。
垂直方向锐化处理
浮雕:
(3)无方向一阶锐化 —— 问题的提出
前面的锐化处理结果对于人工设计制造的具有矩形特征物体(例如:楼房、汉字等)的边缘的提取很有效。但是,对于不规则形状(如:人物)的边缘提取,则存在信息的缺损。
为了解决上面的问题,就希望提出对任何方向上的边缘信息均敏感的锐化算法。
因为这类锐化方法要求对边缘的方向没有选择,所有称为无方向的锐化算法。
一阶微分
双方向一次微分运算,直接以梯度值代替
理论基础:对灰度图像f在纵方向和横方向两个方向进行微分。该算法是同时增强水平和垂直方向的边缘。利用双方向一次微分运算,算出梯度后让梯度值等于该点的灰度值。
该算法的数学表达式为:
G(i,j)=sqrt{[f(i,j)-f(i,j-1)]*[f(i,j)-f(i,j-1)]+[f(i,j)-f(i-1,j)]* [f(i,j)-f(i-1,j)]}
或G[f(i,j)]=
显示全部