繁体   English   中英

colors skimage 的计数

[英]count number of colors skimage

我希望能够在图像的一部分中计算 colors 的数量。

我想到的一种方法是为灰度图像绘制直方图,然后计算峰值的数量,这就是 colors 的数量。


histogram, bin_edges = np.histogram(gray_image, bins = 256, range=(0,1))
plt.plot(histogram)
peaks = signal.find_peaks_cwt(histogram, 10)

当我这样做时, signal.find_peaks_cwt 说数组索引太多。

我如何 go 关于这个或者有更好的方法来计算 colors 的数量?

这个答案有点太长了,需要评论:

我不太清楚您要做什么。 您想计算图像中所有可区分的元素,还是要将所有色调(例如红色)计算为一种颜色?

也可以使用不同类型的数据类型来表示图像(例如float ∈ [-1, 1] 或uint8 ∈ [0, 255])。 在您的第一行中,您显然希望根据range=(0,1)获得 float 类型的图像。 通过分箱,您可能会丢失有关可区分元素的信息,因此无法计算可区分元素的数量。

计数可区分 colors

要计算灰度图像中所有可用的 colors(= 可区分元素),您可以使用以下单线。 (这当然也适用于float图像。如果你真的想区分每种颜色,这是完美的,但如果不是你的命令np.histogram是个好主意。)

len(set(gray_image.flatten()))

至于您使用scipy.signal.find_peaks_cwt(histogram, 10)得到的错误, find_peaks_cwt()需要一个一维数组作为第二个参数。 如果您提供 numpy 阵列,它将正常工作。

计数相似的簇 colors

如果您想对类似的 colors 进行聚类而不计算两次,您可以选择不同的方法。 这里的关键词是“颜色量化”。 本文所示,您可以使用聚类算法来量化图像中使用的 colors。 颜色量化后,您可以简单地重塑图像以保留 RGB 元组并使用 numpys unique方法,如下所示:

import numpy as np

len(np.unique(color_image.reshape(-1, 3), axis = 0))

有很多方法可以减少colors的数量。 posterize有两个功能,分别是后处理和quantize 我前面提到的帖子中展示了一种使用 Scikit learn 的 k-means 方法,您也可以在使用一组预定义的 colors 时尝试使用距离度量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM