2017-12-13 6 views
0

작은 숫자를 전송하려고합니다. .jpg 그림.이미지를 비트로 전송하고 MATLAB에서 다시 전송

pic = imread('****.jpg'); 
x = reshape((dec2bin(typecast(pic(:),'uint8'),8)-'0').',1,[]); 

그리고, 나는 이미지를 재구성하기 위해 다음과 같은 노력하고 있어요 :

n = 250; 
m = 250; 
s = num2cell(reshape(x,8,[])',2); 
b = cellfun(@(x) bin2dec(strrep(num2str(x),' ','')), s); 
out = reshape(b,n,m); 

나는이 오류 메시지가 점점 오전 :

을 나는 비트에 사진을 변환하려면 다음 라인을 사용하고 있습니다
Error using reshape 
To RESHAPE the number of elements must not change. 
Error in transmit_pic (line 13) 
out = reshape(b,n,m); 

내가 뭘 잘못하고 있니?

+0

n을 코드에 의해 정의되지, 당신은 두 번 –

+1

미터을 썼다. 방금 코드를 수정했습니다. –

답변

0

잠시 땜질 한 후에 해결 방법을 찾았습니다. 문제는 비트 깊이였습니다.

가 여기에 올바른 코드입니다 : 당신이 맞다 @Veltz

pic = imread('***.png'); 

x = reshape((dec2bin(pic,8)-'0').',1,[]); 
[m, n] = size(pic); 

s = num2cell(reshape(x,8,[])',2); 
b = cellfun(@(x) bin2dec(strrep(num2str(x),' ','')), s); 
out=reshape(b,m,n); 

image(out) 
+1

문제는 이미지가 RGB (즉, M-by-N-by-3)이고 3 차원을 고려하지 않았다는 것입니다. '[m, n] = size (pic); 라인을 사용하면'n '에 모든 단일하지 않는 차원 (즉,'N * 3')의 결과가 포함되므로 사용자를 대신합니다. 좀 더 자세한 설명이 나와 있습니다. [here] (https://stackoverflow.com/a/47444748/52738). – gnovice

+0

@gnovice 당신은 틀린 품목입니다. 설명해 주셔서 감사합니다. –