How to do block based watermarking using random numbers?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
I have transformed a 256x256 cover image into DCT and then, to DWT. The LL size 128x128) of the DWT image is taken and divided into 32x32 blocks using mat2cell(). Same procedure I did for the watermark also of the same size. Then, I took the SVD of one block of the watermark. The diagonal values of the block of watermark is multiplied by the strength factor and added at the block of the cover image randomly. For that I produced random numbers from 1 to 32 for x and y position. But, I did not get the desired result. The code is given below. Is any thing wrong in that code or is it not the correct way to embed??
clc
clear all
k = 0.0025; %Strength factor
covImage = imread('lena.jpg'); %Read the cover image
covImage_res = imresize(covImage,[256 256]);
Image_ycbcr=rgb2ycbcr(covImage_res);
I=Image_ycbcr(:,:,1);
input_img=I;
I_dct=dct2(input_img);
[LL,LH,HL,HH] = dwt2(I_dct,'haar','mode','sym'); % applying redundant DWT
blockSizeR = 32; % Rows in block.
blockSizeC = 32;
[rows columns numberOfColorBands] = size(LL);
wholeBlockRows = floor(rows / blockSizeR);
blockVectorR = [blockSizeR * ones(1, wholeBlockRows), rem(rows, blockSizeR)];
wholeBlockCols = floor(columns / blockSizeC);
blockVectorC = [blockSizeC * ones(1, wholeBlockCols), rem(columns, blockSizeC)];
ca1 = mat2cell(LL, blockVectorR, blockVectorC, numberOfColorBands);
Wat_img=imread('same.jpg');
Watermark=imresize(Wat_img,[256 256]);
Watermark_ycbcr=rgb2ycbcr(Watermark);
W=Watermark_ycbcr(:,:,1);
water_img=W;
W_dct=dct2(water_img);
[WLL,WLH,WHL,WHH] = dwt2(W_dct,'haar','mode','sym'); % applying redundant DWT
blockSizeRW = 32; % Rows in block.
blockSizeCW = 32;
[wrows wcolumns wnumberOfColorBands] = size(WLL);
wholeBlockRowsw = floor(wrows / blockSizeRW);
blockVectorRW = [blockSizeRW * ones(1, wholeBlockRowsw), rem(wrows, blockSizeRW)];
wholeBlockColsw = floor(wcolumns / blockSizeCW);
blockVectorCW = [blockSizeCW * ones(1, wholeBlockColsw), rem(wcolumns, blockSizeCW)];
ca2 = mat2cell(WLL, blockVectorRW, blockVectorCW, wnumberOfColorBands);
temp=cell(4,4);
fid = fopen( 'ran.txt', 'wt' );%File for writing random numbers
%ca=ca1;
for a=1:32
x=randi([1 32]);
fprintf( fid, '%d\t', x);
y=randi([1 32]);
fprintf( fid, '%d\n', y);
for i=1:4
for j=1:4
[Wu,Ws,Wv]=svd(ca2{i,j});
ca=ca1{i,j};
for m=1:32
for n=1:32
ca(x,y)=ca(x,y)+(k*Ws(m,m));
%for p=1:4
%for q=1:4
temp{i,j}=ca;
%end
%end
end
end
end
end
end
fclose(fid);
c=cell2mat(temp);
%figure,imshow(c);
new_img = idwt2(c,LH,HL,HH,'haar','mode','sym');
Wmkd=idct2(new_img);
%figure,imshow(Wmkd);
Image_ycbcr(:,:,1)=uint8(Wmkd);
Watermarked=ycbcr2rgb(Image_ycbcr);
figure,imshow(Watermarked);
new=covImage_res-Watermarked;
figure,imshow(new);
2 Kommentare
Walter Roberson
am 17 Mär. 2014
What do you observe that leads you to conclude that you did not get the desired result ?
Antworten (0)
Siehe auch
Kategorien
Mehr zu Denoising and Compression finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!