How to do block based watermarking using random numbers?
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
Walter Roberson
2014 年 3 月 17 日
What do you observe that leads you to conclude that you did not get the desired result ?
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Denoising and Compression についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!