2017-06-07 8 views
-4

私が説明怒鳴るとエラーがあるbefore..butメッセージを挿入された画像からのメッセージを抽出してみたい...このステガノグラフィー抽出コードで何が問題になっていますか?

このコードエキス:

% Read Image Stego 
IS = imread('imagestego.bmp'); 

% Extract RedChannel 
RedChannel = IS(:,:,1); 

% Convert RedChannel to biner 
bitstego = uint8(reshape(dec2bin(RedChannel,8)',1,[]) = '0'); 
nBitstego = length(bitstego); 

% Extraction 
extBits = bitget(RedChannel(1:end),1).'; 
extMessage = char(bin2dec(reshape(int2str(extBits),8,[]).').'); 

とエキスコードから、このエラー:

>> latihanextract 
Error: File: latihanextract.m Line: 8 Column: 55 
The expression to the left of the equals sign is not a valid target for an assignment. 

これは埋め込みコードです。

coverImage = imread('foto1.jpg'); 
message = 'IMRON'; 

%EMBEDDING 
RedChannel = coverImage(:,:,1); 
GreenChannel = coverImage(:,:,2); 
BlueChannel = coverImage(:,:,3); 
bits = uint8(reshape(dec2bin(message,8)',1,[]) - '0'); 
nBits = length(bits); 
RedChannel(1:nBits) = bitset(RedChannel(1:nBits),1,bits); 
Imageresults = cat(3,RedChannel,GreenChannel,BlueChannel); 
imwrite(Imageresults,'imagestego.bmp'); 

何が問題なのですか?ここで

+1

私はあなたが何をしようとしているのか分かりませんが、 'message'の代わりにエラーがあるコードでは、8行目に' RedChannel'があります。 –

+0

@VaheTshitoyanこれは、エラーを取得するコードが* * **メッセージのビットをイメージに挿入するのではなく、 'RedChannel'からビットを抽出します。 – beaker

+0

スクリーンショットではなくテキストとして[mcve]を含めてください。また、あなたのコードを読んで理解し、matlabデバッガを使用してエラーの原因を分析します。つまり、変数を検査し、行列の次元を超えるインデックスを要求している理由を確認してください。 – m7913d

答えて

6

はあなたの問題は、あなたが画像のビット数の代わりに、バイト数をループにしようとしていた...

% Read Image Stego 
IS = imread('stegosaurus.bmp'); 

% Extract RedChannel 
RedChannel = IS(:,:,1); 

% Convert RedChannel to binary 
bitstego = uint8(reshape(dec2bin(RedChannel,8)',1,[]) - '0'); 
nBitstego = length(bitstego); 
% the previous 2 lines are actually unnecessary and can be deleted... 
% see explanation in text below 

% Extrication 
extBits = bitget(RedChannel(1:end),1).'; % (1:end) gives you all of the elements 
extMessage = char(bin2dec(reshape(int2str(extBits),8,[]).').') 

です。 bitstegoは、bitstegoのすべてのバイトのバイナリ表現であるため、bitstegoRedChannelの8倍です。

特別なインデックスendを使用してRedChannelの要素の数をとるほうがずっと簡単です。

+0

だからどこのコードが間違っていますか? 私はあなたのコードと同じものを書こうとしました.. –

+0

ああ、それはタイプミスでした。 8行目を見ると、私のコードはもともと '='だったことがわかります。 ' - 'は正しいものでした。そして、私が言ったように、7行目と8行目は12行目の更新でも必要ないので、削除するだけで済みます。 – beaker

+0

イメージ(行*列)のピクセル数が8で割り切れない場合は、最後の行に問題が残っていることに注意してください。 – beaker

関連する問題