news 2026/7/12 22:43:07

探索ICP2D与最小二乘法:奇妙的融合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索ICP2D与最小二乘法:奇妙的融合

Icp2d,最小二乘法

在计算机图形学、机器人定位等诸多领域,ICP2D(Iterative Closest Point 2D,二维迭代最近点算法)可是个相当重要的工具,而最小二乘法作为数据拟合的经典方法,与ICP2D有着千丝万缕的联系。今天咱就一起来扒一扒它们之间的故事。

ICP2D算法浅窥

ICP2D主要用于将一组二维点云数据与另一组目标二维点云数据进行匹配。想象一下,你有两组散点,一组是从某个实际场景采集来的,另一组是理想模型的数据,ICP2D就负责找到一个最优的变换(平移和旋转),让这两组点尽可能地重合。

简单的ICP2D代码示例(Python + NumPy)

import numpy as np def icp2d(source, target, max_iterations=100, tolerance=1e-6): T = np.eye(3) for i in range(max_iterations): distances = np.sqrt((source[:, np.newaxis, 0] - target[np.newaxis, :, 0]) ** 2 + (source[:, np.newaxis, 1] - target[np.newaxis, :, 1]) ** 2) closest_indices = np.argmin(distances, axis=1) closest_points = target[closest_indices] source_mean = np.mean(source, axis=0) target_mean = np.mean(closest_points, axis=0) source_centered = source - source_mean target_centered = closest_points - target_mean H = source_centered.T.dot(target_centered) U, S, Vt = np.linalg.svd(H) R = Vt.T.dot(U.T) if np.linalg.det(R) < 0: Vt[1, :] = -Vt[1, :] R = Vt.T.dot(U.T) t = target_mean - R.dot(source_mean) T_i = np.eye(3) T_i[:2, :2] = R T_i[:2, 2] = t T = T_i.dot(T) source = T_i.dot(np.vstack((source.T, np.ones(source.shape[0])))).T[:, :2] error = np.mean(np.sqrt((source[:, 0] - closest_points[:, 0]) ** 2 + (source[:, 1] - closest_points[:, 1]) ** 2)) if error < tolerance: break return T

代码分析

  1. 初始化变换矩阵TT = np.eye(3),这是一个3x3的单位矩阵,代表初始没有任何变换。因为在二维平面上的变换,用齐次坐标表示方便进行矩阵运算,所以用3x3矩阵。
  2. 迭代过程:在for i in range(maxiterations)循环内,每次迭代都尝试找到更好的变换。
    -寻找最近点:通过计算源点云source与目标点云target之间的欧氏距离distances,找到每个源点在目标点云中的最近点closest
    points
    -计算均值和中心化:分别计算源点云和最近点的均值sourcemeantargetmean,并将点云中心化,即减去各自的均值,这样后续计算旋转矩阵会更方便。
    -计算旋转矩阵R:通过计算sourcecenteredtargetcentered的协方差矩阵H,再利用奇异值分解(SVD)得到旋转矩阵R。这里要注意行列式的判断,如果det(R) < 0,说明旋转矩阵有反射成分,需要调整。
    -计算平移向量t:根据源点云和目标点云的均值差得到平移向量t
    -更新变换矩阵Ti和T:将每次迭代得到的旋转和平移组合成变换矩阵Ti,并更新总的变换矩阵T
    -更新源点云:用新的变换矩阵T_i对源点云source进行变换。
    -判断误差:计算变换后源点与最近点的平均距离error,如果小于设定的容差tolerance,则停止迭代。

最小二乘法登场

最小二乘法的核心思想是通过最小化误差的平方和来寻找数据的最佳函数匹配。在ICP2D中,最小二乘法其实就隐藏在寻找最优变换的过程里。我们的目标是让源点云经过变换后与目标点云尽可能重合,这个“尽可能重合”就是通过最小化点与点之间的距离平方和来实现的。

用最小二乘法理解ICP2D的误差优化

假设我们有源点云$P = \{p1, p2, \cdots, pn\}$,目标点云$Q = \{q1, q2, \cdots, qn\}$,经过变换矩阵$T$作用于$P$后得到$P'$。我们希望最小化的误差函数$E$可以表示为:

\[ E = \sum{i = 1}^{n} \| pi' - q{ji} \|^2 \]

Icp2d,最小二乘法

这里$q{ji}$是$p_i'$在目标点云中的最近点。这就是一个典型的最小二乘问题,ICP2D通过迭代不断调整变换矩阵$T$,使得这个误差函数$E$逐渐减小,最终收敛到一个最小值,也就找到了最优的匹配。

比如说在之前的ICP2D代码里,每次迭代计算的error就是上述误差函数$E$的一种具体体现,通过不断优化变换矩阵,让这个误差越来越小,实现点云的精确匹配。

ICP2D与最小二乘法相互配合,在处理二维点云匹配问题上发挥着巨大的作用,无论是在自动驾驶的地图构建,还是工业零件的检测,都能看到它们协同工作的身影。希望通过今天的分享,大家对这两者的关系和应用有了更清晰的认识!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 21:10:38

2026高职大数据专业毕业生:这5类数据岗位正缺人!

随着数字化转型加速&#xff0c;大数据行业人才需求持续增长。2026年高职大数据专业毕业生可重点关注以下5类紧缺岗位&#xff0c;结合CDA数据分析师证书提升竞争力。岗位1&#xff1a;数据分析师核心职责&#xff1a;通过数据挖掘与可视化辅助业务决策&#xff0c;需掌握SQL、…

作者头像 李华
网站建设 2026/7/12 13:14:20

用数据说话 AI论文软件 千笔AI VS 学术猹 专科生写作神器

随着人工智能技术的迅猛发展&#xff0c;AI辅助写作工具正逐步渗透到高校学术写作场景中&#xff0c;成为专科生、本科生、研究生完成毕业论文不可或缺的助手。越来越多的学生开始借助AI工具来提升写作效率、降低写作难度。然而&#xff0c;面对市场上琳琅满目的AI写作工具&…

作者头像 李华
网站建设 2026/7/8 15:54:51

基于Spring AI的分布式在线考试系统-事件处理架构(续)

一、分布式在线考试系统完整架构图&#xff08;细化版&#xff09; 以下是包含服务分层、中间件、数据流向、事件通信的完整架构图&#xff0c;直观展示各组件的交互关系&#xff1a; #mermaid-svg-Kf5ryIQKoY8I7WLm{font-family:"trebuchet ms",verdana,arial,sans-…

作者头像 李华
网站建设 2026/7/1 22:22:06

java.lang.RuntimeException: Image generation still pending

一、问题描述 1、异常信息 java.lang.RuntimeException: Image generation still pendingat com.alibaba.cloud.ai.dashscope.image.DashScopeImageModel.lambda$call$1(DashScopeImageModel.java:165) ~[spring-ai-alibaba-core-1.0.0.2.jar:1.0.0.2]at org.springframework.r…

作者头像 李华
网站建设 2026/7/5 21:16:56

航空航天领域PHP如何处理视频大文件的秒传与切片?

【一个PHP外包仔的2G文件上传血泪史&#xff1a;从WebUploader到自救之路】 "老板&#xff0c;这个2G的文件上传需求…要不咱们先聊聊预算&#xff1f;"我擦着额头的汗&#xff0c;盯着客户发来的需求文档。作为一个月接3个外包的野生PHP工程师&#xff0c;我深知这次…

作者头像 李华