Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing Lab空间中基于不同距离函数的Kmeans聚类_Image Processing_Data Mining_K Means_Hierarchical Clustering_Color Space - Fatal编程技术网

Image processing Lab空间中基于不同距离函数的Kmeans聚类

Image processing Lab空间中基于不同距离函数的Kmeans聚类,image-processing,data-mining,k-means,hierarchical-clustering,color-space,Image Processing,Data Mining,K Means,Hierarchical Clustering,Color Space,问题: 使用K均值对CIE实验室中的相似颜色像素进行聚类 我想用CIE94来表示2像素之间的距离 我读到的是Kmeans在“欧几里德空间”中的工作,其中位置坐标通过成本函数最小化,即(平方差之和) 在欧几里得以外的空间中不使用kmeans的原因是 “算法通常表示为按距离将对象分配到最近的簇。标准算法旨在最小化簇内平方和(WCSS)目标,因此按“最小平方和”进行分配,这完全等同于按最小欧几里德距离赋值。使用(平方)欧氏距离以外的其他距离函数可能会阻止算法收敛“”(源wiki) 那么,如何在实验室

问题: 使用K均值对CIE实验室中的相似颜色像素进行聚类

我想用CIE94来表示2像素之间的距离

我读到的是Kmeans在“欧几里德空间”中的工作,其中位置坐标通过成本函数最小化,即(平方差之和) 在欧几里得以外的空间中不使用kmeans的原因是 “算法通常表示为按距离将对象分配到最近的簇。标准算法旨在最小化簇内平方和(WCSS)目标,因此按“最小平方和”进行分配,这完全等同于按最小欧几里德距离赋值。使用(平方)欧氏距离以外的其他距离函数可能会阻止算法收敛“”(源wiki)

那么,如何在实验室空间中使用距离CIE 94进行相似颜色聚类呢


那么如何解决这个问题呢?这里的最小化函数应该是什么?如果k均值欧几里德公式起作用,如何将欧几里德空间映射到实验室空间?还有其他方法吗

其他距离函数存在k-均值变化


特别是k-medoids(PAM)可用于任意距离函数。

CIE LAB经常用于聚类的原因是它将颜色减少到二维(而不是具有3个颜色通道的RGB)。您可以很容易地想到笛卡尔坐标系中每个像素的颜色,而不是点
(x,y)
您有点
(a,b)
,从这里您只需执行2d kmeans

具体如何实现kmeans取决于您。将颜色缩小到二维空间的好处是我们可以想象网格上的数据,现在我们可以使用任何我们想要的规则距离度量。马氏体、欧几里德、1范数、城市街区等等。这里的可能性真的是无穷无尽

您不必使用CIELAB,也可以轻松地使用YCbCr、YUV或任何其他表示二维颜色的颜色空间。如果您想尝试3d kmeans,您可以使用rgb、hsv等。高维的一个问题是簇的稀疏性(大方差),最重要的是,计算时间增加

为了好玩,我用kmeans对两幅图像进行了聚类,一幅在实验室,另一幅在YCbCr中,你可以看到聚类几乎是相同的(除了标签不同),只是证明了确切的颜色空间是不相关的,主要的一点是将kmeans的维度与数据的维度相匹配

编辑

你在评论中提出了一些好的观点。我只是在演示,通过抽象问题,您可以想象相同基本聚类算法的许多变化。但你是对的,使用CIELAB有很多好处

回到距离测量。Kmeans有两个步骤,赋值和更新(与期望最大化算法非常相似)。该距离用于k-均值的赋值步骤。下面是一些psuedo代码

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
您将创建一个函数
calculate_distance
,该函数使用cielab94中的
delta_e
计算。此公式使用所有3个通道计算距离。希望这能回答你的问题

注意 我的示例仅使用2个颜色通道,忽略亮度通道。我使用了这种技术,因为尽管存在光照差异(如阴影),目标通常是组颜色。
delta_E
度量不是光照不变的。这可能与您的应用程序有关,也可能与您的应用程序无关,但请记住这一点

使用平方欧几里德距离的结果

使用城市街区距离的结果

使用CIELAB的原因是它几乎接近人类的感知。CIELAB颜色空间是一个绝对的颜色空间,它精确地定义了颜色。它不依赖于输入或输出设备。因此,在类似的颜色检索问题中,人类对颜色差异的感知在CIELAB中的差异情况下是相同的,因此将表现得更好。工作良好的区别是实验室空间的CIE 94。我不知道如何用k均值来表示这个距离,因为cie94不是欧几里德距离。你在实验室空间用k均值用欧几里德距离进行聚类,对吗?我实际上用的是平方欧几里德距离。我编辑了我的答案,以便更准确地显示新距离度量的使用位置。如果提供的任何答案解决了您的问题,请接受它,否则请评论为什么它不符合您的要求!