使用python导入一张具有126个波段的tiff格式的高光谱影像,并进行PCA降维,并画出PCA主成分图和PCA散点图
时间: 2024-11-04 12:02:42 浏览: 64
在Python中,处理高光谱图像并进行PCA降维通常会使用到Pandas库处理数据,Scikit-image或Rasterio读取TIF文件,以及Scikit-learn进行主成分分析(PCA)。以下是简单的步骤:
1. 首先,安装必要的库,如果尚未安装:
```bash
pip install pandas rasterio scikit-image scikit-learn matplotlib
```
2. 导入所需的库:
```python
import numpy as np
import rasterio
from rasterio.plot import show
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
```
3. 读取TIF文件(假设名为"high_spectrum_image.tif")并提取数据:
```python
with rasterio.open("high_spectrum_image.tif") as src:
bands = src.read()
data = bands.reshape((-1, bands.shape[-1])) # 将所有波段展平成一列向量
```
4. 对数据进行预处理,例如标准化,因为PCA对数值有敏感性:
```python
data_std = (data - data.mean(axis=0)) / data.std(axis=0)
```
5. 进行PCA降维。这里我们选择保留前n个主成分,例如n=30:
```python
pca = PCA(n_components=30) # 或者自定义n_components
components = pca.fit_transform(data_std)
```
6. 绘制PCA主成分图(通常显示前两个主成分):
```python
plt.figure(figsize=(8, 6))
plt.scatter(components[:, 0], components[:, 1], c=bands[0, :, :].mean(axis=-1), cmap='viridis')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('PCA Components Plot')
plt.colorbar(label='Band mean intensity')
plt.show()
```
7. 绘制PCA散点图(全部主成分):
```python
for i in range(1, components.shape[1]):
plt.scatter(components[:, 0], components[:, i])
plt.xlabel('PC1')
plt.ylabel(f'PC{i+1}')
plt.title('PCA Scatter Plot for All Components')
plt.legend(range(bands.shape[-1]))
plt.show()
```
阅读全文