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

Skimage RANSACRegressor报错:至少需要2个输入点(附复现代码)

问题分析与解决:scikit-image RANSAC 报错 "At least 2 input points needed."

环境

  • scikit-image:0.19.3

复现代码

from skimage.measure import LineModelND, ransac
import numpy as np

pts = np.array([[579,298],
 [604,276],
 [354,241],
 [156,240],
 [124,157],
 [625,105]])

model, inliers = ransac(pts, LineModelND, min_samples=4,residual_threshold=2, max_trials=1000)

报错信息

At least 2 input points needed.

报错位置:skimage/measure/fit.py 第92行

原因分析

这个错误的核心触发逻辑是:RANSAC随机采样min_samples=4个点时,部分采样组合的点集在LineModelND拟合过程中出现数值退化——比如采样点过于接近,导致协方差矩阵秩不足,无法计算有效直线方向向量,进而触发代码中点数检查的断言。你的点集虽有6个点,但部分点坐标差异极小(比如[354,241]和[156,240]的y坐标仅差1),再加上residual_threshold=2设置过低,放大了数值精度问题的影响。

解决方案

  1. 调大残差阈值
    像素级点集的残差阈值设为2过于严格,适当调高可避免微小数值差异导致的拟合失败:
model, inliers = ransac(pts, LineModelND, min_samples=4, residual_threshold=10, max_trials=1000)
  1. 预处理点集去重
    先移除重复或极度接近的点,减少无效采样组合:
# 去重(保留唯一坐标点)
pts = np.unique(pts, axis=0)
model, inliers = ransac(pts, LineModelND, min_samples=4, residual_threshold=2, max_trials=1000)
  1. 改用2D专用直线模型
    你的点是2D数据,使用LineModel(专门针对2D直线)比通用的LineModelND更稳定,且可将min_samples设为2(符合2D直线拟合的最少点数要求):
from skimage.measure import LineModel, ransac
import numpy as np

pts = np.array([[579,298],
 [604,276],
 [354,241],
 [156,240],
 [124,157],
 [625,105]])

model, inliers = ransac(pts, LineModel, min_samples=2, residual_threshold=2, max_trials=1000)

内容的提问来源于stack exchange,提问作者yazan sayed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:48:24