问题: 使用K均值在CIE LAB中聚类相似的颜色像素。
我想将CIE 94用于2个像素之间的距离 Formula of CIE94
我读到的是Kmeans在“欧几里德空间”工作,其中位置坐标通过成本函数最小化,即(平方差之和) 不在欧几里德以外的空间使用kmeans的原因是 “”算法通常表示为按距离将对象分配到最近的聚类。标准算法旨在最小化聚类内的平方和(WCSS)目标,因此通过“最小平方和”进行分配,这完全相同通过最小的欧几里德距离进行分配。使用除(平方)欧几里德距离之外的不同距离函数可以阻止算法收敛“”(源维基)
那么如何在LAB SPACE中使用距离CIE 94进行类似的颜色聚类?
那么如何处理这个问题呢?这里的最小化功能应该是什么?如果k均值欧几里德公式起作用,如何将欧氏空间映射到实验室空间?还有其他方法吗?
答案 0 :(得分:1)
CIE LAB经常用于聚类的原因是因为它将颜色减少到2维(与具有3个颜色通道的RGB相反)。你可以很容易地想到笛卡尔坐标系中每个像素的颜色,而不是你有点(x,y)
的点(a,b)
。从这里你只需要执行2d kmeans。
你究竟如何实现kmeans取决于你。将颜色减少到2d空间的好处是我们可以想象网格上的数据,现在我们可以使用我们想要的任何常规距离测量。 Mahalonobis,欧几里德,1范数,城市街区等。这里的可能性真的很无穷。
您不必使用CIELAB,您可以轻松使用YCbCr,YUV或任何其他代表2维颜色的色彩空间。如果你想尝试3d kmeans,你可以使用rgb,hsv等。更高维度的一个问题是簇的稀疏性(大的方差),最重要的是,增加了计算时间。
为了好玩我只包括使用kmeans聚类的两个图像,一个在LAB中,一个在YCbCr中,你可以看到聚类几乎相同(除了标签不同),只是证明了确切的颜色空间是无关紧要的,主要的一点是将你的kmeans的维度与你的数据的维度相匹配
修改强>
你在评论中提出了一些好处。我只是通过抽象问题来证明你可以想象相同基本聚类算法的许多变化。但你是对的,使用CIELAB
有好处回到距离测量。 Kmeans有两个步骤,分配和更新(它与期望最大化算法非常相似)。该距离用于k均值的分配步骤。这是一些伪代码
for each pixel 1 to rows*cols
for each cluster 1 to k
dist[k] = calculate_distance(pixel, mu[k])
pixel_id = index k of minimum dist
您将使用cielab94中的calculate_distance
计算创建一个函数delta_e
。此公式使用所有3个通道来计算距离。希望这能回答你的问题
注意强>
我的示例仅使用2个颜色通道,忽略亮度通道。我使用这种技术,因为尽管照明差异(例如阴影),目标通常是组颜色。 delta_E
指标不是照明不变的。这可能是也可能不是您的应用程序的问题,但需要牢记这一点。
使用方形欧氏距离的结果
使用cityblock距离的结果
答案 1 :(得分:0)
其他距离函数有k-means变体。
特别是k-medoids(PAM)适用于任意距离函数。