Wie kapseln ich einige Textinformationen in einem Bild und entpacken Sie es mit MATLAB?
-
01-10-2019 - |
Frage
new_img = convert(img, text);
(img, text) = convert_back(new_img);
Kann jemand zeigen, mit einem eingebauten Bild von MATALB?
Lösung
Ich glaube, Sie suchen Steganographie . Sie können mit dieser MATLAB Implementierung von LSB Steganographie starten.
Ein einfacher Weg, LSB Steganographie zu tun, ist ein lossless-komprimiertes Bild zu nehmen und das LSB von jeder Komponente (R, G, B) einzustellen. Dann gilt für eine m x n Bild, das Sie bekommen 3mn Bits zu speichern Informationen in. Da Sie die LSB sind modifiziert, wird der Unterschied nicht sein wahrnehmbar im Bild.
Aktualisieren
SO ich Code entschied sich für einen kleinen, ineffizienten, aber anschauliches Beispiel:
function LSBStega
%%// Image and text
I = imread('coins.png');
text = 'Hello World etc';
assert(numel(I) > numel(text)*8,'Insufficient number of pixels');
%%// Encode
%// The end character signifies the end of the hidden text
end_char = '.';
%// Append it
text = [text end_char];
%// Convert each character into binary form with atleast 8 bits
%// We transpose it before calling (:) since the binary representation
%// is stores each character in binary per row and the (:) operations
%// vectorizes the matrix by column.
b = transpose(dec2bin(text,8));
%// Find which bits should be set to 1 or 0
ind_0 = find(b == '0');
ind_1 = find(b == '1');
%// Set the appropriate bits to 1 and 0 and leave the rest alone
I(ind_0) = bitset(I(ind_0),1,0);
I(ind_1) = bitset(I(ind_1),1,1);
%%// Faster decode
text_back = [];
for i = 1:8:numel(I)
%// Extract the LSB from a set of 8 bytes in the image
C = bitget(I(i:i+7),1);
%// Convert from binary to decimal
C = bin2dec(num2str(C));
%// Check if it's the end character; break if so, store if not
if(C == end_char)
break;
else
text_back(end+1) = C;
end
end
%// Convert to text
text_back = char(text_back);
%%// Display
subplot(1,2,1);
title('Original');
imshow(imread('coins.png'));
subplot(1,2,2);
title('Steganography Result');
imshow(I);
disp(text_back);
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow