当我们看一组树的照片时,我们能够识别出照片主要是绿色和棕色的,或者对于海洋的照片,我们能够识别出它主要是蓝色的。
有没有人知道一种算法可以用来检测照片中的突出颜色?
我可以设想在RGB空间或类似的空间中的3D聚类算法。我想知道是否有人知道现有的技术。
发布于 2011-08-28 22:49:32
将图像从RGB转换为具有亮度和饱和度分离(HSL/HSV) http://en.wikipedia.org/wiki/HSL_and_HSV的颜色空间
然后找到每个像素的色调分量的主导值。为每个像素的色调值制作一个直方图,并分析峰值落在哪个角度区域。例如,象限中180度到270度之间的大峰值意味着图像中有很大一部分蓝色。
确定一种主色可能有几个困难。病理示例:左半部分为蓝色,右半部分为红色的图像。而且,色调显然不能很好地处理灰度。因此,具有50%白色和50%黑色的棋盘图像将受到两个问题的影响:对于黑/白图像,色调是任意的,并且有两种颜色恰好是图像的50%。
发布于 2011-08-28 22:20:10
听起来您想要从计算图像的image histogram或color histogram开始。主色将与直方图中的峰值相关。
发布于 2011-08-28 22:28:17
您可能想要将图像从RGB更改为索引,然后您可以使用常规直方图并检测图片(正如您可能已经知道的那样,Matlab使用rgb2ind()执行此操作),然后问题将简化为常规的“在数组中查找峰值”。
然后n= hist(Y,nbins)将向量Y中的元素放入10个等间距的容器中,并返回每个容器中元素的数量作为行向量。
N中的这些值将给出每个bin中有多少个元素。然后,问题就是调整bin的数量以使其足够宽,以及每个bin中有多少元素会使您将bin视为主要颜色,然后将包含这些元素的bin,计算与其中间相对应的索引,并再次将其转换为RGB。
无论您在处理过程中使用什么,都可能具有与这些功能类似的功能
https://stackoverflow.com/questions/7221452
复制相似问题