整理第五章 图像锐化处理.docx
《整理第五章 图像锐化处理.docx》由会员分享,可在线阅读,更多相关《整理第五章 图像锐化处理.docx(23页珍藏版)》请在冰点文库上搜索。
整理第五章图像锐化处理
图像锐化处理
图像锐化的概念
补偿图像轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。
⏹图像锐化的目的是加强图像中景物的细节边缘和轮廓。
⏹锐化的作用是使灰度反差增强。
⏹因为边缘和轮廓都位于灰度突变的地方。
所以锐化算法的实现是基于微分作用。
图像锐化方法
⏹图像的景物细节特征;
⏹一阶微分锐化方法;
⏹二阶锐化微分方法;
⏹一阶、二阶微分锐化方法效果比较。
图像细节的灰度变化特性
扫描线
1、一阶微分锐化——基本原理
⏹一阶微分的计算公式非常简单:
⏹离散化之后的差分方程:
考虑到图像边界的拓扑结构性,根据这个原理派生出许多相关的方法。
⏹单方向一阶微分锐化
⏹无方向一阶微分锐化
•交叉微分锐化
•Sobel锐化
•Priwitt锐化
(1)单方向的一阶锐化
——基本原理
⏹单方向的一阶锐化是指对某个特定方向上的边缘信息进行增强。
⏹因为图像为水平、垂直两个方向组成,所以,所谓的单方向锐化实际上是包括水平方向与垂直方向上的锐化。
水平方向的一阶锐化---基本方法
⏹水平方向的锐化非常简单,通过一个可以检测出水平方向上的像素值的变化模板来实现。
问题:
计算结果中出现了小于零的像素值?
(2)垂直方向的一阶锐化
——基本方法
⏹垂直锐化算法的设计思想与水平锐化算法相同,通过一个可以检测出垂直方向上的像素值的变化模板来实现。
单方向锐化的后处理
⏹这种锐化算法需要进行后处理,以解决像素值为负的问题。
⏹后处理的方法不同,则所得到的效果也就不同。
方法1:
整体加一个正整数,以保证所有的像
⏹素值均为正。
(比如+128,还有<0的则视为0,若有>255的则视为255处理)
⏹这样做的结果是:
可以获得类似浮雕的效果。
下例是+20后的效果
voidCDynSplitView:
:
OnHsharpen()
{
//TODO:
在此添加命令处理程序代码
inti,j,buf;
intw[3][3]={{1,2,1},{0,0,0},{-1,-2,-1}};
clearmem();
intysize=m_imagey,xsize=m_imagex;
for(j=1;jfor(i=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]
);
if(buf<0)buf=abs(buf);
if(buf>255)buf=255;
buf+=128;
if(buf<0)buf=0;
if(buf>255)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)]=|f(i,j)-f(i-1,j)|+|f(i,j)-f(i,j-1)|
添加菜单,设置其ID属性:
ID_HVSHARPEN,ID_HNSHARPEN
为菜单添加事件处理程序。
直接梯度门限梯度
voidCDynSplitView:
:
OnHvsharpen()
{clearmem();
inti,j,fx,fy,ysize=m_imagey,xsize=m_imagex;
intv[3][3]={{0,0,0},{0,1,0},{0,-1,0}},h[3][3]={{0,0,0},{0,1,-1},{0,0,0}};
for(j=1;jfor(i=1;i{fx=(int)(*(image_in+(j-1)*xsize+i-1)*h[0][0]+
*(image_in+(j-1)*xsize+i)*h[0][1]+
*(image_in+(j-1)*xsize+i+1)*h[0][2]+
*(image_in+j*xsize+i-1)*h[1][0]+
*(image_in+j*xsize+i)*h[1][1]+
*(image_in+j*xsize+i+1)*h[1][2]+
*(image_in+(j+1)*xsize+i-1)*h[2][0]+
*(image_in+(j+1)*xsize+i)*h[2][1]+
*(image_in+(j+1)*xsize+i+1)*h[2][2]);
fy=(int)(*(image_in+(j-1)*xsize+i-1)*v[0][0]+
*(image_in+(j-1)*xsize+i)*v[0][1]+
*(image_in+(j-1)*xsize+i+1)*v[0][2]+
*(image_in+j*xsize+i-1)*v[1][0]+
*(image_in+j*xsize+i)*v[1][1]+
*(image_in+j*xsize+i+1)*v[1][2]+
*(image_in+(j+1)*xsize+i-1)*v[2][0]+
*(image_in+(j+1)*xsize+i)*v[2][1]+
*(image_in+(j+1)*xsize+i+1)*v[2][2]);
*(image_out+j*xsize+i)=(int)(abs(fx)+abs(fy));
if((int)(abs(fx)+abs(fy))>18)
*(image_out+j*xsize+i)=255;
else
*(image_out+j*xsize+i)=0;
}
Invalidate();
}
辅以门限判断
理论基础
G[f(i,j)]={[f(i,j)-f(i-1,j)]2+[f(i,j)-f(i,j-1)]2}1/2
或G[f(i,j)]=|f(i,j)-f(i-1,j)|+|f(i,j)-f(i,j-1)|
G[f(i,j)]+100;G[f(i,j)]≥T
g(i,j)=
f(i,j);其它
其中,T为门限值,像素的梯度值大于T,则加上100,加上100像素值后若大于255,取255。
if((int)(abs(fx)+abs(fy))>30)
*(image_out+j*xsize+i)=(int)(abs(fx)+abs(fy))+100;
else
*(image_out+j*xsize+i)=*(image_in+j*xsize+i);
给边缘规定一个特定的灰度级
理论基础
G[f(i,j)]={[f(i,j)-f(i-1,j)]2+[f(i,j)-f(i,j-1)]2}1/2
或G[f(i,j)]=|f(i,j)-f(i-1,j)|+|f(i,j)-f(i,j-1)|
La;G[f(i,j)]≥T
g(i,j)=
f(i,j);其它
La为一指定的灰度值
梯度大于30,La=255
根据梯度二值化图像
理论基础
对阶跃边缘,在边缘点其一阶导数取极值。
由此,对每个像素取它的梯度值G(i,j),适当取门限T作如下判断:
若G(i,j)>T则(i,j)→点为阶跃状边缘点
2、边缘检测
边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。
大多数是基于方向导数模板求卷积的方法。
将所有的边缘模板逐一作用于图像中的每一个像素,产生最大输出值的边缘模板方向,表示该点边缘的方向,如果所有方向上的边缘模板接近于零,该点处没有边缘;如果所有方向上的边缘模板输出值都近似相等,没有可靠边缘方向。
卷积
卷积可以简单的看成加权求和的过程。
本节介绍的算子有:
øRoberts边缘检测算子;
øSobel边缘检测算子;
øPrewitt边缘检测算子;
øLoG_Laplacian高斯-拉普拉斯算子。
(1)无方向一阶锐化---交叉微分
交叉微分算法(Roberts算法)计算公式如下:
特点:
算法简单Roberts边缘检测算子
(2)无方向一阶锐化——Sobel锐化
Sobel锐化的计算公式如下:
特点:
锐化的边缘信息较强
Sobel锐化
(2)无方向一阶锐化——Priwitt锐化算法
Priwitt锐化算法的计算公式如下:
特点:
与Sobel相比,有一定的抗干扰性。
图像效果比较干净。
几种方法的效果比较
⏹Sobel算法与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同。
⏹Roberts算法的模板为2*2,提取出的信息较弱。
⏹单方向锐化经过后处理之后,也可以对边界进行增强。
(3)二阶微分锐化——问题的提出
1)对于突变形的细节,通过一阶微分的极大值点,二阶微分的过0点均可以检测出来。
2)对于细线形的细节,通过一阶微分的过0点,二阶微分的极小值点均可以检测出来。
3)对于渐变的细节,一般情况下很难检测,但二阶微分的信息比一阶微分的信息略多。
二阶微分锐化——算法推导
⏹由前面的推导,写成模板系数形式形式即为Laplacian算子:
voidCDynSplitView:
:
OnLaplas()
{
//TODO:
在此添加命令处理程序代码
inti,j,df;
clearmem();//memcpy(image_out,image_in,m_imagex*m_imagey);
intysize=m_imagey,xsize=m_imagex;
intw[3][3]={{0,-1,0},{-1,4,-1},{0,-1,0}};
for(j=1;jfor(i=1;i{
df=(int)(*(image_in+(j-1)*xsize+i-1)*w[0][0]+
*(image_in+(j-1)*xsize+i-1)*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]
);
*(image_out+j*xsize+i)=int(abs(df));
}
Invalidate();
}
二阶微分锐化——Laplacian变形算法
为了改善锐化效果,可以脱离微分的计算原理,在原有的算子基础上,对模板系数进行改变,获得Laplacian变形算子如下所示。
二阶微分锐化——Wallis算法
⏹考虑到人的视觉特性中包含一个对数环节,因此在锐化时,加入对数处理的方法来改进。
在前面的算法公式中注意以下几点:
1)为了防止对0取对数,计算时实际上是用log(f(i,j)+1);
2)因为对数值很小log(256)=5.45,所以计算
时用46*log(f(i,j)+1)。
(46=255/log(256))
⏹算法特点:
Wallis算法考虑了人眼视觉特性,因此,与Laplacian等其他算法相比,可以对暗区的细节进行比较好的锐化。
一阶与二阶微分的边缘提取效果比较
⏹以Sobel及Laplacian算法为例进行比较。
⏹Sobel算子获得的边界是比较粗略的边界,反映的边界信息较少,但是所反映的边界比较清晰;
⏹Laplacian算子获得的边界是比较细致的边界。
反映的边界信息包括了许多的细节信息,但是所反映的边界不是太清晰。
voidCDynSplitView:
:
OnSobel()
{
//TODO:
在此添加命令处理程序代码
clearmem();//memcpy(image_out,image_in,m_imagex*m_imagey);
inti,j,fx,fy;
intysize=m_imagey,xsize=m_imagex;
intv[3][3]={{-1,0,1},{-1,0,1},{-1,0,1}},h[3][3]={{-1,-1,-1},{0,0,0},{1,1,1}};
for(j=1;jfor(i=1;i3.意愿调查评估法{
fx=(int)(*(image_in+(j-1)*xsize+i-1)*h[0][0]+
(6)对建设项目实施环境监测的建议。
*(image_in+(j-1)*xsize+i)*h[0][1]+
*(image_in+(j-1)*xsize+i+1)*h[0][2]+
*(image_in+j*xsize+i-1)*h[1][0]+
*(image_in+j*xsize+i)*h[1][1]+
*(image_in+j*xsize+i+1)*h[1][2]+
*(image_in+(j+1)*xsize+i-1)*h[2][0]+
*(image_in+(j+1)*xsize+i)*h[2][1]+
*(image_in+(j+1)*xsize+i+1)*h[2][2]
表三:
周围环境概况和工艺流程与污染流程;);
(1)安全预评价。
fy=(int)(*(image_in+(j-1)*xsize+i-1)*v[0][0]+
专项规划工业、农业、畜牧业、林业、能源、水利、交通、城市建设、旅游、自然资源开发有关的专项规划。
环境影响报告书*(image_in+(j-1)*xsize+i)*v[0][1]+
(3)评价单元划分应考虑安全预评价的特点,以自然条件、基本工艺条件、危险、有害因素分布及状况便于实施评价为原则进行。
*(image_in+(j-1)*xsize+i+1)*v[0][2]+
*(image_in+j*xsize+i-1)*v[1][0]+
(一)规划环境影响评价的适用范围和责任主体*(image_in+j*xsize+i)*v[1][1]+
*(image_in+j*xsize+i+1)*v[1][2]+
*(image_in+(j+1)*xsize+i-1)*v[2][0]+
*(image_in+(j+1)*xsize+i)*v[2][1]+
*(image_in+(j+1)*xsize+i+1)*v[2][2]
(2)生产、储存危险化学品(包括使用长输管道输送危险化学品)的建设项目;);
建设项目环境影响评价技术服务机构(以下简称“环评机构”)应当按照《建设项目环境影响评价资质管理办法》的规定申请建设项目环境影响评价资质(以下简称“环评资质”),经国家环境保护部审查合格,取得《建设项目环境影响评价资质证书》后,方可在环评证书规定的资质等级和评价和范围内从事环境影响评价技术服务。
*(image_out+j*xsize+i)=(int)sqrt((double)(fx*fx+fy*fy));//(int)(abs(fx)+abs(fy));
}
Invalidate();
}