智能车制作

标题: 算法高手进,求各种(建议,资料,指导,思路) [打印本页]

作者: 尕玍紿    时间: 2013-12-26 19:38
标题: 算法高手进,求各种(建议,资料,指导,思路)
怎么求得图中 亮点的中心坐标?(若干连续的白像素点 构成 一个 亮点)
仁者见仁智者见智,麻烦大家尽情发言吧...求各种(建议,资料,指导,思路)!
       [attach]53853[/attach]               [attach]53852[/attach]

       [attach]53851[/attach]               [attach]53850[/attach]


作者: 戥家三少    时间: 2013-12-26 19:49
要分几个点吗??
作者: 尕玍紿    时间: 2013-12-26 20:07
戥家三少 发表于 2013-12-26 19:49
要分几个点吗??

是的,有多少个亮点,就算出多少个亮点的坐标。对了,忘说了,图片分辨率是 160 * 80 的。
算法效率很重要,我就怕亮点多的情况下,效率太低...




作者: 戥家三少    时间: 2013-12-26 20:12
尕玍紿 发表于 2013-12-26 20:07
是的,有多少个亮点,就算出多少个亮点的坐标。对了,忘说了,图片分辨率是 160 * 80 的。
算法效率很重 ...

点这么小的话,不用太精确的算法吧。直接取亮点的长与宽,除二吧。估计跟真实的才不了多少吧

作者: 尕玍紿    时间: 2013-12-26 20:50
戥家三少 发表于 2013-12-26 20:12
点这么小的话,不用太精确的算法吧。直接取亮点的长与宽,除二吧。估计跟真实的才不了多少吧

不太明白。
亮点的长和宽怎么来?
我以我贴的最后一幅图为例讲讲我的思路和困惑吧,感觉我的想法好复杂,可是我就是跳不出自己的坑,忘高手拉我一把。

最后一副图中有三个亮点,第一个亮点由7个白像素点组成,第二个亮点由5个白像素点组成,第三个亮点也是5个白像素点。
我以从左到右,从上到下的顺序扫描一副图像,能得到的就只有所有白像素的坐标(这幅图的话就是17个坐标)。
得到这17个坐标后,并不清楚这17个点中哪些点是属于第一个亮点的,哪些是属于第二个亮点的,哪些是属于第三个亮点的。解决这个问题的话,我想到的就是:取出一个点,然后在剩下的所有点中,找出与这个点相邻的点来,然后求出这些点的x 和 y 的平均值来代表一个亮点的坐标;往后同理,再从剩下的点中取出一个,然后再找相邻求平均,以此类推...求得各个亮点的坐标。但是自我感觉亮点少的时候这样算还好,多的话就死了!

所以来求 更 高效的 算法思路...

其实我的思路最终差不多也是求出亮点的长和宽来代表亮点的坐标,就不知道 兄台您 说的 亮点的长和宽是怎么求的?

作者: 尕玍紿    时间: 2013-12-26 21:08
戥家三少 发表于 2013-12-26 20:12
点这么小的话,不用太精确的算法吧。直接取亮点的长与宽,除二吧。估计跟真实的才不了多少吧

额...谢谢您的一句话:“点这么小的话,不用太精确”。给我的启发很大,虽然不知道这样处理会不会误差太大,不过这个试了才知道。感觉是不会的!

作者: 戥家三少    时间: 2013-12-26 21:10
我的思路是,先规定2个范围数a、b、c,比如前两个个都是3,后一个是5或更大.
然后当你行扫描到白像素点时,记下第一个白像素点的坐标,然后继续行扫描,直到扫描到黑像素点为止,此时记下前一个白点的坐标,然后向后继续扫描,当个数超过a时,则可以把前面的点归为第一类点,如果一行有两段的话,就分成两类。
而范围数b的作用跟a差不多,只是这是规定行数的范围而已。
而决定下一行是不是属于前一行的,就看横坐标在不在上一行的那几个同一类的白像素点的横坐标均值加减c内,思路差不多这样。

我还有另外的一个思路,但计算量会有点大,可靠性高点
作者: Shadows    时间: 2013-12-26 22:41
初步观察图中亮点,发现所有亮点都会包涵2*2方格。试着以2*2作为最小单元查找,但无需对其中四个点逐一判定,仅需判定对角线上俩点。这样总查找量降低一半。每查找到一个新的白点,则建立一个亮点结构体,结构体中包涵成员变量:亮点起始行,起始列,结束行,结束列,下一结构体指针变量。同时将上一结构体中的下一结构体指针变量指向该结构体。以当前查找到的白点为源头进行四周拓展判定,完成该亮点的轮廓绘制,然后从轮廓中提取出之前定义的结构体所需的成员变量的数据。再进行之后几行查找时注销该结构体所框出的矩形区域块的外围块,避免重复判定。完成图像扫描后,对链表中的数据进行处理后便可以输出坐标了,,,,,,个人脑中闪出的想法,楼主参考下
作者: 尕玍紿    时间: 2013-12-27 10:50
Shadows 发表于 2013-12-26 22:41
初步观察图中亮点,发现所有亮点都会包涵2*2方格。试着以2*2作为最小单元查找,但无需对其中四个点逐一判定 ...

"以当前查找到的白点为源头进行四周拓展判定"我也有这个思路,暂时还没试试。我自己取了个名字叫:“投石扫描”。每当检测到白点,就模仿像水中投石的效果,扩散搜寻该点周围的白点。但是我是以一个像素点为单元,不是以2*2模板。虽然说只判对角线相对与4个点都判节省了一半时间,但是相对于一个像素单元的话却增大了一倍。另外,还有一个不知道怎么实现的就是:”注销该结构体所框出的矩形区域块的外围块,避免重复判定“。
模板搜寻我有听过,但是没了解过,不知道您有没有适合的资料给我些...
584852734@qq。com万分感谢!

作者: Shadows    时间: 2013-12-27 16:58
尕玍紿 发表于 2013-12-27 10:50
"以当前查找到的白点为源头进行四周拓展判定"我也有这个思路,暂时还没试试。我自己取了个名字叫:“投石 ...

我所指的以2*2为最小单元,是指在逐行扫描查找白色像素点时无需每一点都判定,具体实现起来可以是,奇数行只判定奇数列的点,偶数行只判定偶数列的点,这样相当于省去一半的点。每开始新的一行扫描时,通过历遍链表中的数据来得出该行中需要判定的若干区域的起始列与结束列,依次保存到一个数组中,紧接保存一标识位。扫描时,内层扫描循环为某一区域的起始至结束,外层循环控制扫描区域,并判断标识位至退出。。。。。。。全是个人想法,,真没啥资料可提供,抱歉。。。

作者: 尕玍紿    时间: 2013-12-27 18:54
Shadows 发表于 2013-12-27 16:58
我所指的以2*2为最小单元,是指在逐行扫描查找白色像素点时无需每一点都判定,具体实现起来可以是,奇数行 ...

抱歉倒不用,我谢谢你才是!
多谢发表,我会好好参考参考的...

作者: 若要走    时间: 2013-12-27 19:31





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2