PDA

查看完整版本 : 如何将某些文本信息封装在图像中并使用MATLAB提取出来?


poster
2019-12-10, 20:41
new_img = convert(img, text); (img, text) = convert_back(new_img); 有人可以用MATALB的内置图像来说明吗?



回答:

我相信您正在寻找隐写术 (http://en.wikipedia.org/wiki/Steganography) 。您可以从LSB隐写术的 (http://www.mathworks.com/matlabcentral/fileexchange/11813-lsb-steganography) MATLAB实现开始。

执行LSB隐写术的一种简单方法是拍摄无损压缩图像并设置每个分量(R,G,B)的LSB。然后对于一个m x n的图像,您将获得3 百万个比特来存储信息。由于您正在修改LSB,因此图像中将不会察觉到差异。

更新资料

因此,我决定编写一个小巧,低效但具有示范性的示例:

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

更多&回答... (https://stackoverflow.com/questions/2707023)