因此,我正在研究一种从图像中提取人类感知到的主要颜色的方法。
举个例子,下面是一张照片: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做得很好,我想知道他们是如何做到的。
发布于 2014-12-17 14:27:47
你说,“最主要的”颜色是“那刺眼的蔚蓝”。
你还说,结果是,饱和的天蓝色是你提取的调色板中的5-6种颜色之一。
你最终想要的是‘一种实际存在于图像中的颜色,而不是4到5种颜色加在一起的模糊平均值。
为了开始处理这个任务,我首先尝试得到“那刺眼的天蓝色”的确切颜色定义。
但在这里,我已经卡住了:那刺眼的天蓝色已经是至少20种不同颜色的蓝色的混合物了!看这里,一幅被裁剪的猫眼,在1000%的变焦水平上:

,那么你到底想要哪一个?那么,如果你想象的蓝色的最佳匹配最终是一个‘模糊的意思’的几种颜色的总和,而它甚至没有出现在原来的图像一次?!
更新
这是我第一次尝试..。
1.使用-posterize 8减少颜色
convert 2048.jpg -posterize 8 posterized-8.png这是猫的眼睛在1000%的时候被放大和放大:

2.创建文字“直方图”,描述后处理后最常用的12种颜色。
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种最常用的颜色创建一个显示调色板的贴片条:
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这就是调色板的样子(它忽略了眼睛中非常明亮的地方的颜色):

发布于 2014-12-17 14:36:50
这是一个初步的想法..。我,或其他人,可能会进一步发展。这是由你的声明提示,你想赞成饱和的颜色。
首先,从照片中移除所有的黑人和白人,因为他们是不饱和的。然后转换为HSL颜色空间,提取饱和信道。对比将饱和度扩展到全范围,然后在应用ImageMagick的颜色量化算法时将其用作掩码。
convert cat.png -fuzz 20% -fill black \
-opaque white \
-opaque black \
-colorspace HSL -channel S -separate -contrast-stretch 0.1% out.png

https://stackoverflow.com/questions/27526729
复制相似问题