在C#中更改图像颜色时如何解决抗锯齿问题?

在C#中更改图像颜色时如何解决抗锯齿问题?,c#,image-processing,antialiasing,C#,Image Processing,Antialiasing,我正在处理图像,以改变他们的颜色从黑色到红色,蓝色,绿色等的要求。我使用SetPixel方法将图像的每个像素的颜色从黑色更改为红色 除了图像中的边界和一些曲线外,它的工作原理基本上很好。假设我用黑色圈出了一个图像。圆圈图像的颜色发生了变化,但当我缩放时,仍然可以看到边框周围的黑色圆点,而这些圆点并没有完全被红色所取代。我试着四处挖掘,发现它与抗锯齿有关 有没有遇到过类似的问题,或者对如何解决这个问题有什么想法/建议 非常感谢你的帮助 问候,, Tanush它可能与抗锯齿相关。消除混叠的本质是,像

我正在处理图像,以改变他们的颜色从黑色到红色,蓝色,绿色等的要求。我使用SetPixel方法将图像的每个像素的颜色从黑色更改为红色

除了图像中的边界和一些曲线外,它的工作原理基本上很好。假设我用黑色圈出了一个图像。圆圈图像的颜色发生了变化,但当我缩放时,仍然可以看到边框周围的黑色圆点,而这些圆点并没有完全被红色所取代。我试着四处挖掘,发现它与抗锯齿有关

有没有遇到过类似的问题,或者对如何解决这个问题有什么想法/建议

非常感谢你的帮助

问候,,
Tanush

它可能与抗锯齿相关。消除混叠的本质是,像素越靠近边缘(某物的边界),像素颜色与背景颜色的混合就越多(或者我们可以说它更“透明”)。 所以问题可能在于,您不仅需要将源颜色替换为目标颜色,还需要将从源颜色混合到背景颜色的像素替换为目标颜色。 要实现这一点,您需要:

1) 运行某种类型的边缘检测算法-它可能是您想要的或高级的

2) 若像素靠近边缘,且像素靠近源颜色的其他像素,则计算其不透明度(1-透明度)因子,该因子将为

opacity = (pixel_color-background_color)/(source_color-background_color) 不透明度=(像素颜色-背景颜色)/(源颜色-背景颜色) 3) 现在计算您必须替换当前抗锯齿像素的颜色:

new_color = background_color * (1-opacity) + opacity * target_color 新颜色=背景颜色*(1-不透明度)+不透明度*目标颜色 并将这种新的颜色,而不是抗锯齿像素

总之: 您需要检测抗锯齿像素并用您的抗锯齿像素版本替换它们

算法中最难的部分是检测抗锯齿像素——因为您无法确定是否100%概率地找到了所有边缘像素。此外,您也无法确定像素是否已消除混叠,或者刚开始使用这种颜色)。因此,在最终产品中可能会出现一些颜色噪声。但无论如何,这总比坐等好:)

祝你好运