我正在尝试检测高光谱图像中存在的墨水数量,但图像显示为黑色

问题描述 投票:0回答:0

我必须使用适当的模式识别方法来检测不同墨水的数量

存在于高光谱图像中。

我在高光谱图像上使用了 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

创建一个空的 3D 数组来存储数据

数据 = np.zeros((行,列,带))

将每个波段读入 3D 数组

我在范围内(带):

data[:,:,i] = img.read_band(i)

将数据重塑为二维数组

data_2d = data.reshape(行 * 列,带)

进行PCA降维

pca = PCA(n_components=10)

data_pca = pca.fit_transform(data_2d)

将 PCA 转换后的数据标准化为零均值和单位方差

data_norm = (data_pca - np.mean(data_pca, axis=0)) / np.std(data_pca, axis=0)

指定要检测的簇数(即墨水数)

n_clusters = 5

执行 k 均值聚类

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 图像

rgb_image = np.zeros((行,列,3))

我在范围内(行):

for j in range(cols):

    rgb_image[i,j,:] = colors[cluster_labels[i,j]]

绘制 RGB 图像

plt.imshow(rgb_image, vmin =0, vmax = 255)

plt.show()

我得到的输出是:

RGB Image

我期待图像中显示不同的墨水。但是整个图像是黑色的。有人可以告诉我我在这里做错了什么吗?

python image-processing pattern-recognition
© www.soinside.com 2019 - 2024. All rights reserved.