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