Как импортировать двоичный файл в R как массив nx1 - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь импортировать некоторые файлы необработанных данных (неизвестный тип файла) с сайта проекта распознавания лиц MIT.Каждый из файлов содержит массив значений пикселей 16384x1 для изображения лица размером 128 * 128.

Вот сайт с данными:

http://courses.media.mit.edu/2004fall/mas622j/04.projects/faces/

Необработанные данные предоставляются в неизвестном формате файла (что-то вроде .bin или .dat, ям действительно не уверен), и должен кодировать для массива 16284X1.Я попытался прочитать файлы с помощью readBin (), в результате чего получился массив 4096x1 (код, показанный ниже, «1227» - это имя файла).Кроме того, значения этого массива имеют огромный диапазон (min = -2139063177, max = 2139781749), что не позволяет им быть значениями пикселей с помощью image ().

data<-readBin("1227", "integer",n=128*128, endian = "big")

Изменение порядка байтов в «маленький» приводит к массиву нулевой длины.У меня был друг, который попытался прочитать файл в Matlab, и он успешно выполнил следующий код:

fid=fopen('rawdata/1223'); 
I = fread(fid);
imagesc(reshape(I, 128, 128)'); colormap(gray(256));

Файлы доступны по ссылке, которую я разместил выше, но дайте мне знать, если я должен опубликоватьсодержимое одного файла для чтения.

1 Ответ

0 голосов
/ 13 февраля 2019

Данные представляются массивом байтов, которые кодируют значение в оттенках серого.Вы можете прочитать данные в R и построить их с помощью

xx <- matrix(as.numeric(readBin("1223", "raw", 128*128)), ncol=128, byrow = TRUE)
plot(as.raster(xx, max=255))

, что вернет

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...