我想在RGB图像数据集上应用k均值算法.我不知道该怎么做。您可以一步一步地提到基本流程。我确实了解图像处理和OpenCV的基础知识。
发布于 2016-03-30 07:37:45
您可以很容易地将k均值算法应用于RGB图像数据集。图像数据集不是特殊的,只是每个数据向量是三维的(R、G和B),并且值是0,255范围内的有界整数。
标准的k均值算法只需计算两个点之间的距离以及几个数据点的平均值。
有关k均值算法的更多信息,请参见例如这里。
朴素RGB颜色距离:如果有两个元素i和j分别具有RGB值(ri、gi、bi)和(rj、gj、bj),那么图像点i和j之间的距离d等于:
D= sqrt((ri-rj)^2+(gi-gj)^2+(bi-bj)^2)
几个颜色点的平均值分别是RGB值的平均值。
有关在OpenCV中实现这一点的信息,请参见OpenCV教程上的颜色量化示例。
更真实的颜色距离:遗憾的是,RGB颜色空间不是一个很好的颜色距离模型(参见约翰·福科什的优秀评论)。然而,CIE*ab颜色空间和一些相关的颜色距离模型似乎更适合.
步骤1:将RGB转换为CIE*ab (RGB依赖于设备,因此可能需要将其转换为某些绝对颜色空间RGB值)。
很可能您正在使用的平台已经有一个RGB到CIE*ab转换(Matlab、Java、Python或C++使用OpenCV)。否则,您将不得不编写自己的(帮助)。
第二步:在k均值算法中计算距离.
来自那里的Delta *似乎很容易计算:
(l1,a1,b1)是数据点1的L_ab值,(l2,a2,b2)是数据点2的L_ab值。
D= sqrt((l1 - l2)^2 + (a1 - a2)^2 + (b1 - b2)^2)
在CIE_ab空间中,几种颜色的平均值将再次分别为每个L_ab分量的平均值。
但你也可能想尝试其他距离,看看什么是最有效的。
摘要:除了距离和平均计算外,不需要修改k-均值算法.对于更合适的距离,建议将其转换为另一个颜色空间(CIE*ab),并计算该颜色空间中的距离。
https://softwareengineering.stackexchange.com/questions/314222
复制相似问题