【发布时间】:2011-09-04 21:00:49
【问题描述】:
我正在尝试通过修改 S 矩阵的奇异值来使用简单的 svd 算法将大小为 32 * 32 的图像添加到大小为 256 * 256 的图像上有人帮助编码,我将不胜感激
【问题讨论】:
-
如果您想获得任何帮助,您应该发布您当前的代码(相关部分)
我正在尝试通过修改 S 矩阵的奇异值来使用简单的 svd 算法将大小为 32 * 32 的图像添加到大小为 256 * 256 的图像上有人帮助编码,我将不胜感激
【问题讨论】:
我正要发表评论,但它变得越来越大,所以即使问题仍然模糊,我也将其发布为答案。
正如 Amro 所说,您应该发布您当前的代码并准确地详细说明哪些是不工作的(例如相关的错误消息)。
如果没有这些精度,我们只能猜测您的问题是什么。
post on Matlab Central 详细介绍了使用 SVD 为图像添加水印的过程。
我猜您的问题是您的水印图像小于目标图像,因此您在某处遇到了“尺寸不匹配”错误。一种解决方案是为您的水印图像填充以适合目标图像(请参阅此question)。
这个快速尝试似乎可以在我的电脑上运行。
% 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);
【讨论】:
您可以使用简单的空间域bit-planes watermarking,并在水印前后调整大小。
【讨论】: