You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何平滑骨架化图像并判断指定点是否位于平滑后的骨架线上

骨架平滑与水平点位判定落地方案

input image

骨架平滑预处理

之前筛选最大轮廓无法定位水平段,核心原因是原始骨架带毛刺、杂分支,轮廓包含了所有非水平结构的信息,先做平滑清理:

  • 先做二值化校验:确认输入是单像素宽的二值骨架图(骨架为白色前景、背景为黑色),如果骨架宽度大于1像素,先跑一遍Zhang-Suen细化算法,把骨架收敛到单像素宽度,避免后续计算宽度干扰结果。
  • 修剪毛刺:遍历所有骨架点,统计每个点8邻域内连通的骨架点数量,邻域连通数为1的点就是骨架端点;从每个端点出发沿连通域遍历,总长度小于设定阈值(参考值10像素,可根据图中毛刺大小调整)的短分支直接置为背景,重复迭代2-3次即可清除所有小毛刺,不会破坏主骨架结构。
  • 可选顺滑处理:如果需要骨架线条更流畅,用大小为15像素的滑动窗口逐段对骨架点做2次多项式拟合重采样即可,不要做全局拟合,避免把水平段拉变形。

水平骨架段定位

按方向特征筛选,不用依赖轮廓面积:

  • 骨架拆段:对修剪完成的骨架跑概率霍夫线变换,参数设置为仅检测长度大于50像素的连续线段,把完整骨架拆分为独立的直线段集合。
  • 水平段初筛:对每一条检测出的线段,计算两端点y坐标差和线段总长度的比值,比值小于0.1(对应线段倾斜角小于6度,接近水平)的线段归入水平候选集。
  • 目标段锁定:在候选集中找到x方向覆盖范围包含图像水平中心、中点y坐标最接近图像垂直中心的线段,就是你要找的水平面主骨架。

指定点是否在水平线上的判定

以判定点(x, y) = (530, 355)为例,两种方法可直接落地:

  • 快速判定:提取目标水平段的y值波动范围、左右端点x坐标范围,如果待判定点的y值落在水平段y范围±2像素容差区间内,且x值落在左右端点的x区间内,即可判定点在该水平段上。
  • 精准判定:计算待判定点到目标水平段的垂直距离,距离小于2像素(单像素骨架留1-2像素容差抗锯齿)即判定为在线段上;如果需要判断点是否落在骨架任意水平区段,只需遍历所有候选水平段计算点到线段的距离,任意一段满足距离阈值即可判定为真。

之前用最大轮廓方案失效的原因:最大轮廓是整个骨架的外边界,会把斜向分支、垂直分支的信息全部包含在内,没有按线段方向做特征筛选,自然无法单独提取出水平段。

内容的提问来源于stack exchange,提问作者Kimwaga Makono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:45:39