2017-12-13 15 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(つまり、N-by-N-by-3)であり、3次元を考慮していなかったということでした。 '[m、n] = size(pic);という行を使用すると、' n'にはすべての後に続く非単調次元(つまり 'N * 3')の積が含まれます。もう少し説明が見つかりました[ここ](https://stackoverflow.com/a/47444748/52738)。 – gnovice

+0

@gnoviceあなたは本当に正しいです。ご説明ありがとうございます。 –

関連する問題