【问题标题】:Algorithm for determining the prominant colour of a photograph确定照片显着颜色的算法
【发布时间】:2011-08-28 14:07:09
【问题描述】:

当我们查看一组树木的照片时,我们能够识别出这张照片主要是绿色和棕色,或者对于一张大海的照片,我们能够识别出它主要是蓝色的。

有谁知道可以用来检测照片中突出颜色的算法吗?

我可以设想 RGB 空间或类似空间中的 3D 聚类算法。我想知道是否有人知道现有技术。

【问题讨论】:

    标签: image-processing


    【解决方案1】:

    将图像从 RGB 转换为亮度和饱和度分离的色彩空间 (HSL/HSV) http://en.wikipedia.org/wiki/HSL_and_HSV

    然后找到每个像素的色调分量的主导值。为每个像素的色调值制作直方图,并分析峰值落在哪个角度区域。例如,180 到 270 度之间象限中的大峰值意味着图像中有很大一部分蓝色。

    在确定一种主色时可能会遇到一些困难。病态示例:左半部分为蓝色,右半部分为红色的图像。此外,色调显然不能很好地处理灰度。因此,具有 50% 白色和 50% 黑色的棋盘图像会遇到两个问题:黑白图像的色调是任意的,并且有两种颜色正好占图像的 50%。

    【讨论】:

      【解决方案2】:

      听起来您想从计算图像的image histogramcolor histogram 开始。主要颜色将与直方图中的峰值相关。

      【讨论】:

      【解决方案3】:

      您可能希望将图像从 RGB 更改为索引,然后您可以使用常规直方图并检测图片(您可能已经知道,Matlab 使用 rgb2ind() 执行此操作),然后问题将减少到您的常规“在数组中查找峰值”。

      然后 n = hist(Y,nbins) 将向量 Y 中的元素分箱到 10 个等距容器中,并将每个容器中的元素数作为行向量返回。

      n 中的那些值会告诉你每个 bin 中有多少元素。然后只需摆弄箱的数量以使它们足够宽,每个中有多少元素将使您将所述箱视为主要颜色,然后取出包含这些元素的箱,计算索引与它们的中间对应,并再次将其转换为RGB。

      无论您使用什么进行处理,都可能具有与那些类似的功能

      【讨论】:

        【解决方案4】:
        1. 平均图像中的所有像素。
        2. 移除距离平均颜色比标准差更远的所有像素。
        3. GOTO 1 剩余像素,直到任意少(1% 或 1%)。

        您可能还想对图像进行预处理,例如应用高通滤波器(仅去除非常低的频率)以使照片中的光线均匀 — http://en.wikipedia.org/wiki/Checker_shadow_illusion

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-13
          • 1970-01-01
          • 2015-07-16
          • 2010-11-12
          • 1970-01-01
          • 2021-01-02
          • 2014-05-30
          • 2011-03-17
          相关资源
          最近更新 更多