把一堆点智能分区,并用最小二乘法进行线性拟合

lappidoth 2016-03-28 06:40:15



如图,我有一堆点,但这堆点明显可以分成几个部分,我想把这几个部分拟合成几条直线,但我现在手上的算法只能一次性对所有点进行拟合,拟合之后的结果是这样的,用的是最小二乘法。每次点的分布都不同的,要怎么样才能让程序智能地给点分区呢?


...全文
353 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
老哥,可以把源码给我看看么,我现在做这个东西,邮箱457726733@qq.com
wcx0298 2016-04-06
  • 打赏
  • 举报
回复
遇到类似的问题,不知能否交流下,企鹅号:851296503
weishaolin13x 2016-03-29
  • 打赏
  • 举报
回复
密密合并,比如设置密度是5mm,那给任意一个点,寻找5mm半径范围内的其它所有点,找到就归到一组, 然后再把找到的所有点再做5mm范围内的点进行找,找到就归到一组,找过的做个标记,不要重复找. 归堆后,然后描轮廓,描轮廓很好描,只要从上往下,计算归堆每个y坐标的边界值,再把边界值连起来就得到轮廓了,
lappidoth 2016-03-29
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
你可以先按 y 轴用 聚类分析 将你那些点分为若干组
发帖的时候没说清,其实我是在做一个激光扫描软件,扫到这一堆点要拟合成一个轮廓,比如一间房间,但现在的线性拟合只能拟合一条线,如果房间内只有一个墙还可以,但房间内有四面墙,而且还有杂物,所以就想着要根据点的疏密程度,给这些点分区,点密集的地方就是有东西。聚合算法我有了解了一下,有点复杂,也不知道该怎么和我的需求结合,求再深入指导一下。。。PS:所有点的坐标我都放在了一个point[] 里了。
lappidoth 2016-03-29
  • 打赏
  • 举报
回复
引用 3 楼 weishaolin13x 的回复:
扫描可以平扫,也可以转动扫,也可以曲线扫, 比如最简单的平扫,设置一个步长,然后开始扫描,比如从上往下扫,步长是1px, 然后设置一个简单的分区,分区间距是40px,假设图片是800px,那可以分成20个区, 然后可以统计20个区里有多少点,计算密度,可以进行分区合并,合并原则是密密合并,疏疏合并。 当然,分区可以设到最小,就是分区是1X1的格子,然后根据“密密合并,疏疏合并“的原则来合并分区, 但这样的话计算就很慢,可以选择一个合理的规则多线程处理, 比如最小分区是1X1,而图片是800X800,那可以做10X10个多线程来处理,每个线程处理80X80个像素
发帖的时候没说清,其实我是在做一个扫描软件,扫到这一堆点要拟合成一个轮廓,比如一间房间,但现在的线性拟合只能拟合一条线,如果房间内只有一个墙还可以,但房间内有四面墙,而且还有杂物,所以就想着要给这些点分区,根据点的疏密程度。你提供的方法很好,但我不知道详细该怎么实现,用什么算法。。。PS:所有点的坐标我都放在了一个point[] 里了。
weishaolin13x 2016-03-28
  • 打赏
  • 举报
回复
扫描可以平扫,也可以转动扫,也可以曲线扫, 比如最简单的平扫,设置一个步长,然后开始扫描,比如从上往下扫,步长是1px, 然后设置一个简单的分区,分区间距是40px,假设图片是800px,那可以分成20个区, 然后可以统计20个区里有多少点,计算密度,可以进行分区合并,合并原则是密密合并,疏疏合并。 当然,分区可以设到最小,就是分区是1X1的格子,然后根据“密密合并,疏疏合并“的原则来合并分区, 但这样的话计算就很慢,可以选择一个合理的规则多线程处理, 比如最小分区是1X1,而图片是800X800,那可以做10X10个多线程来处理,每个线程处理80X80个像素
weishaolin13x 2016-03-28
  • 打赏
  • 举报
回复
做个扫描器,类似于雷达扫描敌机那种扫描方式,选择一个中心点扫描,然后统计扫到的点, 就可以计算点的密度和点所在的区域了,然后设置一个密度系数,按密度系数进行分区。。。。。
xuzuning 2016-03-28
  • 打赏
  • 举报
回复
你可以先按 y 轴用 聚类分析 将你那些点分为若干组

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧