2014-09-05 1 views
-4

Я работаю над укрытием текста в изображение .., но я не могу получить точное текстовое сообщение назад .. может кто-то мне помочь в сортировке проблемы и ошибке моего кода .. значение к я использую 2. вот код ниже:ошибка в восстановлении текста, спрятанного в изображение

clc; 
close all; clear all; 
clf; 
cov_img=imread('pears.png'); 




cov_img1 =rgb2gray(cov_img); 
cov_img1=imresize(cov_img1,[256 256]); 
imshow(cov_img1); 

k=input('enter no of bits '); 
a='In this context, cryptography, steganography and water marking schemes play a vital role in establishing secret communication through encryption, hiding and embedding secret information in digital medium respectively. '; 

b=dec2bin(double(a),8); 
c=b(:); 


d=reshape(c,[],k); 


e=bin2dec(d); 
[m n]=size(e); 


for i=1:256; 
    for j=1:256; 

    S(i,j)=cov_img1(i,j)-mod(cov_img1(i,j),2^k)+e(i,:); 

    j=j+1; 
    end 
    i=i+1; 
end 

figure, imshow(S,[]); 


%%Extraction 

for i=1:256; 
    for j=1:256; 
     E(i,j)=mod(double(S(i,j)),2^k); 
     j=j+1; 
    end 
    i=i+1; 
end 


e1=dec2bin(E,2); 

e2=e1'; 

e3=reshape(e1,[],8); 

e4=bin2dec(e3); 

e5=char(e4); 

disp(e5) 

[mse psnr]=msepsnr(cov_img1,S); 
disp('PSNR value is : '); 
disp(psnr); 
disp(' db'); 
disp('MSE value is'); 
disp(mse); 
%%%%%%% 
+0

Посмотрите на свои циклы и проверьте метод инкремента? – Austin

+1

Вы должны объяснить свой код. Вы не можете просто вставить весь код и попросить людей отлаживать. –

+0

@ ParagS.Chandakkar Я пытаюсь скрыть текст в изображение, используя технику LSB. Я частично могу восстановить скрытый текст с изображения, но его не правильный текст, который я встроил :( возможно я что-то не так в процессе извлечения :( – user3801619

ответ

-1

Я не в полной мере понять метод, но вы не получите полное сообщение назад, как е длина 872, тогда как я только до 256. Поэтому S не будет содержать ваше полное сообщение. Вам также не нужно делать j = j + 1 в цикле for в Matlab. Следующие работы для меня (хотя длина e, вероятно, неизвестна в определении e1):

clc; 
close all; clear all; 
clf; 
cov_img=imread('pears.png'); 

cov_img1 =rgb2gray(cov_img); 
cov_img1=imresize(cov_img1,[256 256]); 
imshow(cov_img1); 

k=2; 
a='In this context, cryptography, steganography and water marking schemes play a vital role in establishing secret communication through encryption, hiding and embedding secret information in digital medium respectively. '; 
b=dec2bin(double(a),8); 
c=b(:); 
d=reshape(c,[],k); 
e=bin2dec(d); 
[m n]=size(e); 

Z = zeros(256); 
Z(1:length(e)) = e; 
for i=1:256; 
    for j=1:256; 

    S(i,j)=cov_img1(i,j)-mod(cov_img1(i,j),2^k)+Z(i,j); 

    end 

end 
figure, imshow(S,[]); 
%%Extraction 
for i=1:256; 
    for j=1:256; 
     E(i,j)=mod(double(S(i,j)),2^k)'; 

    end 

end 
e1=dec2bin(E(1:length(e)),2); 
e2=e1; 
e3=reshape(e2,[],8); 
e4=bin2dec(e3); 
e5=char(e4); 
disp(e5') 
+0

Как этот код отличается от этого в вопросе? Помимо удаления «j = j + 1»? – Schorsch

+1

В оригинале каждая строка 'S' имеет первые 256 секретных бит из' e'. Здесь матрица 'Z' имеет тот же размер, что и' cov_img1', и первые элементы 'length (e)' хранят все секретные биты, обертывая их в следующую строку/столбец, если необходимо, чтобы включить их все. Вложение их в 'S' тогда тривиально. – Reti43

+0

@ Шорш, ты прав, что большинство из них - это копия. Я изначально не вставлял код, но думал, что было бы полезно предоставить быстрое решение. Я не собирался переписывать все это. Спасибо, что ответили Reti43. В качестве дополнительного комментария циклы for, вероятно, не нужны, поскольку все операции в циклах for влияют только на один элемент, а mod принимает матрицы. –

Смежные вопросы