图像的二维几何变换主要包含:刚性变换(rigidity)、相似变换(similarity)、仿射变换(affine)。三者之间的关系如下图所示:
一、齐次坐标
1、什么是齐次坐标
齐次坐标就是用一个n+1维向量表示n维向量
2、为什么要引入齐次坐标?
仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)和一次平移(加上一个向量),变换到另一个向量空间的过程。对于二维坐标系上的一个点(x,y),经过仿射变换后的点的坐标是(u,v),其数学表达式如下:
,其中
, 
缩放和旋转通过矩阵乘法实现,平移通过矩阵加法实现。通常情况下,几何变换不是单一的,一个物体可能涉及平移、旋转、缩放等多个变换,为了减少计算量,可以将多个变换矩阵合并为一个最终变换矩阵M = [ A B ]。此时几何变换的数学表达式如下:

但我们发现,永远也找不到这样的矩阵M,因为上面的等式是不成立的。为了解决这个问题,我们就增加一个维度,也就是构造齐次坐标矩阵,其数学表达式如下:

由上式看出仿射变换矩阵有a、b、c、d、e、f六个未知数,因此至少需要六个方程来求解,即需要三个坐标点对。
二、刚性变换
刚性变换最重要的特点就是变换前后目标 任意两点间距离不变,包含平移、旋转、翻转(镜像)三种。
1、平移

Halcon中向齐次变换矩阵添加平移分量的算子有以下两个:
(1)相对于全局(即固定)坐标系执行平移
hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
变换矩阵链如下:

(2)相对于局部坐标系(即图像原点,左上角)执行平移
hom_mat2d_translate_local( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
变换矩阵链如下:

注意:齐次矩阵以元组的形式逐行存储,最后一行通常不存储,因为它对于描述仿射变换的所有齐次矩阵都是相同的。如下所示:

只存储 [a, b, c, d, e, f]
(3)
举例说明两个平移算子的区别:
dev_close_window () dev_open_window (0, 0, 512, 512, 'white', WindowID) dev_set_draw ('margin') gen_rectangle1 (Rectangle, 200, 100, 400, 300) area_center (Rectangle, Area, Row, Column) *创建一个齐次单位矩阵,并添加缩放分量 hom_mat2d_identity (HomMat2DIdentity) hom_mat2d_scale (HomMat2DIdentity, 0.5, 0.5, Row, Column, HomMat2DScale) *相对于全局坐标系平移 dev_set_color ('green') hom_mat2d_translate (HomMat2DScale, 5, 5, HomMat2DTranslate1) affine_trans_region (Rectangle, RegionAffineTrans1, HomMat2DTranslate1, 'nearest_neighbor') *相对于局部坐标系平移 dev_set_color ('blue') hom_mat2d_translate_local (HomMat2DScale, 5, 5, HomMat2DTranslate2) affine_trans_region (Rectangle, RegionAffineTrans2, HomMat2DTranslate2, 'nearest_neighbor')
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/45566.html