【发布时间】:2011-08-28 14:07:09
【问题描述】:
当我们查看一组树木的照片时,我们能够识别出这张照片主要是绿色和棕色,或者对于一张大海的照片,我们能够识别出它主要是蓝色的。
有谁知道可以用来检测照片中突出颜色的算法吗?
我可以设想 RGB 空间或类似空间中的 3D 聚类算法。我想知道是否有人知道现有技术。
【问题讨论】:
标签: image-processing
当我们查看一组树木的照片时,我们能够识别出这张照片主要是绿色和棕色,或者对于一张大海的照片,我们能够识别出它主要是蓝色的。
有谁知道可以用来检测照片中突出颜色的算法吗?
我可以设想 RGB 空间或类似空间中的 3D 聚类算法。我想知道是否有人知道现有技术。
【问题讨论】:
标签: image-processing
将图像从 RGB 转换为亮度和饱和度分离的色彩空间 (HSL/HSV) http://en.wikipedia.org/wiki/HSL_and_HSV
然后找到每个像素的色调分量的主导值。为每个像素的色调值制作直方图,并分析峰值落在哪个角度区域。例如,180 到 270 度之间象限中的大峰值意味着图像中有很大一部分蓝色。
在确定一种主色时可能会遇到一些困难。病态示例:左半部分为蓝色,右半部分为红色的图像。此外,色调显然不能很好地处理灰度。因此,具有 50% 白色和 50% 黑色的棋盘图像会遇到两个问题:黑白图像的色调是任意的,并且有两种颜色正好占图像的 50%。
【讨论】:
听起来您想从计算图像的image histogram 或color histogram 开始。主要颜色将与直方图中的峰值相关。
【讨论】:
您可能希望将图像从 RGB 更改为索引,然后您可以使用常规直方图并检测图片(您可能已经知道,Matlab 使用 rgb2ind() 执行此操作),然后问题将减少到您的常规“在数组中查找峰值”。
然后 n = hist(Y,nbins) 将向量 Y 中的元素分箱到 10 个等距容器中,并将每个容器中的元素数作为行向量返回。
n 中的那些值会告诉你每个 bin 中有多少元素。然后只需摆弄箱的数量以使它们足够宽,每个中有多少元素将使您将所述箱视为主要颜色,然后取出包含这些元素的箱,计算索引与它们的中间对应,并再次将其转换为RGB。
无论您使用什么进行处理,都可能具有与那些类似的功能
【讨论】:
GOTO 1 剩余像素,直到任意少(1% 或 1%)。您可能还想对图像进行预处理,例如应用高通滤波器(仅去除非常低的频率)以使照片中的光线均匀 — http://en.wikipedia.org/wiki/Checker_shadow_illusion
【讨论】: