![]() |
如何将某些文本信息封装在图像中并使用MATLAB提取出来?
new_img = convert(img, text); (img, text) = convert_back(new_img); 有人可以用MATALB的内置图像来说明吗?
[B]回答:[/B] 我相信您正在寻找[URL="http://en.wikipedia.org/wiki/Steganography"]隐写术[/URL] 。您可以从[URL="http://www.mathworks.com/matlabcentral/fileexchange/11813-lsb-steganography"]LSB隐写术的[/URL] MATLAB实现开始。 执行LSB隐写术的一种简单方法是拍摄无损压缩图像并设置每个分量(R,G,B)的LSB。然后对于一个[I]m[/I] x [I]n的[/I]图像,您将获得3 [I]百万个[/I]比特来存储信息。由于您正在修改LSB,因此图像中将不会察觉到差异。 [B]更新资料[/B] 因此,我决定编写一个小巧,低效但具有示范性的示例: 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 [url=https://stackoverflow.com/questions/2707023]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 02:13。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.