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

【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 会用到一些插值算法导致的。 我们下一篇继续分析。

相关文章:

  • 构建安全高效的邮件网关ngx_mail_ssl_module
  • 【iOS】源码阅读(五)——类类的结构分析
  • 数字孪生赋能智能制造:某汽车发动机产线优化实践
  • SQL中各个子句的执行顺序
  • 亚远景-ISO 21434标准:汽车网络安全实践的落地指南
  • DBus总线详解
  • c++ 拷贝构造函数
  • vue 中的ref属性
  • Grafana-Gauge仪表盘
  • git配置(1): 根据remote自动选择账号执行commit
  • 【掌握文件操作】(下):文件的顺序读写、文件的随机读写、文件读取结束的判定、文件缓冲区
  • C++异常处理机制
  • :inline=“true“会发生什么
  • 酒店用品源头厂家推荐
  • SQL中的锁机制
  • mybatis的mapper对应的xml写法
  • 如何解决网站服务器的异常问题?
  • Gin项目脚手架与标配组件
  • 网站服务器出现异常的原因是什么?
  • 回头看,FPGA+RK3576方案的功耗性能优势
  • 黄冈商城网站建设/360网站推广怎么做
  • 淄博网站建设服务/互动营销用在哪些推广上面
  • 爱站攻略/人民日报最新头条10条
  • 海外网站建设平台/怎么做小程序
  • 网站如何做电脑和手机/互联网营销师培训内容
  • 网站建设询价函/网络推广员是什么