基于matlab的svd水印提取

基于matlab的svd水印提取,matlab,watermark,extraction,svd,Matlab,Watermark,Extraction,Svd,我在使用SVD提取水印时遇到问题 这是我的密码: clc close all; a=0.0010 I=imread('citra.jpg'); %Image Host I=rgb2gray(I); II=im2double(I); [U,S,V]=svd(II); M=imread('logoUPN.jpg'); %Image Watermark M=rgb2gray(M) W=im2double(M); %Embedding St = S + a * W; AW = U * St * V';

我在使用SVD提取水印时遇到问题

这是我的密码:

clc
close all;
a=0.0010
I=imread('citra.jpg'); %Image Host
I=rgb2gray(I);
II=im2double(I);
[U,S,V]=svd(II);
M=imread('logoUPN.jpg'); %Image Watermark
M=rgb2gray(M)
W=im2double(M);
%Embedding St = S + a * W;
AW = U * St * V';
imwrite(AW,'watermarked.jpg');
%Extract IW =imread('watermarked.jpg'); WW = im2double(IW);
ST=U' * WW * V;
Ww=(ST-Siga)/a;
figure,imshow(AW);
figure,imshow(Ww);

提取的图像模糊且不清晰。我想做两个菜单嵌入和提取。

对于提取水印,使用[UT ST VT]=svd(WW)代替ST=U'*WW*V,然后使用此ST值提取水印。

这里S是一个对角矩阵,其他两个是遵循USV'规则的各自的左奇异向量和右奇异向量。 为了得到S值,我们不能应用反向乘法。所以需要写[usv]=SVD(WW)来代替表达式