2015-01-14 2 views
2

믿을 수 없을만큼 간단한 질문이지만 .bin 파일에서 데이터를 읽고 표시하는 데 문제가 있습니다. 기본적으로, 내가 읽고 표시하려고하는 이미지 (256x256, 픽셀 당 8 비트)가 있습니다. .jpg 또는 .tif를 사용할 수는 있지만 .bin 파일을 사용할 수는 없습니다. 여기 내 코드는 다음과 같습니다.Matlab에서 .bin 이미지를 표시하는 방법은 무엇입니까?

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 (file, 256 * 256, 'uint8 => uint8'); '. 다음은 이미지의 모양을 바꾸기 위해서입니다 :'A = reshape (A, 256, 256). ';'지금 시도'imshow (A)' – rayryeng

+0

파일이 이미지인지, 하지만 당신이 준 코드는 효과가있었습니다. 정말 고마워! –

+0

Bahaha, 작동하는 경우 데이터는 원시 이미지 픽셀입니다. 시원한! 대답을 쓰면 받아 들일 수 있습니까? – rayryeng

답변

3

.bin 파일은 이진 파일에 저장된 원시 이미지 강도로 구성되어 있다고 가정합니다. fread 호출은 단순히 파일 내용을 배열로 읽지 만 조심해야합니다. 기본적으로 값은 MATLAB에서 64 비트 double 값으로 읽히므로 단일 double 값은 이미지 픽셀을 포함하게됩니다. 따라서 값을 fread과 함께 읽는 방법을 수정하면됩니다. 특히,이 작업을 수행 할 필요가 :이 입력 이진 파일이 부호없는 8 비트 정수에 데이터를 저장하는 256 X 256 이미지 픽셀의 총을 읽을려고하고 있다는 것을 말하고있다

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

. 그런 다음 데이터는 동일한 유형의 MATLAB으로 읽습니다. 자, 다음에해야 할 일은 배열이 reshape 일 때 256x256 이미지가되도록하는 것입니다. fread열 주요에서 데이터를 읽기 때문에

그러나,이 고쳐 이미지의 각 행은 컬럼에 배치 될 것이다, 그래서 당신은 당신이 완료되면 고쳐 행렬을 전치 해야합니다. 구체적으로 :

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

자, A은 찾고있는 256x2500 이미지입니다. 이제 imshow(A);으로이 이미지를 표시 할 수 있습니다.

관련 문제