动画人脸 形状匹配过程

13.2形状匹配(一)

边缘模板匹配处理思路
考虑使用边缘轮廓(XLD)模板匹配主要是出于目标物体在图像中被遮挡或者干扰(非线性光照变化)情况;使用轮廓边缘模板匹配的最大的难点在于提取图像的XLD,如何恰当的分割边缘轮廓。
       边缘轮廓匹配的几种思路:
(1)直接使用模板的边缘(XLD)与图像中的边缘比较,计算相似度。
(2)将图像中提取的边缘轮廓分割成多个几何基元(直线、圆、椭圆),然后在图像中匹配这些分割得到的几何基元,然后计算相似度。
(3)获得模板中边缘轮廓(XLD)的关键点或者突变点,然后在图像中匹配这些关键点,然后计算相似度。
       在计算图像边缘与模板边缘直接相似度,一般采用图像边缘点与模板边缘点之间的距离作为相似度。距离的表达有多种,一般是模板所有边缘点与离它最近的图像边缘点之间的均方距离最小,期间可以采用距离变换找出最近距离,也可以缩小搜索的范围,然后计算相似度的局部最小值。

基于形状匹配处理思路
         基于像素点方向向量匹配一般不受边缘提取影响,同样适合部分遮挡和非线性光照变化的影响。
         此模板匹配的相似度不仅包括像素点以及像素点方向向量,将模板图像转换成方向向量图像,可以使用边缘提取获得相应的方向向量图像,使用模板像素点的方向向量与图像相应点位置的方向向量做点积的总和,消除光照影响同样要做归一化处理,以此值作为匹配的分值,假如物体有遮挡一半,那匹配值不会超过0.5.
      形状匹配优点:
(1)精度高
(2)支持X/Y方向放缩
(3)支持目标物体部分遮挡
(4)支持多模板
(5)支持非线性光照变化

算子讲解:
(1) inspect_shape_model(Image:ModelImges,ModelRegions:NumLevel,Contrast:)
    作用:根据金字塔层数和对比度检查要生成的模板是否合适
       Image:输入的图像
       ModelImages:获得金字塔图像
       ModelRegions:模板区域
       NumLevels:金字塔层数
       Contrast:对比度
       一般在创建模板之前可以使用此算子,通过不同的金字塔层数和对比度;检查要生成的模板是否合适;
处理结果:
     
                  (a)获得的金字塔图像                    (b)模板区域
(2)create_scaled_shape_mode(Template:NumLevels,AngelStart,AngleExtent,AngleStep,ScaleMin,ScaleMax,ScaleStep,Optimization,Metric,Contrast,MinContrast:ModelID)
功能:使用图像创建带有缩放的匹配模板;
Template:制作模板的图像;
NumLevels:最高金字塔层数
AngleStart:开始角度
AngleStep:旋转角度步长
ScaleMin:模板缩放最小尺度
ScaleMax:模板缩放最大尺度
Optimization:优化选项,是否减少模板点数;
Metric:匹配度量极性选择
Contrast:阈值或滞后阈值来表示对比度
MinContrast:最小对比度
ModelID:生成模板ID
进行模板匹配的图像
(3)寻找模板
find_scale_shape_model(Image::ModelID,AngleStart,AngleExtent,ScaleMin,ScaleMax,MinScore,NumMatches,MaxOverlap,SubPixel,NumLevels,Greediness:Row,Column,Angel,Scale,Score)
作用:寻找单个带尺度形状模板最佳匹配
Image:要搜索的图像
ModelID:模板ID
AngleStart:开始角度
AngleExtent:角度范围
ScaleRMin:模板行方向缩放最小尺度
ScaleRMax:模板列方向缩放最大尺度
MinScore:最低分值(模板多少部分匹配出来,可以理解为百分比)
NumMatches:匹配实例个数
MaxOverlap:最大重叠
SubPixel:是否亚像素精度(不同模式)
NumLevels:金字塔层数
Greediness:搜索贪婪度。0安全/慢,1快不稳定有可能搜索不利;0.9
Row,Column,Angle,获得的坐标、角度、缩放
Score:获得模板匹配分值,这里为0.978037
(4)获得模板轮廓参数
get_shape_model_contours(:ModelContours:ModelID,Level:)
作用:获取形状模板的轮廓
ModelContours:得到的轮廓XLD
ModelID:输入模板ID
Level:对应金字塔层数
处理结果:
                    模板的轮廓
(5)循环显示模板位置

通过点角度生成齐次变换矩阵(包括旋转平移)

vector_angle_to_rigid( : : Row1Column1Angle1Row2Column2Angle2 : HomMat2D)
功能:通过点和角度计算刚性仿射变换
描述:vector_angle_to_刚性计算一个严格的仿射变换,即。,一个由一个点对应和两个同位角组成的旋转和平移的变换,并将其作为齐次变换矩阵HomMat2D返回。该矩阵由两个分量组成:一个旋转矩阵R和一个平移向量t(也可以看到hom_mat2d_rotate和hom_mat2d_translate):

 
 
 read_image (Model, 'D:/文档程序图/halcon图片/HALCON学习教程书中相关部分图片/model.jpg')
*检查要生成的模板是否合适
inspect_shape_model (Model, ModelImages, ModelRegions, 3, 70)
*创建尺度形状模板
create_scaled_shape_model (Model, 3,rad(-20), rad(115), 0.0175, 0.5, 1.0, 'auto', 'auto', 'ignore_global_polarity', 70, 10, ModelID1)
*保存模板
write_shape_model (ModelID1,'E:/halcon/dhrenlian.shm')
*读取模板
read_shape_model ('E:/halcon/dhrenlian.shm', ModelID)
*读取图像
read_image (Touxiang1, 'D:/文档程序图/halcon图片/HALCON学习教程书中相关部分图片/touxiang1.jpg')
*寻找模板
find_scaled_shape_model (Touxiang1, ModelID, rad(-20), rad(115),0.5,1.0, 0.5, 0,0.5, 'none', 3, 0.9, Row, Column, Angle, Scale, Score)
*获得模板轮廓参数
get_shape_model_contours(ModelContours,ModelID,1)
*循环显示模板位置
for I:=0 to |Score|-1 by 1
    *通过点角度生成齐次变换矩阵(包括旋转平移)
    vector_angle_to_rigid (0,0,0,Row[I],  Column[I], Angle[I], HomMat2DRotat)

*增加放缩到齐次变换
hom_mat2d_scale (HomMat2DRotat, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
*实现仿射变换
affine_trans_contour_xld (ModelContours, ModelTrans, HomMat2DScale)
dev_display (ModelTrans)
stop ()
endfor
*清除模板释放内存
clear_shape_model (ModelID1)


      模板图片
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值