簡體   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