我正在尝试在MATLAB中读取cifar10数据集的图像。数据以10000x3072格式给出,其中一行包含相应的RGB值。我用过:
img= reshape(data(1, 1:1024), [32,32]);
image(img)
将图像转换为有意义,因为它显示垃圾图像。如何从此.mat文件中读取图像?来自此数据集https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz
答案 0 :(得分:2)
根据this页面,data
的格式为:
- 数据 - 一个10000x3072 numpy数组的uint8s。阵列的每一行都存储一个32x32的彩色图像。前1024个条目包含红色通道值,下一个1024表示绿色,最后1024个表示蓝色。图像以行主顺序存储,因此数组的前32个条目是图像第一行的红色通道值。
使用您的代码:
img= reshape(data(1, 1:1024), [32,32]);
你应该按照列主要顺序获得第一张图像的红色通道(即转置)。要获得具有正确方向的完整RGB图像,您需要使用:
img = reshape(data(1, 1:3072), [32,32,3]); % get 3-channel RGB image
img = permute(img, [2 1 3]); % exchange rows and columns