对应点已知时最优变换求解介绍以及SVD代码示例

一、空间上两组点希望找到一个刚性变换,在最小二乘的意义上最优地对齐两个点集,就是说找到一个旋转矩阵R和一个平移向量t。 

二、SVD代码示例

C++代码

#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <pcl/common/transforms.h>
#include <pcl/registration/transformation_estimation_svd.h>using namespace Eigen;
using namespace std;int main(int argc, char** argv) {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>());pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_out(new pcl::PointCloud<pcl::PointXYZ>());cloud_in->width = 3;cloud_in->height = 1;cloud_in->is_dense = false;cloud_in->resize(cloud_in->width * cloud_in->height);cloud_out->width = 3;cloud_out->height = 1;cloud_out->is_dense = false;cloud_out->resize(cloud_out->width * cloud_out->height);for (size_t i = 0; i < cloud_in->points.size(); i++){// RAND_MAX = 2^15 - 1cloud_in->points[i].x = 3.0f * rand() / (RAND_MAX + 1.0f);cloud_in->points[i].y = 3.0f * rand() / (RAND_MAX + 1.0f);cloud_in->points[i].z = 3.0f * rand() / (RAND_MAX + 1.0f);cout << cloud_in->points[i].x << "  \t" << cloud_in->points[i].y << "  \t" << cloud_in->points[i].z << endl;}Eigen::Affine3f transform = Eigen::Affine3f::Identity();transform.translation() << 1.0, 2.0, 3.0;float angle_x = 45 * M_PI / 180.0;float angle_y = 45 * M_PI / 180.0;float angle_z = 45 * M_PI / 180.0;transform.rotate(Eigen::AngleAxisf(angle_x, Eigen::Vector3f::UnitX()));transform.rotate(Eigen::AngleAxisf(angle_y, Eigen::Vector3f::UnitY()));transform.rotate(Eigen::AngleAxisf(angle_z, Eigen::Vector3f::UnitZ()));cout << "变换矩阵:\n" << transform.matrix() << endl;pcl::transformPointCloud(*cloud_in, *cloud_out, transform);//---------------------------------利用SVD方法求解变换矩阵--------------------------pcl::registration::TransformationEstimationSVD<pcl::PointXYZ, pcl::PointXYZ> TESVD;pcl::registration::TransformationEstimationSVD<pcl::PointXYZ, pcl::PointXYZ>::Matrix4 transformation2;TESVD.estimateRigidTransformation(*cloud_in, *cloud_out, transformation2);// -----------------------------------输出变换矩阵信息------------------------------cout << "The Estimated Rotation and translation matrices (using getTransformation function) are : \n" << endl;printf("\n");printf("    | %6.3f %6.3f %6.3f | \n", transformation2(0, 0), transformation2(0, 1), transformation2(0, 2));printf("R = | %6.3f %6.3f %6.3f | \n", transformation2(1, 0), transformation2(1, 1), transformation2(1, 2));printf("    | %6.3f %6.3f %6.3f | \n", transformation2(2, 0), transformation2(2, 1), transformation2(2, 2));printf("\n");printf("t = < %0.3f, %0.3f, %0.3f >\n", transformation2(0, 3), transformation2(1, 3), transformation2(2, 3));return 0;
}

 结果:

局部特征描述子-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/467286.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营Day56|583. 两个字符串的删除操作、72. 编辑距离

目录 583. 两个字符串的删除操作 前言 思路 算法实现 法二 72. 编辑距离 前言 思路 算法实现 总结 583. 两个字符串的删除操作 题目链接 文章链接 前言 本题与上一题不同的子序列相比&#xff0c;变化就是两个字符串都可以进行删除操作了。 思路 利用动规五部曲进…

Java 基于springboot+vue的民宿管理系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)

第461题 以下关于路由策略特点的描述,错误的是哪一项? A、能够修改路由属性,但是不能改变网络流量经过的路径 B、能通过控制路由器的路由表规模,来节约系统资源 C、能通过控制路由的接收、发布和引入,以提高网络的安全性 D、能通过修改路由属性,对网络数据流量可以合理规…

【AI】安装ubuntu20.04教程(未完待续)

目录 1 制作ubuntu20.04系统盘1.1 下载ubuntu镜像1.2 使用ultraiso写入镜像 2 安装Ubuntu系统 1 制作ubuntu20.04系统盘 1.1 下载ubuntu镜像 在清华镜像站https://mirrors.tuna.tsinghua.edu.cn/下载ubuntu20.04镜像 路径为/ubuntu-releases/20.04/&#xff0c;下载ubuntu-20…

【高阶数据结构】并查集

文章目录 1. 并查集原理2. 并查集的实现3. 并查集运用3.1 省份数量3.1.1 题目要求3.1.2 做题思路3.1.3 代码实现3.2 等式方程的可满足性3.2.1 题目要求3.2.2 做题思路3.2.3 代码实现 1. 并查集原理 在一些情况下&#xff0c;需要将 n 个不同的元素划分成一些不相交的集合。开始…

【JVM篇】什么是jvm

文章目录 &#x1f354;什么是Java虚拟机&#x1f6f8;Java虚拟机有什么用&#x1f339;Java虚拟机的功能&#x1f388;Java虚拟机的组成 &#x1f354;什么是Java虚拟机 JVM指的是Java虚拟机&#xff0c;本质上是一个运行在计算机上的程序&#xff0c;可以运行 Java字节码文件…

20240212请问如何将B站下载的软字幕转换成为SRT格式?

20240212请问如何将B站下载的软字幕转换成为SRT格式&#xff1f; 2024/2/12 12:47 百度搜索&#xff1a;字幕 json 转 srt json srt https://blog.csdn.net/a_wh_white/article/details/120687363?share_token2640663e-f468-4737-9b55-73c808f5dcf0 https://blog.csdn.net/a_w…

springboot180基于spring boot的医院挂号就诊系统

医院挂号就诊系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其…

基于STM32与FreeRTOS的四轴机械臂项目

目录 一、项目介绍 二、前期准备 1.硬件准备 2.开发环境 3.CubeMX配置 三、裸机各种模块测试 1.舵机模块 2.蓝牙模块 3.按键摇杆传感器模块和旋钮电位器模块 4.OLED模块 5.W25Q128模块 四、裸机三种控制测试 1.摇杆控制 2.示教器控制 3.蓝牙控制 五、裸机与Free…

权限系统设计

权限系统设计 RBAC 基于角色的访问控制 ABAC 基于属性的访问控制 普通的系统无非 CRUD&#xff0c;那系统如何控制一个用户该看到哪些数据、能操作哪些功能&#xff1f;日常开发中最常用到 RBAC 和 OAuth2 这两种访问控制和授权方案 RBAC 基于角色的访问控制 所有的访问控制模…

Visual Studio 2010+C#实现信源编码

1. 要求 本文设计了一套界面系统&#xff0c;该系统能够实现以下功能&#xff1a; 克劳夫特不等式的计算&#xff0c;并且能够根据计算结果给出相应的信息。可通过用户输入的初始条件然后给出哈夫曼编码以及LZ编码&#xff0c;结果均通过对话框来显示哈夫曼编码结果包含相应的…

【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 本章是51LCD单片机设计的一个环节&#xff0c;完整可前往相应博客查看完整传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下…