【Pavia】遥感图像数据集下载地址和读取数据集代码
【Pavia】遥感图像数据集下载地址和读取数据集代码
目录
前言
遥感系列第13篇。遥感图像处理方向的学习者可以参考或者复刻
本文初编辑于2024年3月28日
CSDN:https://blog.csdn.net/rvdgdsva
博客园:https://www.cnblogs.com/hassle
总结:有一说一,从新手的角度上来说,Pavia数据集比Houston数据集友好了不知道多少倍
![](https://img2024.cnblogs.com/blog/3382553/202403/3382553-20240328110203451-1029420312.jpg)
Pavia数据集
Pavia University数据集是一个高光谱图像数据集,由一个被称为反射光学系统在意大利帕维亚市(ROSIS-3)的传感器收集。该图像由610×340像素,115个光谱波段组成。该图像被分为9类,共计42,776个标签样本,包括沥青、草地、砾石、树木、金属板、裸土、沥青、砖和阴影。
Pavia数据集地址:
![](https://img2024.cnblogs.com/blog/3382553/202403/3382553-20240328110203850-1150314218.png)
下载的Pavia数据集是.mat格式的
![](https://img2024.cnblogs.com/blog/3382553/202403/3382553-20240328110204195-438328077.png)
下面提供Matlab和Python两种读取方式
Pavia数据集预览
PaviaU.mat
![](https://img2024.cnblogs.com/blog/3382553/202403/3382553-20240328110204660-2043465485.png)
PaviaU_gt.mat
![](https://img2024.cnblogs.com/blog/3382553/202403/3382553-20240328110205082-1979362465.png)
Pavia数据集的Matlab读取方式
Pavia数据集中PaviaU.mat的matlab读取代码
% 加载PaviaU.mat文件
load('PaviaU.mat')
% 获取输入图像的尺寸
InputMatImg = paviaU;
b = size(InputMatImg);
fprintf('输入图像宽度为 %d\n', b(1));
fprintf('输入图像高度为 %d\n', b(2));
fprintf('输入图像波段数为 %d\n', b(3));
% 选择三个波段
i = 57; j = 34; k = 3;
% 获取第i、j、k个波段
InputImg_r = InputMatImg(:,:,i);
InputImg_g = InputMatImg(:,:,j);
InputImg_b = InputMatImg(:,:,k);
% 打印每个波段的最大像素值
fprintf('%d\n', max(InputImg_r(:))); % 为8000
fprintf('%d\n', max(InputImg_g(:))); % 为8000
fprintf('%d\n', max(InputImg_b(:))); % 为8000
% 将像素值缩放到0-255范围
InputImg_r = InputImg_r / 8000 * 255;
InputImg_g = InputImg_g / 8000 * 255;
InputImg_b = InputImg_b / 8000 * 255;
% 打印缩放后的最大像素值
fprintf('%d\n', max(InputImg_r(:))); % 为255
fprintf('%d\n', max(InputImg_g(:))); % 为255
fprintf('%d\n', max(InputImg_b(:))); % 为255
% 将像素值转换为uint8类型
InputImg_r = uint8(InputImg_r);
InputImg_g = uint8(InputImg_g);
InputImg_b = uint8(InputImg_b);
% 合成RGB图像
RGBImg = cat(3, InputImg_r, InputImg_g, InputImg_b);
% 显示每个波段和合成波段的图像
figure;
subplot(221); imshow(InputImg_r); title('1号波段');
subplot(222); imshow(InputImg_g); title('2号波段');
subplot(223); imshow(InputImg_b); title('3号波段');
subplot(224); imshow(RGBImg); title('合成波段');
% 将每个波段和合成波段保存为图片文件
imwrite(InputImg_r, ['MATBand', num2str(i), '.jpg']);
imwrite(InputImg_g, ['MATBand', num2str(j), '.jpg']);
imwrite(InputImg_b, ['MATBand', num2str(k), '.jpg']);
imwrite(RGBImg, 'composite_img.jpg');
Pavia数据集中PaviaU_gt.mat的matlab读取代码
load('PaviaU_gt.mat')
fprintf('%d\n',max(paviaU_gt(:)));
paviaU_gt=paviaU_gt/max(paviaU_gt(:))*255
paviaU_gt= uint8(paviaU_gt);
imshow(paviaU_gt);title('这可就有点麻烦了');
Pavia数据集的Python读取方式
Pavia数据集中PaviaU.mat的Python读取代码
# 导入所需的库
from scipy import io
import numpy as np
from PIL import Image
# 定义图像路径
imgPth = "PaviaU.mat"
# 从.mat文件中加载图像数据
img = io.loadmat(imgPth)['paviaU'][:,:,[57,34,3]]
img = np.asarray(img)
# 打印三个通道中的最大像素值
print(np.max(img[:,:,0]))
print(np.max(img[:,:,1]))
print(np.max(img[:,:,2]))
# 将每个通道的像素值缩放到0-255范围内
img[:,:,0] = img[:,:,0]/np.max(img[:,:,0])*255
img[:,:,1] = img[:,:,1]/np.max(img[:,:,1])*255
img[:,:,2] = img[:,:,2]/np.max(img[:,:,2])*255
# 打印缩放后的每个通道的最大像素值
print(np.max(img[:,:,0]))
print(np.max(img[:,:,1]))
print(np.max(img[:,:,2]))
# 对图像进行取整操作
img = np.ceil(img)
# 将numpy数组转换为PIL图像对象
img = Image.fromarray(np.uint8(img))
# 保存图像为PNG格式
img.save("./PaviaU.png")
Pavia数据集中PaviaU_gt.mat的Python读取代码
from scipy import io
import numpy as np
from PIL import Image
gtPth = 'PaviaU_gt.mat'
img = io.loadmat(gtPth)['paviaU_gt'][:,:]
img = np.asarray(img)
img= img/np.max(img)*255
img = Image.fromarray(np.uint8(img))
img.save("./PaviaU_gt.png")