gpt4 book ai didi

java - 颜色偏移图像以匹配调色板

转载 作者:行者123 更新时间:2023-12-01 20:19:59 26 4
gpt4 key购买 nike

enter image description here我想知道是否有人知道一种算法,可以改变图像的饱和度、颜色、亮度等属性,使其与调色板匹配,但看起来仍然足够好。

如果有人可以分享有关如何做到这一点的任何想法,那就太好了。

我的目标是在抖动图像时通过这样做获得更好的结果,因为我的调色板仅包含 20 种颜色。

最佳答案

当我使用my simple C++ dithering时在此输入图像上(从您的图像中裁剪):

in img

并使用不同的颜色作为调色板:

in pal

我得到了这个输出:

dithering

顶部的方 block 是所使用的调色板,对我来说看起来有超过 20 种颜色...正如您所看到的,输出比您的好得多,但您的抖动结果看起来太像素化,是不是经过下采样然后缩放?

仅使用 R、G、B、C、M、Y 2 种色调和 3 种灰度会导致 15 种颜色抖动:

15 colors

RGB 的色调和组合越多,结果就越好...这里是 3 种色调 3^3=27 种颜色的所有组合:

27 colors

[编辑1]算法

  1. 分别处理图像的每一行

    所以通过水平或垂直线处理你的图像。在处理任何包含允许颜色的线条和调色板 pal[] 之前,您需要将 r0,g0,b0 带符号的临时变量设置为零。

  2. 对于(已处理行的)每个像​​素

    提取其r,g,b并将其添加到r0,g0,b0,然后找到与(r0,g0,b0)最接近的颜色 在调色板 pal[] 中,并从 r0,g0,b0 中减去所选的 r,g,b

像这样:

for (y=0;y<height;y++)
{
r0=0; g0=0; b0=0;
for (x=0;x<width;x++)
{
// pick and add wanted color
col=pixel(x,y);
r0+=col.r;
g0+=col.g;
b0+=col.b;
// chose closest color
ix=0; col=(r0,g0,b0);
for (i=0;i<palette_size;i++)
if (color_distance(col,pal[i])<color_distance(col,pal[ix]))
ix=i;
col=pal[ix];
// render and substract chosed color
pixel(x,y)=col;
r0-=col.r;
g0-=col.g;
b0-=col.b;
}
}

通过LUT[r][g][b]表可以显着加快选择最接近颜色的速度。

这种方法既快速又简单,但在视觉效果上远非最佳。

关于java - 颜色偏移图像以匹配调色板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com