MATLAB: SVD watermarking color image

MATLABsvd watermarking color image

Hi, Im trying to change algorith from grayscale to color images but I stuck
clear all;
clc;
close all;
%img= rgb2gray(imread('photo1.jpg'));%host image
img= imread('photo1.jpg');%host image
%img=imresize(img,[256 256]);
imwrite(uint8(img),'photo1 org.jpg');
%[M,N]=size(img);
img=double(img);
imgr=img(:,:,1);
imgg=img(:,:,2);
imgb=img(:,:,3);
[Uimgr,Simgr,Vimgr]=svd(imgr);
[Uimgg,Simgg,Vimgg]=svd(imgg);
[Uimgb,Simgb,Vimgb]=svd(imgb);
Simgr_temp=Simgr;
Simgg_temp=Simgg;
Simgb_temp=Simgb;
%global U_SHL_w
%global V_SHL_w
% read watermark
%img_wat=imresize(rgb2gray(imread('photo2.jpg')),[256 256]);
img_wat=imread('photo2.jpg');
%img_wat=imresize(img_wat,[256 256]);
imwrite(uint8(img_wat),'watermark.jpg','jpg');
alfa =0.1;
%alfa= input('The alfa Value = ');
[x y]=size(img_wat);
img_wat=double(img_wat);
img_watr=img_wat(:,:,1);
img_watg=img_wat(:,:,2);
img_watb=img_wat(:,:,3);
%[U_SHL_wr,S_SHL_wr,V_SHL_wr]=svd(img_watr);
%[U_SHL_wg,S_SHL_wg,V_SHL_wg]=svd(img_watg);
%[U_SHL_wb,S_SHL_wb,V_SHL_wb]=svd(img_watb);
for i=1:x
for j=1:y
Simgr(i,j) =Simgr(i,j) + alfa * img_watr(i,j);
Simgg(i,j) =Simgg(i,j) + alfa * img_watg(i,j);
Simgb(i,j) =Simgb(i,j) + alfa * img_watb(i,j);
end
end
SVD for Simg (SM)
%Simgr =Simgr + alfa * img_watr;
%Simgg =Simgg + alfa * img_watg;
%Simgb =Simgb + alfa * img_watb;
[U_SHL_wr,S_SHL_wr,V_SHL_wr]=svd(img_watr);
[U_SHL_wg,S_SHL_wg,V_SHL_wg]=svd(img_watg);
[U_SHL_wb,S_SHL_wb,V_SHL_wb]=svd(img_watb);
Wimgr =Uimgr* S_SHL_wr * Vimgr';
Wimgg =Uimgg* S_SHL_wg * Vimgg';
Wimgb =Uimgb* S_SHL_wb * Vimgb';
Wimg=cat(3,Wimgr,Wimgg,Wimgb);
figure
imshow(uint8(img));
title('The Original Image')
figure
imshow(uint8(img_wat));
title('The Watermark')
imwrite(uint8(Wimg),'watermarked.jpg','jpg');
imshow(uint8(Wimg));
title('The Watermarked')
K=imabsdiff(img,Wimg);
figure
imshow(K,[])
I see error:
Index in position 2 exceeds array bounds (must not exceed 400).
Error in embedcolor (line 48)
Simgr(i,j) =Simgr(i,j) + alfa * img_watr(i,j);
How to reapir it?

Best Answer

pics are not required. You can use your own.
I resolved this issue few minutes ago.
was:
[x y]=size(img_wat);
should be:
[x y z]=size(img_wat);