如何解决使用欧几里德距离的颜色量化给出了跳跃的结果
我正在从事一个艺术项目,该项目根据两者颜色之间的距离(以 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 举报,一经查实,本站将立刻删除。