emgucv 求n个点两两之间的距离
来源:互联网 发布:出租屋网络方案 编辑:程序博客网 时间:2024/06/11 14:01
思路
- 在求解N个点两两之间的距离时,matlab里有一个dist函数可以快速求解,emgucv里面没有这个函数,如果采用for循环的方式去求解距离,N非常大时,求解的时间会很长,因此考虑一种加速的方法
- 对于
N X 3
的点(这是三维情况,二维平面中的点也可以)的位置矩阵,设其每个点的位置是A(i),则距离矩阵dist中每处的值dist(i,j)=A(i)^2+A(j)^2-2A(i)A(j)
,所以可以用向量的形式求出三个矩阵,然后再做简单的加减运算即可。
代码
public static Matrix<double> ComputeMatDist( Matrix<double> pos ) { int num = pos.Rows; Matrix<double> dists = new Matrix<double>(num, num); Matrix<double> xsquare = new Matrix<double>(num, pos.Cols); Matrix<double> xsquareSum = new Matrix<double>(num, 1); CvInvoke.Multiply(pos, pos, xsquare); for (int i = 0; i < pos.Cols;i++ ) { CvInvoke.Add(xsquare.GetCol(i), xsquareSum, xsquareSum); } CvInvoke.Repeat(xsquareSum, 1, num, dists); dists = dists + dists.Transpose(); dists -= 2 * pos.Mul(pos.Transpose()); CvInvoke.Sqrt(dists, dists); return dists; }
效果
- 在4000个二维点的情况下,for循环的方式所需时间为
100s
左右,优化方法只需要800ms
- 但是当点很多时,对内存要求比较高。。。。
0 0
- emgucv 求n个点两两之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- OJ刷题之《可变参数--求n维空间点之间的距离》
- poj 2926 求n维坐标点之间的最大距离
- 求两坐标之间的距离
- GJK算法求凸多边形之间的距离
- 根据两点之间的经纬度求距离
- 求两点之间的直线距离
- [IOS 开发] 求两点之间的距离
- 用于求两个向量之间的距离
- PHP【求两个经纬度之间的距离】
- acm2 求两点之间的距离
- HDU2001求两点之间的距离
- vertical-align垂直居中
- Windows下python获取剪切板的内容
- Spring Boot application.properties或application.yml相关配置
- Pdf File Writer 中文应用(PDF文件编写器C#类库)
- 自定义控件(二)--广告轮播
- emgucv 求n个点两两之间的距离
- oracle中调用存储过程
- Git删除远程Tag、分支
- 当外包遇上半路出家:我是非科班程序员
- 用好压批量修改文件名
- android app之布局优化
- pdf转换器如何切换语言类型
- PHP:捕获异常
- 第二节windows实验课