我必须使用适当的模式识别方法来检测不同墨水的数量
存在于高光谱图像中。
我在高光谱图像上使用了 K 均值聚类来检测墨水的数量,但是
结果图像变黑。这是我在 python 中实现的代码:
将 numpy 导入为 np
进口光谱
将 matplotlib.pyplot 导入为 plt
从 sklearn.cluster 导入 KMeans
从 sklearn.decomposition 导入 PCA
img = spectral.open_image("D:\MS CS Lectures\Semester 2\Pattern
识别\项目\HSI_Cube\w01_p02_corrected.hdr")
行、列、条带 = img.shape
数据 = np.zeros((行,列,带))
我在范围内(带):
data[:,:,i] = img.read_band(i)
data_2d = data.reshape(行 * 列,带)
pca = PCA(n_components=10)
data_pca = pca.fit_transform(data_2d)
data_norm = (data_pca - np.mean(data_pca, axis=0)) / np.std(data_pca, axis=0)
n_clusters = 5
kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(data_norm)
cluster_labels = kmeans.labels_.reshape(行,列)
颜色 = {
0:[0, 0, 0], # black
1:[0.6, 0.1, 0.1], # red
2:[0.2, 0.4, 0.6], # blue
3:[0.4, 0.6, 0.2], # green
4:[1, 0, 1] # magenta
}
rgb_image = np.zeros((行,列,3))
我在范围内(行):
for j in range(cols):
rgb_image[i,j,:] = colors[cluster_labels[i,j]]
plt.imshow(rgb_image, vmin =0, vmax = 255)
plt.show()
我得到的输出是:
我期待图像中显示不同的墨水。但是整个图像是黑色的。有人可以告诉我我在这里做错了什么吗?