【问题标题】:detect if an image is generally red, green, blue, or black检测图像通常是红色、绿色、蓝色还是黑色
【发布时间】:2011-09-22 03:04:33
【问题描述】:

我正在处理红色、绿色、蓝色或黑色的小图像(想想 4 色套牌中的卡片等级)。有什么好的快速算法来确定图像的颜色?

有关一组输入示例,请参阅here,但图像可以缩放,因此它们不会那么清晰。

【问题讨论】:

    标签: image graphics image-processing colors


    【解决方案1】:

    这些是您使用的准确图像吗?如果是这样,所有图像上是否有一个像素会被着色?我在想西装在哪里。看看西装应该在哪里的像素,它会告诉你卡片是什么“颜色”。

    更通用的方法可能包括分析整个图像(缓慢但有效)、缩小图像并分析每个像素(如果最终得到小图像则更可行,但缩放可能会影响颜色)或随机采样 n 个像素(或像素的行/列),如果提前知道颜色的 色度,则可能需要使用遮罩,但您需要通用方法吗?

    哦 - 另一个想法:你控制输入图像的来源吗?也许你可以用一个数字覆盖一些图像元数据标签来表示“颜色”。这有点作弊,因为不涉及真正的图像处理,而且标签容易被剥离/修改,但这可能是最快的方法。

    【讨论】:

    • 我确实需要一个通用的方法——我不会特别使用这些图像,而且我不会提前知道它们是什么。那么,给定一个像素,考虑到红色像素可能是(255,0,0)或(255,31,12)或(253,127,114),我如何判断该像素是红色、绿色、蓝色还是黑色,等等?
    • @Claudiu:啊,所以你也有“红色”像素?我想你必须定义一个“红色”的范围。考虑一下,如果有人输入橙色或粉色,你会怎么做?
    • @Claudiu:您可能想查看颜色直方图:en.wikipedia.org/wiki/Color_histogram
    • 我会将粉红色视为浅红色,但不是橙色。我想我只需要分析我正在使用的图像,看看他们通常认为什么是“红色”
    • 啊感谢直方图链接。看来我应该转换为 HSV 颜色空间并在那里寻找范围
    【解决方案2】:

    这对于一个像素来说足够好:

    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
    

    对于整幅图像,我将红绿蓝黑像素相加,返回像素最多的颜色。

    【讨论】:

      【解决方案3】:

      这篇文章似乎已经解决了,但如果你不介意我的 2 美分...

      在我看来,您需要一种通用方法,并且您事先不知道图像是什么。虽然已经发布的答案应该足以快速编码并进行一些调整,但如果您仍然遇到问题,我建议您使用自组织地图:http://davis.wpi.edu/~matt/courses/soms/http://www.ai-junkie.com/ann/som/som1.html

      可能需要一些(无监督的)训练时间来获得一个像样的地图/识别器(嘿,这毕竟是一个神经网络),但我遇到了一个有点像你的问题,它们对我来说效果很好(很容易适应,灵活适应不同的照明等)。

      【讨论】:

        猜你喜欢
        • 2018-09-15
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 2017-08-19
        • 2017-05-28
        • 1970-01-01
        • 2016-09-22
        • 2013-12-19
        相关资源
        最近更新 更多