如何擦除由线段和颜色块分隔的区域?

时间:2011-04-13 14:13:16

标签: algorithm graphics line pixel

如下图所示:

enter image description here

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

2 个答案:

答案 0 :(得分:1)

有两个点定义一条线。线的等式分隔了必须被移除的像素。如果要以新边框顺利跟随形状曲线的方式删除点,则需要某种方式来插入形状边框(基于边框中其他点的信息)。这种插值必须通过两个黑点。现在,如果您有插值,您可以计算两个黑点之间的插值曲线,并从曲线右侧设置为白色所有点。我可以建议在曲线中至少再使用一个点并使用一些cubic spline interpolation

编辑: 基于你的评论。

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

enter image description here

答案 1 :(得分:1)

您需要绘制从A到B的直线,然后在直线右侧的红色像素之一上开始flood fill