算法实现套索选择工具?

时间:2010-01-16 23:16:30

标签: cocoa algorithm image-manipulation selection edge-detection

我正在开发一个Mac OS X应用程序,作为它的UI的一部分,它将在其主视图中显示许多可以选择的视觉元素。这些元素可以放置在视图中的任何位置。 UI将支持各种选择元素的方式:矩形选框选择,椭圆选框选择和“自由”套索选择。

我已经有矩形和椭圆选框工作了。算法非常简单;如果元素的区域与矩形/椭圆的区域相交,则该元素被视为“已选中”。

套索选择将像Photoshop中的现代图像处理应用程序一样工作;用户可以单击并拖动将自行关闭的路径,并且将选择所绘制路径中包含的元素。

该算法可能比矩形/椭圆形选择复杂得多,因为选择的形式不受限制。我想知道是否有人有写这样的经验,或者你是否可以指出我正确的方向,关于什么样的编程技术是必要的,这个算法最有效的方法是什么。

提前致谢。

3 个答案:

答案 0 :(得分:7)

我能想到的唯一方法是将套索轮廓视为多边形。然后,您可以使用任何标准point-inside-polygon test来检查要选择的元素。

当多边形与自身相交时,你必须做出决定该做什么(例如图8)。

构造多边形时,为了防止它得到太多点,也许你可以跳过太接近前一点的点(可能是3个像素左右,具体取决于你的应用)。

答案 1 :(得分:2)

您正在查看多边形问题中的一个点: http://en.wikipedia.org/wiki/Point_in_polygon如果可以保证多边形是凸的(不太可能),则算法变得更简单。

答案 2 :(得分:0)

对于自由手套索工具,您可以采用这个非常简单的解决方案:将选区边框的所有点保存在字典中。以x为键,(y1y2)为值,y1 <= y2。然后循环遍历所有x'并查看dict中是否有条目。如果是这样,所有点x' = xy >= y1 and y <= y2都在选择中。

可能不是最佳解决方案,但它应该有效。