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

【Halcon】 affine_trans_image 算子详解

📌 算子签名

affine_trans_image(Image : ImageAffineTrans : HomMat2D, Interpolation, AdaptImageSize)
  • Image:输入图像。
  • ImageAffineTrans:输出变换后的图像。
  • HomMat2D:描述仿射变换的 2D 齐次变换矩阵。
  • Interpolation:插值方法,决定变换时的像素值计算方式。
  • AdaptImageSize:布尔值,指示是否调整输出图像尺寸以适应变换后的图像。

🧠 算法原理

affine_trans_image 通过应用仿射变换矩阵 HomMat2D,对输入图像进行几何变换。该矩阵可以通过以下算子生成:([博客园][2])

  • hom_mat2d_identity:创建单位矩阵。
  • hom_mat2d_translate:添加平移。
  • hom_mat2d_rotate:添加旋转。
  • hom_mat2d_scale:添加缩放。

这些变换可以组合使用,以实现复杂的图像变换。


⚙️ 参数详解

1. HomMat2D(仿射变换矩阵)

该矩阵定义了图像的几何变换,包括:

  • 缩放:调整图像尺寸。
  • 旋转:围绕指定点旋转图像。
  • 平移:移动图像位置。
  • 倾斜(斜切):改变图像形状。

可以通过组合上述算子生成所需的变换矩阵。

2. Interpolation(插值方法)

决定变换后像素值的计算方式,常用方法包括:

  • ‘nearest_neighbor’:最近邻插值,速度快,但可能导致图像锯齿。
  • ‘bilinear’:双线性插值,平衡速度和质量。
  • ‘constant’:在图像边界外使用常数值填充。
  • ‘weighted’:加权插值,适用于高质量需求。

3. AdaptImageSize(是否调整图像尺寸)

  • ‘true’:输出图像尺寸会根据变换自动调整,避免裁剪。
  • ‘false’:输出图像尺寸与输入图像相同,可能导致部分区域被裁剪。

📐 坐标系注意事项

在 HALCON 中,affine_trans_image 使用的坐标系原点位于图像的左上角(像素的左上角),而非像素中心。这与某些算子(如 affine_trans_pixel)一致,但与 HALCON 的标准坐标系(原点在像素中心)不同。因此,在创建变换矩阵时,需注意坐标系的一致性,以避免意外的变换结果。


💻 示例代码

以下是一个使用 affine_trans_image 进行图像旋转和缩放的示例:

read_image(Image, 'example_image')
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, rad(45), 256, 256, HomMat2DRotate)
hom_mat2d_scale(HomMat2DRotate, 1.5, 1.5, 256, 256, HomMat2DScale)
affine_trans_image(Image, ImageAffineTrans, HomMat2DScale, 'bilinear', 'true')

该示例中,图像首先绕点 (256, 256) 旋转 45 度,然后以同一点为中心进行 1.5 倍的缩放,最后应用双线性插值,并调整输出图像尺寸以适应变换后的图像。


🧰 应用场景

  • 图像校正:纠正图像中的旋转、倾斜等畸变。
  • 模板匹配:将模板图像与目标图像对齐,以进行匹配和识别。
  • 图像增强:对图像进行缩放、旋转等操作,以增强图像特征。
  • 图像拼接:将多个图像通过仿射变换拼接成一个完整图像。

思考

我利用 affine_trans_image 对图片进行的旋转,发现图片发生了一定的变化。
这个是 affine_trans_image 会用到一些插值算法导致的。 我们下一篇继续分析。

http://www.xdnf.cn/news/9419.html

相关文章:

  • vue组件和插件的区别
  • Kafka KRaft + SSL + SASL/PLAIN 部署文档
  • 【剑指offer】链表 系列
  • 万字详解RTR RTSP SDP RTCP
  • DeepSeek R1模型已完成小版本试升级
  • Unity屏幕适配——背景适配
  • leetcode 3372. 连接两棵树后最大目标节点数目 I
  • P8-大模型微调
  • Day05
  • Vuer开源程序 是一个轻量级的可视化工具包,用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR,可以在移动设备上运行。
  • Ethan的日记5/28
  • leetcode0670. 最大交换-medium
  • 让 Deepseek GPS测速
  • 电脑革命家测试版:硬件检测,6MB 轻量无广告 清理垃圾 + 禁用系统更新
  • Oracle Linux 9 安装 EMCC 13.5:避坑细节与实战经验汇总!
  • GO——内存逃逸分析
  • Flutter、React Native、Unity 下的 iOS 性能与调试实践:兼容性挑战与应对策略(含 KeyMob 工具经验)
  • 云服务器是什么,和服务器有什么区别?
  • 系统赛数据库的一些记录
  • 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
  • flutter简单自定义跟随手指滑动的横向指示器
  • Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required
  • 代码输出题:异步事件循环
  • Spring boot 策略模式
  • YOLOv5 详解:从原理到实战的全方位解析
  • 35. 自动化测试开发之使用oracle连接池实现oracle数据库操作
  • 34. 自动化测试开发之使用mysql异步连接池实现mysql数据库操作
  • 碰一碰系统源码搭建
  • DH加密详解
  • 什么是PLM系统?PLM主要功能有哪些?2025主流PLM系统介绍