导航:首页 > 源码编译 > icp算法过于依赖初值的选择

icp算法过于依赖初值的选择

发布时间:2022-12-18 03:06:02

A. ICP算法的介绍

三维空间R3存在两组含有n个坐标点的点集,分别为: PL和PR。三维空间点集PL中各点经过三维空间变换后与点集PR中点一一对应,其单点变换关系式为:(0-1)上式中,R为三维旋转矩阵,t为平移向量。在ICP配准方法中,空间变换参数向量X可表示为[9] 。参数向量中四元数参数满足约束条件为:(0-2)根据迭代的初值X0,由式(0-1)计算新点集Pi为:(0-3)式中,P表示原始未修改过的点集,Pi的下标i表示迭代次数,参数向量X的初始值X0为 。根据以上数据处理方法,ICP配准算法可以概括为以下七个步骤:1) 根据点集Plk中的点坐标,在曲面S上搜索相应就近点点集Prk;2) 计算两个点集的重心位置坐标,并进行点集中心化生成新的点集;3) 由新的点集计算正定矩阵N,并计算N的最大特征值及其最大特征向量;4) 由于最大特征向量等价于残差平方和最小时的旋转四元数,将四元数转换为旋转矩阵R;5) 在旋转矩阵R被确定后,由平移向量t仅仅是两个点集的重心差异,可以通过两个坐标系中的重心点和旋转矩阵确定;6) 根据式(0-3),由点集Plk计算旋转后的点集P’lk。通过Plk与P’lk计算距离平方和值为fk+1。以连续两次距离平方和之差绝对值 作为迭代判断数值;7) 当 时,ICP配准算法就停止迭代,否则重复1至6步,直到满足条件 后停止迭代

B. 非线性最小二乘法

一.梯度下降法以及Jacobian矩阵计算

在2010年的关于L-K和AAM的博客里提到,模板匹配公式的一阶泰勒展开ΔT=J*Δp,J是用于梯度下降的Jacobian矩阵,是高维矢量函数值T=f(p)相对与参数矢量p变化时的增量(导数)。如果p是n维矢量,T是M维矢量,则J是一个[m*n]的矩阵。J在(i,j)处的元素值是(əTi/əpj)。

C. 求解常微分方程的初值问题,哪种算法格式一般不单独使用

求解常微分方程的初值问题,经典龙格-库塔算法算法格式一般不单独使用。

用ode函数求常微分方程(组)的初值问题的基本原则:对于刚性的常微分方程(组),可以考虑ode23t、ode23s、ode23tb和ode15s等函数来求解。对于非刚性的常微分方程(组),可以考虑ode113、ode45等函数来求解。

通常微分方程

在很多学科领域内有着重要的应用,自动控制、各种电子学装置的设计、弹道的计算、飞机和导弹飞行的稳定性的研究、化学反应过程稳定性的研究等。这些问题都可以化为求常微分方程的解,或者化为研究解的性质的问题。应该说,应用常微分方程理论已经取得了很大的成就,但是,它的现有理论也还远远不能满足需要,还有待于进一步的发展,使这门学科的理论更加完善。

D. 对聚类中心过于依赖的聚类算法有哪些

层次聚类分析:
是创建一个层次以分解给定的数据集。该方法可以分为自上而下(分解)和自下而上(合并)两种操作方式。为弥补分解与合并的不足,层次合并经常要与其它聚类方法相结合,如循环定位。典型的这类方法包括:
第一个是;BIRCH(Balanced Iterative Recing and Clustering using Hierarchies) 方法,它首先利用树的结构对对象集进行划分;然后再利用其它聚类方法对这些聚类进行优化。
第二个是CURE(Clustering Using REprisentatives) 方法,它利用固定数目代表对象来表示相应聚类;然后对各聚类按照指定量(向聚类中心)进行收缩。
第三个是ROCK方法,它利用聚类间的连接进行聚类合并。
最后一个CHEMALOEN,它则是在层次聚类时构造动态模型。

E. 作业调度算法的选择原则有哪几个

批处理作业的调度算法主要有以下几种:
①先来先服务算法。原则上按照作业进入输入井的次序调度,如果作业的资源得不到满足,将会推迟调度,它的资源得到满足的时候会优先被调度进来。
优点:具有一定的公平性。
缺点:系统的吞吐率低,平均周转时间长,有大作业到来的时,许多小作业推迟调度。
②计算时间短的作业优先.优先调度计算时间短的作业进行调度,资源不满足的情况下推迟调度。在这种调度算法下,要求用户要对作业的计算时间预先有一个估计,调度以此为依据。
优点:由于被选中的作业计算时间,所以不能尽快地完成并退出系统,降低了作业的平均等待时间,提高了系统的吞吐率。
缺点:大作业会不满意,而且极限情况下使得某些大作业始终得不到调度。
③响应比高者优先算法。该算法考虑了计算时间等待时间,既考虑了计算时间短的作业优先,又考虑了大作业长期等待的问题。所谓响应比是按照以下公式来定义的:
响应比R=等待时间/计算时间
这里的计算时间是估计的作业计算时间,从公式看,计算时间越短,响应比越高;而另一方面,大作业等待时间越长,响应比也会越大。一个作业完成以后,需要重新计算一下在输入井中的各个作业的响应比,最高的将优先调度。
④优先数调度算法。为每一个作业指定一个优先数,优先数高的作业先被调度。对于优先数相等的作业采用先来先服务的策略。优先数的制定原则是:作业的缓急程序,估计的计算时间,作业的等待时间,资源申请情况等因素综合考虑。
⑤均衡调度算法。使用不同资源的进程同时执行,减少作业等待同类设备而耗费的时间,加快作业的执行。

F. ICP算法的三维点云算法

三维激光扫描技术的快速发展,使其在各个领域得到广泛应用。由于物理上的一些限制,一次三维激光扫描不能获取扫描物体的全部数据,因此要对扫描点云进行拼接。首先,对最常用的ICP算法进行一系列研究,ICP算法的前提条件是具有一个良好的配准初值,文中在配准初值的选取上采用主成分分析法,为后续ICP算法的工作提供一个良好前提条件,增加点集预处理,点对查找上增加各种限制,采用kd-tree加速查找,以此对算法进行改进,并通过实例来验证本算法的有效性及合理性。

G. 哪位大神有ICP(迭代最近点)算法的C++代码,可以对两组三维点云进行配准的,求一个能用的,感激不尽……

创建一个pcl::PointCloud实例Final对象,存储配准变换后的源点云,应用ICP算法后,IterativeClosestPoint能够保存结果点云集,如果这两个点云匹配正确的话(也就是说仅仅对其中一个应用某种刚体变换,就可以得到两个在同一坐标系下相同的点云)

H. ICP算法的迭代就近点算法

在20世纪80年代中期,很多学者开始对点集数据的配准进行了大量研究。1987年,Horn[1]、Arun[2]等人用四元数法提出点集对点集配准方法。这种点集与点集坐标系匹配算法通过实践证明是一个解决复杂配准问题的关键方法。1992年,计算机视觉研究者Besl和Mckay[3]介绍了一种高层次的基于自由形态曲面的配准方法,也称为迭代就近点法ICP(Iterative Closest Point)。以点集对点集(PSTPS)配准方法为基础,他们阐述了一种曲面拟合算法,该算法是基于四元数的点集到点集配准方法。从测量点集中确定其对应的就近点点集后,运用Faugera和Hebert提出的方法计算新的就近点点集。用该方法进行迭代计算,直到残差平方和所构成的目标函数值不变,结束迭代过程。ICP配准法主要用于解决基于自由形态曲面的配准问题。
迭代就近点法ICP就近点法经过十几年的发展,不断地得到了完善和补充。Chen和Medioni[4]及Bergevin等人[5]提出了point-to-plane搜索就近点的精确配准方法。Rusinkiewicz和Levoy提出了point-to-p rojection搜索就近点的快速配准方法。Soon-Yong和Murali提出了Contractive-projection-point搜索就近点的配准方法。此外,Andrew和Sing[6]提取了基于彩色三维扫描数据点纹理信息的数据配准方法,主要在ICP算法中考虑三维扫描点的纹理色彩信息进行搜索就近点。Natasha等人[7]分析了ICP算法中的点云数据配准质量问题。
基本原理
三维空间R3存在两组含有n个坐标点的点集,分别为: PL和PR。三维空间点集PL中各点经过三维空间变换后与点集PR中点一一对应,其单点变换关系式为:
(0-1)
上式中,R为三维旋转矩阵,t为平移向量。
在ICP配准方法中,空间变换参数向量X可表示为[9] 。参数向量中四元数参数满足约束条件为:
(0-2)
根据迭代的初值X0,由式(0-1)计算新点集Pi为:
(0-3)
式中,P表示原始未修改过的点集,Pi的下标i表示迭代次数,参数向量X的初始值X0为 。
根据以上数据处理方法,ICP配准算法可以概括为以下七个步骤:
1) 根据点集Plk中的点坐标,在曲面S上搜索相应就近点点集Prk;
2) 计算两个点集的重心位置坐标,并进行点集中心化生成新的点集;
3) 由新的点集计算正定矩阵N,并计算N的最大特征值及其最大特征向量;
4) 由于最大特征向量等价于残差平方和最小时的旋转四元数,将四元数转换为旋转矩阵R;
5) 在旋转矩阵R被确定后,由平移向量t仅仅是两个点集的重心差异,可以通过两个坐标系中的重心点和旋转矩阵确定;
6) 根据式(0-3),由点集Plk计算旋转后的点集P’lk。通过Plk与P’lk计算距离平方和值为fk+1。以连续两次距离平方和之差绝对值 作为迭代判断数值;
7) 当 时,ICP配准算法就停止迭代,否则重复1至6步,直到满足条件 后停止迭代。

I. 为什么icp只能是普通索引

查询优化)Index Condition Pushdown (指数条件下推)(ICP)
ICP是MYSQL使用索引从表中检索行数据的一种优化方式。

目标
减少从基表中读取操作的数量,从而降低I/O操作。

禁用ICP
存储引擎会通过遍历索引定位基表中的行,然后返回给Server 层,在去为这些数据进行WHERE 后的条件过滤。
开启ICP特性
如果部分where 条件能够使用索引中的字段,那么 MySQLServer就会把这部分下推导存储引擎层。存储引擎通过索引过滤,把满足的行从表中读取出。

效果决定于存储引擎通过ICP筛选掉的数据的比例。如果引擎层能够过滤掉大量的数据,就能减少I/O次数、提高查询语句性能。

对于InnoDB 表,ICP只适用于辅助索引,当时用ICP优化时,执行计划的Extra列显示 Using index condition提示。

mysql开启ICP

SET optimizer_switch="index_condition_pushdown=on"
登录后复制
mysql关闭ICP

SET optimizer_switch="index_condition_pushdown=off"
登录后复制
实验举例:

一张表默认只有一个主索引,因为ICP只能作用于二级索引,所以我们建立一个二级索引。

CREATE TABLE `employees` (
`emp_no` int NOT NULL AUTO_INCREMENT,
`birth_date` date NOT NULL,
`first_name` varchar(14) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`last_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`gender` enum('M','F') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`) USING BTREE,
INDEX `first_name_last_name`(`first_name`, `last_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
登录后复制

为了明确查询性能,启用profiling并关闭Query Cache

SET profiling = 1;
登录后复制
SET query_cache_type = 0;
登录后复制
SET GLOBAL query_cache_size = 0;
登录后复制
但是因为我用的是8.x版本的数据库,由于在8.x版本query cache已经被废弃了,所以这里会提示为

Unknown system variable 'query_cache_size'
登录后复制
在SELECT * FROM employees WHERE first_name = 'Mary' AND last_name like '%man';语句中,根据MySQL索引的前缀匹配原则,两者对索引的使用是一致的,即只有first_name采用索引,last_name由于采用模糊前缀,无法使用索引进行匹配。

查询三次select,并执行show profiles.

SELECT * FROM employees WHERE first_name = 'Mary' AND last_name like '%man';
登录后复制
show profiles;
登录后复制
查看执行计划,在select前加explain就可以了.

EXPLAIN SELECT * FROM employees WHERE first_name = 'Mary' AND last_name like '%man';
登录后复制
同理,关闭ICP,在查询三次测试

耗时

开启ICP

关闭ICP

比较执行计划

开启ICP

关闭ICP
执行计划参数含义:
type表的连接类型,如果是ALL (最差的一种类型,从头到尾全表扫描)

key表示查询实际使用到的索引。
possible_keys列指出MySQL能使用哪个索引在该表中找到行。如果该列是NULL,则没有相关的索引。
rows表示mysql在表中进行查询时必须检查的行数。
extra列显示mysql在处理查询时的详细信息,主要包括

using index这个说明MySQL使用了覆盖索引,避免访问了表的数据行;

using where这说明服务器在存储引擎收到行后将进行过滤;

using temporary说明mysql对查询结果进行排序的时候使用了临时表,

using filesort这个说明mysql会对数据使用一个外部的排序,MySQL 中无法利用索引完成的排序操作称为“文件排序”

(查询优化)Multi-Range Read Optimization(多量程读优化)(MRR)
MRR是优化器将随机I/O转化为顺序I/O,目的是减少磁盘的随机访问,以降低查询过程中I/O的开销,对I/O-bound类型的SQL语句性能带来极大的提升。

在不使用MRR时,优化器需要根据二级索引返回的记录来进行回表,这个过程一般会有较多的随机I/O。

在使用MRR时,MRR的优化在于,并不是每次通过辅助索引回表取记录,而是将rowid缓存起来,然后对rowid进行排序后在去访问记录,优化器将二级索引随机的I/O进行排序,转化为主键的有序排列,从而实现随机I/O到顺序I/O的转化,大幅提升性能。
对比mrr=on 和mrr=off时的执行计划

CREATE TABLE t1
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL ,
`c` int(11) DEFAULT NULL ,
PRIMARY KEY (`id`),
KEY `mrrx` (`a`,`b`),
KEY `xx` (`c`)
);
登录后复制

在关掉MRR的情况下,当执行计划使用的是索引xx©,即从索引 xx 上读取一条数据后回表,取回该主键的完整数据,当数据较多且比较分散的情况下会有较多的随机I/O,导致性能低下。
SET optimizer_switch="mrr=off";
登录后复制
EXPLAIN SELECT * FROM t1 WHERE (a BETWEEN 1 AND 10) AND (c BETWEEN 9 AND 10);
登录后复制
基于成本的算法过于保守,导致大部分情况下优化器都不会选择MRR 特性。为了确保优化器使用MRR特性,需要执行 SQL 语句:

SET optimizer_switch="mrr=on,mrr_cost_based=off";
登录后复制
发现在Extra 的输出中多了Using MRR 信息,对MRR Optimization I/O层进行了优化,可以减少 I/O 方面的开销。

在不使用MRR之前,先根据where 条件中的辅助索引获取辅助索引与主键的集合,在通过主键来获取对应的值。利用辅助索引获取的主键来访问表中的数据会导致多次I/O 和随机读。

使用MRR 优化的好处是能使数据访问变得较有顺序。它将根据辅助索引获取的结果集根据主键进行排序,将无序化为有序,可以用主键顺序访问基表,将随机读转化为顺序读,多页数据记录可一次性读入或根据此次的主键范围分次读入,减少 I/O操作,提高查询效率。

相关参数:

mrr=on,mrr_cost_based=on: 表示cost base 的方式还选择启用MRR优化,当发现优化后的代价过高时就会不使用该项优化。

mrr=on,mrr_cost_based=off: 表示总是开启MRR优化。

(查询优化)Batched Key Access(批处理键访问)(BKA)
BKA是提高表join性能的算法,是在表连接的过程中为了提升join 性能而使用的一种 join buffer ,作用是在读取被连接表的记录时使用顺序I/O。

对于嵌套循环,如果关联的表数据量很大,那么join 关联的时间会很长,后来引入了BNL(Block Nested Loop)算法来优化嵌套循环。BNL算法通过使用在外部循环中读取行的缓冲来减少内部循环中的表必须被读取的次数。

BKA的原理是对于多表join语句,将外部表中相关的列放入join buffer 中。批量地将Key(索引键值)发送到Multi-Range Read (MRR)接口。Multi-Range Read(MRR)根据收到的Key 对应的ROWID进行排序,然后进行数据得到读取操作。

BKA join 算法将能极大地提高 SQL 的执行效率,特别是在内表上有索引并且该索引为非主键,联表需要访问内部表主键上的索引情况下。这时BKA算法会调用 Multi-Range Read (MRR)接口,批量地进行索引键的匹配和主键索引上获取数据的操作,以此来提高联接的执行效率,因为读取数据是以顺序磁盘I/O而不是随机磁盘I/O进行的。

BKA使用 join buffer size 来确定buffer的大小,buffer越大缓冲区越大,对联表操作的右侧表的顺序访问就越多,可以显着提高性能。

创建表employees.

CREATE TABLE employees (
emp_no INT NOT NULL,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender ENUM ('M','F') NOT NULL,
hire_date DATE NOT NULL,
PRIMARY KEY (emp_no)
);
登录后复制

创建表dept_emp

CREATE TABLE dept_emp (
emp_no INT NOT NULL,
dept_no CHAR(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,
FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE,
PRIMARY KEY (emp_no,dept_no)
);
登录后复制
启动BKA

SET optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';
登录后复制
查询计划

EXPLAIN SELECT a.gender,b.dept_no FROM employees a,dept_emp b WHERE a.birth_date=b.from_date;
登录后复制
添加索引在查看查询计划

ALTER TABLE employees ADD INDEX (birth_date);
登录后复制
EXPLAIN SELECT a.gender,b.dept_no FROM employees a,dept_emp b WHERE a.birth_date=b.from_date;
登录后复制
索引
mysql
数据库
索引优化
算法
高清播放机,图片大全,点击查看详情!
精选推荐
广告

MYSQL的索引优化技术ICP、MRR、BKA
109阅读·0评论·0点赞
2020年5月25日
【mysql】关于ICP、MRR、BKA等特性
113阅读·0评论·0点赞
2020年4月30日
随写02 关于ICP、MRR、BKA等特性
133阅读·0评论·0点赞
2020年9月8日
Mysql优化算法-MRR(Multi-Range Read Optimization)
287阅读·0评论·0点赞
2022年9月7日
mysql数据库BKA算法详解
702阅读·0评论·0点赞
2021年8月16日
索引下推ICP详解
813阅读·0评论·3点赞
2020年4月29日
播放机-高清视频播放器,一键直达!

精选推荐
广告
MySQL-小章节-ICP/MRR/BKA特性
50阅读·0评论·0点赞
2022年6月1日
bka mysql,MYSQL之ICP、MRR、BKA
38阅读·0评论·0点赞
2021年4月29日
MySQL--BNL/ICP/MRR/BKA
98阅读·0评论·0点赞
2018年6月27日
优化器 MRR & BKA
449阅读·0评论·0点赞
2016年2月3日
MySQL---MRR策略和BKA算法
211阅读·0评论·0点赞
2021年7月13日
InnoDB ICP 代码路径
78阅读·0评论·0点赞
2016年5月10日
InnoDB ICP、MRR、BAK特性
335阅读·1评论·1点赞
2020年8月15日
二级索引和回表优化之MRR
168阅读·0评论·0点赞
2022年1月5日
mysql mrr_cost_based_MySQL MRR介绍
79阅读·0评论·0点赞
2021年1月19日
优化的道路永无止境——Mysql的ICP及MRR
149阅读·0评论·0点赞
2020年12月3日
mysql 5.7中的MBR和BKA算法
955阅读·0评论·0点赞
2017年10月3日
说说mysql的MRR,ICP,BKA优化。
404阅读·0评论·2点赞
2020年3月7日
学习MYSQL之ICP、MRR、BKA
4234阅读·0评论·2点赞
2016年8月14日
mysql使用bka_MySQL Batched Key Access (BKA)原理和设置使用方法举例
328阅读·0评论·0点赞
2021年1月19日
去首页
看看更多热门内容
评论1

Xd聊架构


来互动吧,帮我点赞最新的一篇文章,谢谢!!!

阅读全文

与icp算法过于依赖初值的选择相关的资料

热点内容
量子加密银行 浏览:193
命令方块获得指令手机 浏览:499
学习结束感言简短程序员 浏览:398
android关机闹钟实现 浏览:968
鼠标一键打开文件夹设置 浏览:161
程序员看过来我想静静搞笑视频 浏览:370
curlphp爬虫 浏览:874
python按日期循环 浏览:110
php三个等号 浏览:760
培训班出来的程序员解决问题很差 浏览:963
程序员那么可爱25集 浏览:753
服务器地址和ip地址一样不 浏览:664
php中括号定义数组 浏览:602
php打印堆栈 浏览:516
华为adb命令行刷机 浏览:965
人像摄影pdf 浏览:761
解压文件密码怎样重新设置手机 浏览:1002
高考指南pdf 浏览:695
爬虫python数据存储 浏览:240
u盘怎么取消加密 浏览:431