【问题标题】:watermarking of a smaller size image to larger host image in svd domain in matlab在matlab的svd域中将较小尺寸的图像水印到较大的主机图像
【发布时间】:2011-09-04 21:00:49
【问题描述】:

我正在尝试通过修改 S 矩阵的奇异值来使用简单的 svd 算法将大小为 32 * 32 的图像添加到大小为 256 * 256 的图像上有人帮助编码,我将不胜感激

【问题讨论】:

  • 如果您想获得任何帮助,您应该发布您当前的代码(相关部分)

标签: matlab watermark


【解决方案1】:

我正要发表评论,但它变得越来越大,所以即使问题仍然模糊,我也将其发布为答案。

正如 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);

【讨论】:

    【解决方案2】:

    您可以使用简单的空间域bit-planes watermarking,并在水印前后调整大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2014-04-24
      相关资源
      最近更新 更多