RGB 或 HSV 尺度上的 k 均值聚类?
k-means clustering on RGB or HSV scale?
我想分割图像,但有人告诉我 RGB 的欧氏距离不如 HSV——但对于 HSV,并非所有的 H、S、V 都在同一范围内,所以我需要正常化。标准化 HSV 然后进行聚类是个好主意吗?如果是这样,我应该如何标准化 HSV 量表?
谢谢
色调是循环的。
不要对此类数据使用均值(因此,k 均值)。
首先你需要知道为什么在图像分割中HSV比RGB更受欢迎。 HSV 分离颜色信息(Chroma) and image intensity or brightness level (Luma),如果你想做图像分割,这非常有用。例如,如果您尝试对以大海为背景的照片使用 RGB 方法,那么大海中的主要 RGB 分量很可能不是蓝色(通常是因为阴影或光照)。但是,如果您使用的是 HSV,则值是分开的,您可以仅使用饱和度和色调来构建直方图或阈值规则。
有一篇非常好的论文比较了 RGB 和 HSV 方法,我认为这对您来说是一个很好的读物 -> http://www.cse.msu.edu/~pramanik/research/papers/2002Papers/icip.hsv.pdf
由于 HSV 分量表示像素的色相、饱和度和灰度强度,它们在颜色方面彼此不相关,因此每个分量在定义该像素的 属性 方面都有自己的作用,例如色调将为您提供有关颜色的信息(换句话说是波长)饱和度总是显示白色与该颜色混合的百分比,而值只是该颜色的大小(换句话说强度),这就是为什么 HSV space 不遵循相同的比例来表示值,而色调也可以在比例上变为负值(因为这些是循环值)但强度(V)永远不会变为负值,因此归一化对聚类没有多大帮助,更好的想法是,如果你想进行颜色聚类,你应该只在 Hue 上应用聚类。
现在为什么欧几里德不适合多通道聚类是因为它沿均值的分布是球形的(对于二维圆形)所以如果它不能在 (147,175,208) 和 (208,175,147) 之间产生任何差异,两者将具有相同的距离从中心开始,最好使用马氏距离进行距离计算,因为它使用分量的协方差矩阵,这使得该距离沿均值呈抛物线分布。
所以如果你想在 RGB 颜色中进行颜色分割 space 使用马哈拉诺比斯距离(但它的计算量很大,因此会减慢聚类过程)并且如果你想在 HSV 颜色中进行聚类 space 使用 Hue 进行颜色分割,然后使用 V 对分割输出进行微调。
希望对您有所帮助。谢谢
我想分割图像,但有人告诉我 RGB 的欧氏距离不如 HSV——但对于 HSV,并非所有的 H、S、V 都在同一范围内,所以我需要正常化。标准化 HSV 然后进行聚类是个好主意吗?如果是这样,我应该如何标准化 HSV 量表?
谢谢
色调是循环的。
不要对此类数据使用均值(因此,k 均值)。
首先你需要知道为什么在图像分割中HSV比RGB更受欢迎。 HSV 分离颜色信息(Chroma) and image intensity or brightness level (Luma),如果你想做图像分割,这非常有用。例如,如果您尝试对以大海为背景的照片使用 RGB 方法,那么大海中的主要 RGB 分量很可能不是蓝色(通常是因为阴影或光照)。但是,如果您使用的是 HSV,则值是分开的,您可以仅使用饱和度和色调来构建直方图或阈值规则。
有一篇非常好的论文比较了 RGB 和 HSV 方法,我认为这对您来说是一个很好的读物 -> http://www.cse.msu.edu/~pramanik/research/papers/2002Papers/icip.hsv.pdf
由于 HSV 分量表示像素的色相、饱和度和灰度强度,它们在颜色方面彼此不相关,因此每个分量在定义该像素的 属性 方面都有自己的作用,例如色调将为您提供有关颜色的信息(换句话说是波长)饱和度总是显示白色与该颜色混合的百分比,而值只是该颜色的大小(换句话说强度),这就是为什么 HSV space 不遵循相同的比例来表示值,而色调也可以在比例上变为负值(因为这些是循环值)但强度(V)永远不会变为负值,因此归一化对聚类没有多大帮助,更好的想法是,如果你想进行颜色聚类,你应该只在 Hue 上应用聚类。
现在为什么欧几里德不适合多通道聚类是因为它沿均值的分布是球形的(对于二维圆形)所以如果它不能在 (147,175,208) 和 (208,175,147) 之间产生任何差异,两者将具有相同的距离从中心开始,最好使用马氏距离进行距离计算,因为它使用分量的协方差矩阵,这使得该距离沿均值呈抛物线分布。
所以如果你想在 RGB 颜色中进行颜色分割 space 使用马哈拉诺比斯距离(但它的计算量很大,因此会减慢聚类过程)并且如果你想在 HSV 颜色中进行聚类 space 使用 Hue 进行颜色分割,然后使用 V 对分割输出进行微调。
希望对您有所帮助。谢谢