2011-04-13 36 views
4

鉴于下面的图片:如何擦除由线段和颜色块分隔的区域?

enter image description here

A和B的位置是已知的,画面的其余部分仅仅是原始像素数据(只有红色和白色像素)。我可以使用什么算法擦除AB右侧的部分?

+0

两点不做一个多边形,他们做一条线。显然,你不想删除AB所做的行的所有内容,因为在第二个图像中,垂直行的一部分会被截断。你真的*想要删除什么?您是否期望算法能够检测垂直线的右边缘并删除AB右边的所有内容?有一个决定,你没有给我们的标准。 – 2011-04-13 14:43:20

+0

我想删除线段AB右侧的红色像素(以便最终结果是右侧的图片)。使用提供的算法[有](http://stackoverflow.com/questions/5630219/algorithm-to-find-the-coordinates-of-a-corner-in-a-simple-image)我会找到交点A和B.从那里,我想删除额外的红色部分。我同意删除该行以外的所有内容都不起作用,所以我正在寻找更好的算法。 – 2011-04-13 15:10:14

+0

好吧,所以基本上你想删除一个边是AB的多边形,其余的都是追踪边的那个结点?那么多余的结点将永远不会自行循环或延伸超过图像的极限? – 2011-04-13 15:13:18

回答

1

有两点定义一条线。线的方程分隔必须移除的像素。如果想要以某种方式删除点,使新边界沿着形状的曲线平滑流动,则需要一些方法来插入形状边界(基于边界中其他点的信息)。这个插值必须通过两个黑点。现在,如果有插值,可以计算两个黑点之间的插值曲线,并将所有点设置为白色。我可以建议使用曲线中至少一个点,并使用一些cubic spline interpolation。编辑: 根据您的意见。

然后,该算法很简单:保留一个从较低点(A)开始沿着边界(A')移动直到到达另一点的指针。这可以通过检查当前指针位置的邻居并比较颜色来完成。现在,当您移动指针时,将指针(A')上的红色点线移至定义在点A-B(绿色)之间的线(蓝色)。当行与另一黑点相同时(例如A'和B在同一行上),有一个指针位置。然后以跟踪边界的相同方式从B点开始一个新指针,并移除两个指针A'和B'之间的红色像素。

enter image description here

+0

其实上图是一个区域的缩放。整个画面更大,可能有更多的东西,除了结点之外,在线段的右侧。我正在寻找的算法需要检测线段右侧的红色像素,并在到达白色像素时停止擦除。另外,为了简单起见,我认为剪切是笔直的,它不需要很好地跟随曲线。 – 2011-04-13 16:47:11

+0

感谢罗斯,我最终实现了解决方案和Mark的组合,现在它工作的很好。 – 2011-04-14 12:25:12

1

你需要从画线到B,然后在红色像素的行右侧的一个开始flood fill

相关问题