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

【Halcon 】Halcon 裁剪尺寸的像素陷阱全解析:为什么要 -0.5,为什么要 -1,而圆却不用?

Halcon 裁剪尺寸的像素陷阱全解析:为什么要 -0.5,为什么要 -1,而圆却不用?

在使用 Halcon 进行 ROI 裁剪时,很多开发者都会踩到一个经典的坑:
明明定义了 512x512 的矩形,结果却得到了 513x513 的图像!更奇怪的是,使用 HDrawingObject.RECTANGLE1 又要减 1,但 gen_circle 生成圆时却不用做任何修正。

本文将从 Halcon 坐标体系 → 区域落格规则 → 三种典型情况(矩形、RECTANGLE1、圆) 出发,带你彻底弄清这个差异的根源。


1. Halcon 坐标体系与像素规则

  • 像素坐标定义
    Halcon 中 (0,0) 不是像素的左上角,而是 像素的中心点

  • 像素格子范围
    一个像素(Row, Col)大致覆盖:

    (Row - 0.5, Col - 0.5) ~ (Row + 0.5, Col + 0.5)
    
  • 区域落格规则
    Halcon 的 Region 是几何对象。生成 Region 后,会将其与像素格对齐:
    👉 只要像素中心落在区域内,该像素就会被包含。


2. gen_rectangle2:为什么要 -0.5?

gen_rectangle2 定义方式:

gen_rectangle2 (Rectangle, Row, Col, Phi, Length1, Length2)
  • Length1Length2 表示 中心到边界的几何距离
  • 假设 Length1 = 256,矩形范围就是 Row±256

问题来了:

  • 这个范围会包含从 Row-256Row+256,总共有 513 个像素
  • 因为两端都正好压在像素中心上,Halcon 会把两端的像素都算进来。

解决办法
👉 将长度减去 0.5

gen_rectangle2 (Rectangle, Row, Col, 0, 255.5, 255.5)

这样矩形边界落在像素格的边缘上,正好覆盖 512 个像素。

结论
gen_rectangle2 是几何定义,需 -0.5 来对齐像素格。


3. HDrawingObject.RECTANGLE1:为什么要 -1?

HDrawingObject.RECTANGLE1 定义方式:

HDrawingObject rectObj = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1,row1, col1, row2, col2);

这里 (row1, col1)(row2, col2) 是对角点,表示像素索引范围。

理论上:

  • [row1, row2] 应该包含 row2 - row1 + 1 个像素。
  • 例如 (0,0) ~ (511,511)512x512

但在实际转换为 Region 时,Halcon 内部会多包一格,导致变成 513x513
👉 实测表明,必须把右下角坐标减 1

row2 = row2 - 1;
col2 = col2 - 1;

结论
RECTANGLE1 定义的是像素索引,但 HDrawingObject → Region 转换时有偏移。
-1.0 来抵消。


4. gen_circle:为什么不用修正?

gen_circle 定义方式:

gen_circle (Circle, Row, Col, Radius)

半径表示几何意义的距离:

  • 所有 到中心点距离 ≤ Radius 的点都在区域内。
  • 边界是连续曲线,不会整齐对齐到像素格。

落格时,Halcon 直接按照“像素中心是否落在圆内”来判断。
由于边界不会卡在像素格线上,所以不会出现“多一整行/列”的情况。

结论
圆形天然避免了矩形的“整齐对齐”问题 → 不需要修正


5. 总结对比

ROI 类型定义方式默认结果修正方法
gen_rectangle2几何中心+长宽多 1 像素 (513x513)Length - 0.5
RECTANGLE1 (HDrawingObject)两个角点索引多 1 像素 (513x513)row2-1, col2-1
gen_circle中心点+半径无偏差无需修正

6. 一句话记忆

  • 几何矩形 (gen_rectangle2):边界压格子 → 减 0.5
  • 像素矩形 (RECTANGLE1):多包一格 → 减 1
  • 圆 (gen_circle):边界不对齐,不存在偏差 → 不用减

7. 结语

Halcon 的 ROI 裁剪看似简单,但几何定义和像素索引的差异,常常让开发者掉坑。
理解 坐标系、落格规则和三种典型 ROI 的区别,就能避免莫名其妙的 513x513 尴尬。

下次再遇到 ROI 偏差,只要记住这句话:
👉 矩形减 0.5,RECTANGLE1 减 1,圆不用减!


文章转载自:

http://ZaNrufAa.xtzkx.cn
http://FNEH8YRW.xtzkx.cn
http://WfSlLWbB.xtzkx.cn
http://ul2a0T6B.xtzkx.cn
http://pGJSRJis.xtzkx.cn
http://dYsYEydC.xtzkx.cn
http://ky4BlK5l.xtzkx.cn
http://nNUfzCT1.xtzkx.cn
http://4YWXwMPT.xtzkx.cn
http://c9qESlPi.xtzkx.cn
http://sf3anbpb.xtzkx.cn
http://3LhqhX0T.xtzkx.cn
http://NhNovw4A.xtzkx.cn
http://VZkPXNRV.xtzkx.cn
http://IdeJKCMH.xtzkx.cn
http://5vXYLnK9.xtzkx.cn
http://m3IGDs6S.xtzkx.cn
http://1q4wiOBe.xtzkx.cn
http://E9pXZnhN.xtzkx.cn
http://y2UxKpzX.xtzkx.cn
http://zwx0UqqO.xtzkx.cn
http://VodKrzCY.xtzkx.cn
http://0933gS4H.xtzkx.cn
http://yxNKKDe9.xtzkx.cn
http://RwnEa6dC.xtzkx.cn
http://777CwO9w.xtzkx.cn
http://rfL5sPI1.xtzkx.cn
http://s1GN7VXC.xtzkx.cn
http://Yr3pXuGs.xtzkx.cn
http://E8YuvtUW.xtzkx.cn
http://www.dtcms.com/a/376861.html

相关文章:

  • 机器视觉质检数据融合PLM:产品缺陷根因分析新范式
  • 【超详细图文教程】2025年最新Win10 系统安装 MySQL 教程
  • 医疗行业面临的网络安全挑战及应对策略
  • JVM CMS垃圾回收器深度解析
  • 鸿蒙Next ArkWeb进程解析:多进程架构如何提升Web体验
  • Credo发布专为低功耗、高带宽与超低时延的AI网络打造的Bluebird 1.6T光DSP芯片
  • Shell 循环语句与函数全解析
  • Zookeeper核心知识全解:节点类型、集群架构与选举机制
  • Android 项目中 Gradle 配置实战:多渠道打包、签名配置、版本管理
  • 新手向:实现验证码程序
  • 【小程序】微信小程序隐私协议
  • LeetCode 刷题【71. 简化路径】
  • 【LeetCode 每日一题】1493. 删掉一个元素以后全为 1 的最长子数组——(解法一)预处理
  • Java代理模式详解
  • 【论文阅读】MEDDINOV3:如何调整视觉基础模型用于医学图像分割?
  • 超声波探伤的所用到的频段?
  • 关于ping不通,如何排查?
  • const allImages = { ...leftCategoryImages, ...rightCategoryImages }; 是是什么用法
  • 论文阅读:arxiv 2023 Large Language Models are Not Stable Recommender Systems
  • Transformer系列 | Pytorch复现Transformer
  • 神经网络常见层速查表
  • 算法练习——55.跳跃游戏
  • linux驱动开发
  • 今日分享 二分算法及多语言实现
  • 【代码随想录算法训练营——Day8】字符串——344.反转字符串、541.反转字符串II、卡码网:54.替换数字
  • 软件项目验收中第三方检测服务总流程
  • Python采集1688拍立淘按图搜索,json数据返回
  • 【卷积神经网络详解与实例】4——感受野
  • 多模态学习双核引擎:对齐建立连接,融合释放价值
  • unity开发类似个人网站空间