【发布时间】:2011-09-22 03:04:33
【问题描述】:
我正在处理红色、绿色、蓝色或黑色的小图像(想想 4 色套牌中的卡片等级)。有什么好的快速算法来确定图像的颜色?
有关一组输入示例,请参阅here,但图像可以缩放,因此它们不会那么清晰。
【问题讨论】:
标签: image graphics image-processing colors
我正在处理红色、绿色、蓝色或黑色的小图像(想想 4 色套牌中的卡片等级)。有什么好的快速算法来确定图像的颜色?
有关一组输入示例,请参阅here,但图像可以缩放,因此它们不会那么清晰。
【问题讨论】:
标签: image graphics image-processing colors
这些是您使用的准确图像吗?如果是这样,所有图像上是否有一个像素会被着色?我在想西装在哪里。看看西装应该在哪里的像素,它会告诉你卡片是什么“颜色”。
更通用的方法可能包括分析整个图像(缓慢但有效)、缩小图像并分析每个像素(如果最终得到小图像则更可行,但缩放可能会影响颜色)或随机采样 n 个像素(或像素的行/列),如果提前知道颜色的 色度,则可能需要使用遮罩,但您需要通用方法吗?
哦 - 另一个想法:你控制输入图像的来源吗?也许你可以用一个数字覆盖一些图像元数据标签来表示“颜色”。这有点作弊,因为不涉及真正的图像处理,而且标签容易被剥离/修改,但这可能是最快的方法。
【讨论】:
这对于一个像素来说足够好:
def get_ishness(r,g,b):
h,s,v = rgb_to_hsv(r,g,b) #h from 0-360, s and v from 0-100
if v < 50: return 'black'
if s < 15: return None
if h < 10: return 'red'
if 80 < h < 100: return 'green'
if 210 < h < 230: return 'blue'
return None
对于整幅图像,我将红绿蓝黑像素相加,返回像素最多的颜色。
【讨论】:
这篇文章似乎已经解决了,但如果你不介意我的 2 美分...
在我看来,您需要一种通用方法,并且您事先不知道图像是什么。虽然已经发布的答案应该足以快速编码并进行一些调整,但如果您仍然遇到问题,我建议您使用自组织地图:http://davis.wpi.edu/~matt/courses/soms/ 和 http://www.ai-junkie.com/ann/som/som1.html
可能需要一些(无监督的)训练时间来获得一个像样的地图/识别器(嘿,这毕竟是一个神经网络),但我遇到了一个有点像你的问题,它们对我来说效果很好(很容易适应,灵活适应不同的照明等)。
【讨论】: