0

我想从给定的图像中提取点。图像如下所示.. 在此处输入图像描述

我想要的点是绿色的上点和红色的点。我尝试逐像素比较,但它太慢了。我需要一个更好的算法。你有什么建议?

4

2 回答 2

3

如果这些点始终位于距中心的已知半径处,那么您只需检查位于圆周上的点即可。

于 2011-02-02T22:38:34.480 回答
1

逐像素比较将很难被击败。通过使用分而治之的方法,您可以大大提高您在绿线上的搜索速度。

如果图像宽度为x且其高度为y,则搜索位于 处x={0...x},y={y/4,3*y/4}的所有像素以查找绿色像素。如果没有找到,则搜索沿 的所有像素x={x/4,3*x/4},y={0...y}。一旦p在坐标处找到一个绿色像素px,py,就搜索该像素的距离图像中心较远的两像素邻域(即{px,py+1},{px+1,py}如果p在右上角,{px,py-1},{px-1,py}如果p在左下角,{px,py+1},{px-1,py}如果p在上左,或者{px,py-1},{px+1,py}如果p在右下象限。更新p为你找到的第一个绿色邻居。迭代直到p没有更多的绿色邻居。最坏情况下这个算法是~O(2*(x+y)+(1/2)*max(x,y)) ~= O(2.5*max(x,y)) ~= O(x),这比O(x*y)如果您只是检查每{x,y}对的颜色值。

但是,找到红点的成本并不低,O(x*y)因为提高搜索单个红色像素成本的唯一方法是对图像进行二次采样(O(x*y)),然后在整个图像(现在O(sqrt(x*y)))中搜索红色像素。

不过,我喜欢 par 的想法,如果两个点与图像中心的距离始终相同,那么您只需搜索沿该半径圆周落下的像素!

于 2011-02-02T22:54:28.323 回答