Halcon中从两组点的对应关系生成仿射矩阵,及思考原理和代码实现

这篇具有很好参考价值的文章主要介绍了Halcon中从两组点的对应关系生成仿射矩阵,及思考原理和代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

halcon中有几个算子有点类似,看了下区别

1.vector_to_rigid( : : Px, Py, Qx, Qy : HomMat2D)

2.vector_to_similarity( : : Px, Py, Qx, Qy : HomMat2D)

3.vector_to_aniso( : : Px, Py, Qx, Qy : HomMat2D)

vector_to_rigid 这个是刚性变换,

vector_to_aniso,矩阵,线性代数

 只有旋转和平移。

vector_to_similarity 这个是相似变换

vector_to_aniso,矩阵,线性代数

旋转和平移,加各方向等比例缩放

 vector_to_aniso 仿射变换

vector_to_aniso,矩阵,线性代数

旋转、平移、各方向不同比例缩放

以上算子都可以到到对应的仿射矩阵。

思考原理,通过两组点怎么通过计算得到仿射矩阵

仿射矩阵形式为:

点A(x1,y1) 到点B(X1,Y1) 对用关系即为 X1=a1*x1+a2*y1+a3  Y1=a4*x1+a5*y1+a6

多个点就多个线性方程,最终是一个求解线性方程组的问题

转成矩阵形式即为(这里使用了3个点,可以更多)

在halcon中可以使用solve_matrix解矩阵

测试了两组数据,由点x变换到点y

x1:=[19,549]
x2:=[19,663]
x3:=[275,547]
x4:=[274,664]

y1:=[267,1134]
y2:=[331,1159]
y3:=[429,558]
y4:=[496,585]

用vector_to_aniso算子得到的变换矩阵为

[0.64363, 0.583832, -67.3593, -2.24947, 0.167049, 1087.92]

通过解矩阵方式得到的变换矩阵为

[0.64103, 0.569983, -58.5884, -2.25006, 0.215317, 1058.77]

基本一致,但为何不是相等,有点思路,但还没搞清楚

如图两个仿射变换如图

vector_to_aniso,矩阵,线性代数

 halcon代码文章来源地址https://www.toymoban.com/news/detail-704489.html

read_image (Image, 'printer_chip/printer_chip_01')

x1:=[19,549]
x2:=[19,663]
x3:=[275,547]
x4:=[274,664]


gen_cross_contour_xld (Cross1, 19, 549, 6, 0.785398)
gen_cross_contour_xld (Cross2, 19, 663, 6, 0.785398)
gen_cross_contour_xld (Cross3, 275, 547, 6, 0.785398)
gen_cross_contour_xld (Cross4, 274, 664, 6, 0.785398)
gen_rectangle2 (ROI_0, 382.107, 860.444, rad(15.9103), 294.57, 32.8626)


y1:=[267,1134]
y2:=[331,1159]
y3:=[429,558]
y4:=[496,585]


X1:=[x1[0],x2[0],x3[0],x4[0]]
Y1:=[x1[1],x2[1],x3[1],x4[1]]

X2:=[y1[0],y2[0],y3[0],y4[0]]
Y2:=[y1[1],y2[1],y3[1],y4[1]]


gen_contour_polygon_xld (Contour, X2, Y2)
vector_to_aniso(X1, Y1, X2, Y2, HomMat2D)
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')

create_matrix(8,6,0,MatrixA)
Values:=[x1[0],x1[1],1,0,0,0,0,0,0,x1[0],x1[1],1,x2[0],x2[1],1,0,0,0,0,0,0,x2[0],x2[1],1,x3[0],x3[1],1,0,0,0,0,0,0,x3[0],x3[1],1,x4[0],x4[1],1,0,0,0,0,0,0,x4[0],x4[1],1]
set_full_matrix (MatrixA, Values)

Values2:=[y1[0],y1[1],y2[0],y2[1],y3[0],y3[1],y4[0],y4[1]]
create_matrix(8,1,0,MatrixB)
set_full_matrix (MatrixB, Values2)

solve_matrix (MatrixA, 'general', 0, MatrixB, MatrixResultID)

get_value_matrix (MatrixResultID, 0, 0, Value1)
get_value_matrix (MatrixResultID, 1, 0, Value2)
get_value_matrix (MatrixResultID, 2, 0, Value3)
get_value_matrix (MatrixResultID, 3, 0, Value4)
get_value_matrix (MatrixResultID, 4, 0, Value5)
get_value_matrix (MatrixResultID, 5, 0, Value6)

myHom2d:=[Value1,Value2,Value3,Value4,Value5,Value6,0,0,1]

affine_trans_image (Image, ImageAffineTrans1, myHom2d, 'constant', 'false')

boundary (ImageAffineTrans, RegionBorder, 'inner')
boundary (ImageAffineTrans1, RegionBorder1, 'inner')

dev_display (Image)
dev_display (ImageAffineTrans)
dev_display (ImageAffineTrans1)

dev_set_color ('red')
dev_display (RegionBorder)


dev_set_color ('green')
dev_display (RegionBorder1)

dev_display (Contour)

到了这里,关于Halcon中从两组点的对应关系生成仿射矩阵,及思考原理和代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pycharm与Python版本对应关系

    一直用的老版本Pycharm(2018)和Python(3.6),最近需要用到python 3.10,电脑安装后发现配置Pycharm编译器时报[unsupported],查了下是因为Pycharm版本低导致,扒了下Pycharm官网,整理出各版本Pycharm和Python的对应关系,供参考~ Pycharm Python 2023.2 Python 2: 2.7 Python 3: =3.6, =3.12 2023.1 Python 2

    2024年02月08日
    浏览(34)
  • tensorflow和python版本对应关系

    参考在 Windows 环境中从源代码构建  |  TensorFlow (google.cn) 复制以便收藏 CPU 版本 Python 版本 编译器 构建工具 tensorflow-2.6.0 3.6-3.9 MSVC 2019 Bazel 3.7.2 tensorflow-2.5.0 3.6-3.9 MSVC 2019 Bazel 3.7.2 tensorflow-2.4.0 3.6-3.8 MSVC 2019 Bazel 3.1.0 tensorflow-2.3.0 3.5-3.8 MSVC 2019 Bazel 3.1.0 tensorflow-2.2.0 3.5-3.8 MSVC

    2024年02月07日
    浏览(55)
  • CUDA与PyTorch版本对应关系

    PyTorch版本 CUDA版本 1.2.0、1.4.0、1.5.0、1.5.1、1.6.0、1.7.0、1.7.1 9.2 1.0.0、1.0.1、1.1.0、1.2.0 10.0 1.4.0、1.5.0、1.5.1、1.6.0、1.7.0、1.7.1、1.8.1 10.1 1.5.0、1.5.1、1.6.0、1.7.0、1.7.1、1.8.0、1.8.1、1.8.2、1.9.0、1.9.1、1.10.0、1.10.1、1.11.0、1.12.0、1.12.1 10.2 1.7.0、1.7.1 11.0 1.8.0、1.8.1、1.8.2、1.9.0、1.9.

    2024年01月24日
    浏览(42)
  • Tomcat 与 JDK 对应版本关系

    对应关系 Tomcat版本     jdk版本 11.0.x  JDK 21及以后 10.1.x  JDK11及以后 10.0.x JDK1.8及以后 9.0.x  JDK1.8及以后 8.5.x JDK1.7及以后 8.0.x   JDK1.7及以后 查看对应关系方法: 登陆Tomcat官网:Apache Tomcat® - Welcome! 结果:

    2024年02月07日
    浏览(45)
  • Tomcat与JDK版本对应关系

    1.对应关系 Tomcat版本 jdk版本 11.0.x JDK 21及以后 10.1.x JDK11及以后 10.0.x JDK1.8及以后 9.0.x JDK1.8及以后 8.5.x JDK1.7及以后 8.0.x JDK1.7及以后 tomcat版本不能低于兼容的jdk的最低版本: 如果你的JDK版本是1.8,那么Tomcat版本必须在10.0.x以下; 如果你的JDK版本是1.7,那么Tomcat版本必须在8.5.x以

    2024年02月08日
    浏览(47)
  • springcloudalibaba和nacos版本对应关系

    因为公司项目需要升级springcloud的版本,升级后服务启动时连接不上nacos(如下图) 历程一 一开始直接百度“Client not connected, current status:STARTING”这个错误,说可能是因为版本问题,然后到官网找对个版本对应的关系图 我项目所用的版本是2021.0.5.0的,那么对应的nacos版本应该

    2024年01月25日
    浏览(44)
  • Kafka与Zookeeper版本对应关系

    比如: kafka_2.11-1.1.1.jar包 其中2.11表示的是Scala的版本,因为Kafka服务器端代码完全由Scala语音编写。”-“后面的1.1.1表示的kafka的版本信息。遵循一个基本原则,Kafka客户端版本和服务端版本应该保持一致,否则可能会遇到一些问题。 (与下文无关,仅作了解) 可以根据源码

    2024年02月13日
    浏览(34)
  • eclipse版本与jdk版本对应关系

     官网:Eclipse/Installation - Eclipsepedia eclipse历史版本(2007-):Older Versions Of Eclipse - Eclipsepedia                   Eclipse Packaging Project (EPP) Releases | Eclipse Packages    

    2024年02月14日
    浏览(48)
  • MySQL和MariaDB的版本对应关系

    MariaDB 10.0和MariaDB 10.1可以作为MySQL 5.6的有限替代。 MariaDB 10.2可以作为MySQL 5.7的有限替代。 一,目前最新版本 MariaDB 10.5.8 10.4.17 10.3.27 10.2.36 MySQL 8.0.23 二,oracle MySQL版本和MariaDB版本对应表: MariaDB版本                               MySQL版本 MariaDB 10.3 发布时间2018     

    2024年02月12日
    浏览(56)
  • Python和Anaconda的版本对应关系

    原文链接 Python和Anaconda的版本对应关系如下: 数据来自Anaconda官网:Old package lists — Anaconda documentation     学习更多编程知识,请关注我的公众号: 代码的路    

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包