首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法设计:最突出颜色的图像量化

算法设计:最突出颜色的图像量化
EN

Stack Overflow用户
提问于 2014-12-17 13:30:03
回答 2查看 929关注 0票数 3

因此,我正在研究一种从图像中提取人类感知到的主要颜色的方法。

举个例子,下面是一张照片:https://500px.com/photo/63897015/looking-out-for-her-kittens-by-daniel-paulsson

大多数人会认为,“主导”的颜色是刺眼的蔚蓝。使用标准量化,然而,蓝色完全消失时,你下降到16种左右的颜色。眼睛只占画布的0.2%,所以平均来说根本不起作用。

Project :我正在构建一个Rails应用程序,它将接受上传的照片或特定的颜色,并将返回一组具有相似主导颜色的其他照片。该工具将被设计师用来寻找与其原有配色方案相匹配的库存照片。如果我能把技术问题弄清楚的话,我还有其他很酷的想法。

Current Research:我在过去的24小时里一直在阅读这些东西。在我尝试过的所有服务中,TinEye是唯一正确使用它的服务,但它们是封闭的源。我不能提供超过一个链接,但你可以谷歌'TinEye颜色‘找到它。

工具使用:我使用ImageMagick进行图像转换和直方图生成。

想要的结果:当给出这张照片时,我想创建一个5-6种颜色的调色板,饱和的天蓝色就是其中之一。

Current方法:我现在所做的方法是将其减少到32或64种颜色,并寻找饱和度/色调异常值。如果标准差较低,且异常值很远,我将将其添加到调色板中。然后,我将进一步将照片减少到4种颜色,并将它们组合成5-6色的调色板。

我的问题:我的问题是ImageMagick的量化算法。我不想取这些颜色的平均值,我想把它们按相似的颜色分组,然后取中间的,倾向于饱和的颜色。当我把猫的图片缩小到32种颜色时,眼睛就变成了灰白色。

所以我问你们,你们是否知道任何算法或颜色原理,可以让我找到从图像中脱颖而出的颜色,而不把它们混为一谈。我想要的颜色实际上是在图像中,而不是模糊的平均4-5种颜色的总和。

从更广泛的意义上说,TinEye做得很好,我想知道他们是如何做到的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-17 14:27:47

你说,“最主要的”颜色是“那刺眼的蔚蓝”。

你还说,结果是,饱和的天蓝色是你提取的调色板中的5-6种颜色之一。

你最终想要的是‘一种实际存在于图像中的颜色,而不是4到5种颜色加在一起的模糊平均值。

为了开始处理这个任务,我首先尝试得到“那刺眼的天蓝色”的确切颜色定义。

但在这里,我已经卡住了:那刺眼的天蓝色已经是至少20种不同颜色的蓝色的混合物了!看这里,一幅被裁剪的猫眼,在1000%的变焦水平上:

,那么你到底想要哪一个?那么,如果你想象的蓝色的最佳匹配最终是一个‘模糊的意思’的几种颜色的总和,而它甚至没有出现在原来的图像一次?!

更新

这是我第一次尝试..。

1.使用-posterize 8减少颜色

代码语言:javascript
复制
convert 2048.jpg -posterize 8 posterized-8.png

这是猫的眼睛在1000%的时候被放大和放大:

2.创建文字“直方图”,描述后处理后最常用的12种颜色。

代码语言:javascript
复制
convert              \
   posterized-8.png  \
  -format %c         \
  -colorspace lab    \
  -colors 12         \
   histogram:info:-  | sort -n -r

  850708: (172,171,171) #ACABAB srgb(172,171,171)
  370610: (219,219,226) #DBDBE2 srgb(219,219,226)
  262870: (218,201,183) #DAC9B7 srgb(218,201,183)
  162588: (182,182,219) #B6B6DB srgb(182,182,219)
  161739: (182,219,219) #B6DBDB srgb(182,219,219)
  115671: ( 92, 87, 87) #5C5757 srgb(92,87,87)
  102337: (146,109,109) #926D6D srgb(146,109,109)
   86318: ( 67, 46, 46) #432E2E srgb(67,46,46)
   82882: ( 22, 20, 21) #161415 srgb(22,20,21)
   66221: (109,139,154) #6D8B9A srgb(109,139,154)
   58403: (146,146,109) #92926D srgb(146,146,109)
   38949: ( 97,109,146) #616D92 srgb(97,109,146)

3.使用12种最常用的颜色创建一个显示调色板的贴片条:

代码语言:javascript
复制
convert      \
   -size 100x100 \
    xc:"srgb(172,171,171)" \
    xc:"srgb(219,219,226)" \
    xc:"srgb(134,119,120)" \
    xc:"srgb(182,182,219)" \
    xc:"srgb(182,219,219)" \
    xc:"srgb(92,87,87)" \
    xc:"srgb(146,109,109)" \
    xc:"srgb(67,46,46)" \
    xc:"srgb(22,20,21)" \
    xc:"srgb(109,139,154)" \
    xc:"srgb(146,146,109)" \
    xc:"srgb(97,109,146)" \
   +append \
    palette.png

这就是调色板的样子(它忽略了眼睛中非常明亮的地方的颜色):

票数 2
EN

Stack Overflow用户

发布于 2014-12-17 14:36:50

这是一个初步的想法..。我,或其他人,可能会进一步发展。这是由你的声明提示,你想赞成饱和的颜色。

首先,从照片中移除所有的黑人和白人,因为他们是不饱和的。然后转换为HSL颜色空间,提取饱和信道。对比将饱和度扩展到全范围,然后在应用ImageMagick的颜色量化算法时将其用作掩码。

代码语言:javascript
复制
convert cat.png -fuzz 20% -fill black \
    -opaque white                     \
    -opaque black                     \
    -colorspace HSL -channel S -separate -contrast-stretch 0.1% out.png

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27526729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档