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

触觉地图二值图像相似度比较的理想方法及Matlab检测优化需求

解决方案:触觉地图二值图像的线段检测与相似度评分

一、手绘地图的鲁棒线段检测改进方案

传统Hough变换对带锯齿、曲线化的手绘线条适配性差,核心问题是手绘线条边缘离散、断裂多,细化后仍有大量噪声干扰线段聚合。以下是针对性改进:

1. 预处理优化:替代Canny+细化的流程

  • 先做形态学闭运算填补手绘线条的微小断裂:bwmorph(handdrawn_img, 'close', 2)(可根据线条粗细调整迭代次数),避免后续检测出过多细碎边缘。
  • 直接对二值图像做骨架提取+噪声过滤:用bwmorph(img, 'skel', Inf)提取线条骨架,再用bwareaopen(skel_img, 15)过滤掉短于阈值的毛刺噪声(阈值可根据实际线条尺寸调整)。

2. 鲁棒线段检测:RANSAC拟合+线段聚类

放弃Hough变换,改用RANSAC拟合直线配合线段聚类,适配离散的手绘线条:

  • 提取骨架图像的所有坐标点:[y, x] = find(skel_img); points = [x, y];
  • 用RANSAC迭代拟合直线:每次随机选2个点生成直线,统计符合距离阈值的内点,保留内点最多的直线后移除对应点,重复直到剩余点不足。
  • 对拟合出的短线段做聚类合并:计算线段的方向角和端点距离,将方向接近(如角度差≤5°)、端点间距小的线段合并为完整线段。
  • Matlab代码示例:
[y, x] = find(skel_img);
points = [x, y];
min_inliers = 20; % 适配手绘线条的内点数量阈值
distance_thresh = 3; % 点到直线的距离容忍阈值
lines = [];

while size(points, 1) >= 2
    % RANSAC随机选点生成初始直线
    idx = randperm(size(points, 1), 2);
    p1 = points(idx(1), :);
    p2 = points(idx(2), :);
    % 直线方程ax+by+c=0
    a = p2(2) - p1(2);
    b = p1(1) - p2(1);
    c = p2(1)*p1(2) - p1(1)*p2(2);
    % 计算所有点到直线的距离
    distances = abs(a*points(:,1) + b*points(:,2) + c) / sqrt(a^2 + b^2);
    inliers = points(distances <= distance_thresh, :);
    
    if size(inliers, 1) >= min_inliers
        % 最小二乘法重新拟合直线提升精度
        coeffs = polyfit(inliers(:,1), inliers(:,2), 1);
        m = coeffs(1);
        b_line = coeffs(2);
        % 确定线段端点(取内点极值)
        x_min = min(inliers(:,1)); x_max = max(inliers(:,1));
        y_min = m*x_min + b_line; y_max = m*x_max + b_line;
        lines = [lines; x_min, y_min, x_max, y_max];
        % 移除已拟合的内点
        points = points(distances > distance_thresh, :);
    else
        break;
    end
end
% 线段聚类合并(需自行实现:基于角度、端点距离的合并逻辑)
merged_lines = merge_lines(lines, angle_thresh=5, distance_thresh=10);

3. 尺度与旋转不变性预处理

  • 尺度归一化:计算两幅图像的最小外接矩形,将两者缩放到相同尺寸(如统一为500x500),消除尺寸差异。
  • 旋转对齐:对骨架图像做PCA分析,提取主方向(最长线段的方向),将两幅图像旋转至主方向一致(如主方向水平),后续对比无需考虑旋转差异。

二、相似度评分体系实现

1. 线段级匹配评分

  • 长度相似度:对匹配的线段对,计算1 - abs(len_handdrawn/len_template - 1)作为单条线段的长度得分,加权平均所有匹配线段的得分。
  • 夹角相似度:因已对齐主方向,直接计算线段角度差,得分取1 - abs(angle_handdrawn - angle_template)/180,加权平均所有匹配线段的得分。

2. 节点/交点正确性评分

  • 提取两幅图像的交点:对检测到的线段,计算所有线段对的交点,过滤掉距离线段端点过近的误判点。
  • 最近邻匹配:对模板的每个交点,在手绘图像的交点中寻找距离最近的点(距离阈值根据图像尺寸设定),得分=匹配成功的交点数/模板交点总数。

3. 局部与全局结构相似度

  • 局部结构:将图像划分为网格(如10x10),统计每个网格内的线段数量、平均角度、平均长度,计算单个网格的结构相似度后加权平均,得到局部得分。
  • 全局结构:以交点为节点、线段为边构建拓扑图,计算两幅图的图编辑距离(或节点/边的匹配度),作为全局结构得分。

三、整体流程

  1. 对模板和手绘图像分别执行:二值化→形态学闭运算→骨架提取→噪声过滤→尺度归一化→主方向对齐。
  2. 用RANSAC+线段聚类检测两幅图像的完整线段。
  3. 提取交点并构建拓扑图。
  4. 分别计算线段长度、夹角、交点正确性、局部/全局结构的得分,加权得到最终相似度评分(权重可根据需求调整,如交点正确性权重占比更高)。

内容的提问来源于stack exchange,提问作者Michael Liang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:43:10