Я собирался оставить комментарий, но он стал больше, поэтому я публикую его как ответ, даже если вопрос все еще неопределенный.
Как сказал Амро, вы должны опубликовать свой текущий код и подробно описать, что не работает (например, с соответствующими сообщениями об ошибках).
Без этой точности можно только догадываться, в чем ваша проблема.
На Matlab Central имеется пост , в котором подробно описана процедура нанесения водяного знака на изображение с использованием SVD.
Полагаю, ваша проблема в том, что ваше изображение водяного знака меньше целевого, поэтому вы где-то столкнулись с ошибками "несоответствия размеров". Одним из решений является добавление изображения водяного знака в соответствии с целевым изображением (см. Этот вопрос ).
Кажется, это работает на моем компьютере с этой быстрой попыткой.
% Image
Himg=100;
Wimg=100;
img=imread('stackoverflow.png');
img=imresize(img,[Himg Wimg]);
img=im2double(img);
for i=1:3
[Uimg(:,:,i) Simg(:,:,i) Vimg(:,:,i)]=svd(img(:,:,i));
end
% Watermark
wat=imread('stackoverflow_logo.png');
Hwat=30;
Wwat=30;
wat=imresize(wat,[Hwat Wwat]);
wat=im2double(wat);
% Padding
wat=padarray(wat,[floor((Himg-Hwat)/2) floor((Wimg-Wwat)/2)], 'replicate','post');
wat=padarray(wat,[ceil((Himg-Hwat)/2) ceil((Wimg-Wwat)/2)], 'replicate','pre');
% Result
alpha=0.2;
Simg=Simg+alpha*wat;
for i=1:3
[Ures(:,:,i) Sres(:,:,i) Vres(:,:,i)]=svd(Simg(:,:,i));
res(:,:,i)=Uimg(:,:,i)*Sres(:,:,i)*Vimg(:,:,i)';
end
figure;
imshow(img);
figure;
imshow(wat);
figure;
imshow(res);