2015-01-14 2 views
2

Так что я уверен, что это очень простой вопрос, но у меня возникают проблемы с чтением и отображением данных из .bin-файла. В принципе, у меня есть изображение (256x256, 8 бит на пиксель), которое я пытаюсь прочитать и отобразить. Хотя я могу заставить это работать для .jpg или .tif, я не могу заставить его работать на .bin-файл. Вот мой код на данный момент:Как отобразить изображение .bin в Matlab?

file = fopen('image.bin', 'r'); 
A = fread(file); 
imshow(A) %not sure if this is correct... 
% imshow(file) doesn't work 
% imshow('image.bin') doesn't work either 
fclose(file); 

Любые идеи?

+0

Файл '.bin' очень неоднозначен. Это может быть что угодно. Знаете ли вы, что это сырое изображение? Этот файл содержит сами пиксели исходного изображения? Кроме того, ссылка на файл '.bin' поможет ответить на ваш вопрос. Если это двоичный файл, то «fread» будет считывать все содержимое файла в массив, тогда вам нужно ** изменить форму массива так, чтобы он стал изображением. Кроме того, поскольку ваше изображение имеет 8 бит на пиксель, попробуйте сделать это с помощью вашего вызова «fread»: «A = fread (файл, 256 * 256,« uint8 => uint8 »); '. Затем сделайте это, чтобы изменить изображение: 'A = reshape (A, 256, 256). ';' Теперь попробуйте 'imshow (A)' – rayryeng

+0

Я не уверен, что файл является изображением или просто необработанными пикселями изображения, но код, который вы дали, работал. Спасибо! –

+0

Бахаха, если это сработало, тогда данные являются необработанными пикселями изображения. Круто! Не возражаете, если я напишу ответ и вы его примете? – rayryeng

ответ

3

Я собираюсь предположить, что ваш файл .bin состоит из интенсивных интенсивностей изображения, которые хранятся в двоичном файле. Ваш вызов fread просто прочитает содержимое файла в массиве, но вам нужно быть осторожным. По умолчанию значения будут считаться в виде 64-разрядных значений double в MATLAB, поэтому произойдет то, что одно значение double будет содержать пикселей изображения. Таким образом, вам нужно изменить способ считывания значений с помощью fread. В частности, вам нужно сделать, это:

A = fread(file, 256*256, 'uint8=>uint8'); 

Это говорит, что вы собираетесь прочитать в общей сложности 256 х 256 пикселей изображения, где входной двоичный файл хранит данные в неподписанных 8-разрядных целых чисел. После этого данные считываются в MATLAB как один и тот же тип. Теперь вам нужно сделать следующее: reshape массив, чтобы он стал 256 х 256 изображений.

Однако, поскольку fread считывает данные в столбцам, каждая строка этого реконструированного изображения будут помещены в столбцы, и поэтому вам нужно транспонировать реконструированную матрицу, когда вы закончите. В частности:

A = reshape(A, 256, 256).'; 

Теперь A бы свой 256 х 256 изображение, которое вы ищете. Теперь вы можете показать это изображение с помощью imshow(A);.