当前位置: 首页 > article >正文

Halcon3D gen_image_to_world_plane_map的理解和实用

一,算子的参数介绍

1.1 怎么理解的

1)就是我有一张二维图像,在自己的物体坐标系下看比如它是四方四正的,相机从各个角度拍照,会得到不同的image像素图,这些像素图像会变得扭曲,或者不平行。 gen_image_to_world_plane_map的作用是形成一个map图,将像素图返回到原始四方四正图像。
2)像不像,投影变换project

1.2 参数介绍

Map : 输出map图,用于map_image
CameraParam, 相机的的内参
WorldPose, 要映射的物体坐标系(这里是相机拍摄的角度)
WidthIn, HeightIn, 像素图的宽度和高度
WidthMapped, HeightMapped, 映射回去后,map_image将得到的图像的宽度和高度,这个值可以比实际值大,但是不可以比实际值小,小于理论值时,超出部分将被裁剪。
Scale, 这个挺有意思,可以理解为map_image得到的对应图像的每个像素的尺寸
MapType : map的计算方式

二,注意事项

在像素image往map图映射过程中,落在以pose形成的坐标系中,只有x+,y+位置的像素点才回保留,出现x-,y-位置的像素点会被剔除,这个在实例中会进行展示。
放两张图看看,被剔除的部分
在这里插入图片描述
正常的map图像
在这里插入图片描述

在一段halcon自己捋的代码里,感悟一下

ImgPath := '3d_machine_vision/multiple_cameras/'
gen_cam_par_area_scan_division (0.01619, -734.789, 7.402e-006, 7.4e-006, 324.911, 256.894, 640, 480, CamParam1)
read_image (Image1, ImgPath + 'camera1_ref')
get_image_size (Image1, Width, Height)
WindowScale := 0.66
dev_open_window (0, 0, Width * WindowScale, Height * WindowScale, 'black', WindowHandle1)
dev_open_window (0, Width * WindowScale + 6, Width * WindowScale, Height * WindowScale, 'black', WindowHandle2)

CaltabName := 'caltab_30mm.descr'
create_calib_data ('calibration_object', 1, 1, CalibDataID)
set_calib_data_calib_object (CalibDataID, 0, CaltabName)
set_calib_data_cam_param (CalibDataID, 0, [], CamParam1)

find_caltab (Image1, CalPlate, CaltabName , 3, 112, 5)
find_marks_and_pose (Image1, CalPlate,CaltabName, CamParam1, 128, 10, 18, 0.9, 15, 100, RCoord, CCoord, StartPose)

****查看物体坐标系在图片中的位置
pose_to_hom_mat3d (StartPose, HomMat3D)
affine_trans_point_3d (HomMat3D,0, 0, 0, Qx, Qy, Qz)
project_3d_point (Qx, Qy, Qz, CamParam1, Row, Column)
gen_circle (Circle, Row, Column, 10)

****00点在物体坐标系的位置
image_points_to_world_plane (CamParam1, StartPose, 0, 0, 'm', X0, Y0)
****对角点在物体坐标系中的位置
image_points_to_world_plane (CamParam1, StartPose, 480, 640, 'm', X1, Y1)
****图像在世界坐标系中的宽度,和高度
h:=Y1-Y0
w:=X1-X0
*****当映射过来的图像每个像素尺寸为0.0001时
pixsize:=0.0001
width:=round(w/pixsize)
hight:=round(h/pixsize)
*****映射过来将要形成的是一张583*806的图像

*这里要注意的是映射过来的点如果落在-x,-y轴的区域会自动被裁剪掉
gen_image_to_world_plane_map (Map, CamParam1, StartPose, Width, Height, width, hight, pixsize, 'bilinear')
map_image (Image1, Map, ImageMapped)

*****如何解决这个问题,需要将pose的中心参考点,挪到图像顶点对应的位置
set_origin_pose (StartPose, X0, Y0, 0, PoseNewOrigin)
gen_image_to_world_plane_map (Map, CamParam1, PoseNewOrigin, Width, Height, width, hight, pixsize, 'bilinear')
map_image (Image1, Map, ImageMapped)
*****完成了修正


http://www.kler.cn/a/393630.html

相关文章:

  • Springboot配置全局异常通用返回
  • 设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
  • 淘宝代购系统;海外代购系统;代购程序,代购系统源码PHP前端源码
  • 基于微信小程序的农场管理系统的设计与实现,LW+源码+讲解
  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • 【最新版】Stable Diffusion4.9(AI绘画)下载及安装教程(附软件安装包)!
  • github SSH连接(windows)
  • 关于我重生到21世纪学C语言这件事——指针详解(1)
  • 基于MATLAB的图片中文字的提取及识别
  • 使用Git进行项目管理
  • ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
  • C语言打印时间精确到毫秒
  • Docker运行一个fio工具镜像
  • 《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址
  • vue中setup语法糖的优点
  • 今日 AI 简报 | 开源 RAG 文本分块库、AI代理自动化软件开发框架、多模态统一生成框架、在线图像背景移除等
  • cursor+QT5.12.12
  • 无需云端!国产开源大语言模型llama.cpp本地实战
  • mysql时间时区修改、set global、配置文件-default-time-zone
  • Prettier - Code formatter插件使用(前端美化插件)
  • 数据中心的拥塞控制
  • 在 Linux 系统上部署 Apache Solr
  • 基于Python的网上银行综合管理系统
  • 大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)
  • WebSocket和HTTP协议的性能比较与选择
  • 第四十四章 Vue之actions/mapActions/getters