algorithm - 如何删除由线段和颜色 block 分隔的区域?

标签 algorithm graphics line pixel

给定下图:

enter image description here

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

最佳答案

用两点定义一条线。直线方程将必须去除的像素分开。如果你想以新边界平滑地跟随形状曲线的方式删除点,你需要一些方法来插入形状边界(基于来自边界的其他点的信息)。该插值必须通过两个黑点。现在,如果你有插值,你可以计算两个黑点之间的插值曲线,并将曲线上的所有点设置为白色。我可以建议至少使用曲线中的一个点并使用一些 cubic spline interpolation .

编辑: 根据您的评论。

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

enter image description here

关于algorithm - 如何删除由线段和颜色 block 分隔的区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650684/

相关文章:

algorithm - "Rounding"一小组颜色中最接近的颜色值

algorithm - 在估计算法的最坏情况执行时间 T(x,y) 时,我应该计算 if 语句吗?

graphics - 如何将由 4 个点标识的任意平面投影到二维平面上?

Linux在命令行中逐像素创建图像

java - 在java中追加到文件

algorithm - 算法的BigO时间复杂度

c++ - 如何在使用 TCP 的序列化/反序列化中避免跨语言依赖?

c# - 如何使用 .NET Core 绘图?

c# - 在 winforms 中显示 OpenTk.GLControl

html - 在 HTML5 canvas 上点两下鼠标画一条线?