【问题标题】:Algorithm for smart floodfill in raster image光栅图像智能填充算法
【发布时间】:2017-07-16 16:36:30
【问题描述】:

我正在尝试为光栅图像实现泛洪填充方法。 对于中心像素,它很容易并且可以正常工作,但问题是填充边框附近的像素,它们具有不同的颜色。

例如,如果在白色背景上绘制黑色图形,某些边框像素将具有灰色而不是黑色(用于平滑)。

floodfill 期间的图像编辑器(如paint.net)修复了将这些像素更改为新旧像素之间的某种中间颜色的问题。这里我用红色填充了图形,灰色像素变成了红色渐变

我需要知道如何使用 RGB 像素操作将灰色像素变成某种颜色以填充(这里是红色,但可以是任何颜色)的方法或算法。

感谢您的帮助。

【问题讨论】:

  • 您可以根据像素颜色ci填充颜色,开始像素颜色c0和填充颜色c1,例如:ci = c1*|ci|/|c0|,除非您正在处理黑色。不要忘记处理饱和度(标准化)。您也可以使用差异:|ci-c0|/maxdif 其中maxdif 是填充的阈值 ....
  • #Lubch:你的尝试是什么?
  • @Spektre 感谢您的回答,但我担心我没有抓住您 :-( 如果我将它用于 231;231;231 像素,我不会得到 247;72;72。也许我会不正确使用您的公式 (ci = c1*|ci|/|c0|)
  • @gpasch 我正在尝试像右侧一样填充左图,不仅改变白色像素,还改变浅灰色像素。所以我需要算法如何 f.e. 231;231;231 通过填充 255;0;0 变为 247;72;72
  • @Lubch 为您想要模仿的特定实现推导底层方程您需要创建 R、G、B、Gray 渐变并用控制颜色填充它们,以查看颜色如何准确组合.. . 还有 alpha 通道吗?

标签: image image-processing rgb pixels


【解决方案1】:

因此,为了与示例中类似的效果,我们只需要在新旧颜色之间使用 & 操作即可。

对于 RGB 颜色:

resultColor.R = (byte)(oldColor.R & newColor.R);
resultColor.G = (byte)(oldColor.G & newColor.G);
resultColor.B = (byte)(oldColor.B & newColor.B);

如果 RGB 颜色是 Int 数:

resultColor = oldColor & newColor;

它的颜色与下面示例中的颜色不完全相同,但非常相似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多