使用欧几里德距离的颜色量化给出了跳跃的结果

问题描述

我正在从事一个艺术项目,该项目根据两者颜色之间的距离(以 RGB 为单位)将实时视频源的像素转换为公司徽标。虽然此功能起作用,但它会产生不稳定的结果。似乎色彩空间中的某些点在两个“最近”点之间的某种叠加中摇摆不定。我现在正在尝试一种天真的聚类解决方案,因为我相信任何合适的解决方案对于实时视频来说都太慢了。我想知道是否有人有任何好主意来解决这个问题?我将包括我的代码和结果示例。谢谢!

(imgs 数组是徽标)

当前结果:https://gifyu.com/image/fk2y

function distance(r1,g1,b1,bright1,r2,g2,b2,bright2) {
  d =
    ((r2 - r1) * 0.3) ** 2 +
    ((g2 - g1) * 0.59) ** 2 +
    ((b2 - b1) * 0.11) ** 2 +
    ((bright2 - bright1) * 0.75) ** 2;
  return Math.round(d);
}

function draw() {

  if (x > 100 && z == true) {
    video.loadPixels();

    for (var y = 0; y < video.height; y++) {
      for (var x = 0; x < video.width; x++) {
        var index = (video.width - x - 1 + y * video.width) * 4;
        var r = video.pixels[index];
        var g = video.pixels[index + 1];
        var b = video.pixels[index + 2];
        var bright = (r + g + b) / 3;
        let least = 9999999;

        for (var i = 0; i < imgs.length; i++) {
          if (
            distance(
              imgs[i].r,imgs[i].g,imgs[i].b,imgs[i].bright,r,g,b,bright
            ) < least
          ) {
            least = distance(
              imgs[i].r,bright
            );
            place = imgs[i].img;
          }
        }

        image(place,round(x * vScale),y * vScale,vScale,vScale);
      }
    }
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)