【问题标题】:Error in Singular Value Decomposition matlab code奇异值分解matlab代码中的错误
【发布时间】:2015-03-29 09:53:27
【问题描述】:

我在“矩阵尺寸必须一致”下面的代码中出现错误它发生在代码行中(Shw=Sh+a*Sw;)我使用的coverImage是灰度图像,tiff格式与水印一样.任何建议我的问题可能是什么?谢谢

filename='107_3.tif';
coverImage = imread(filename);
Mc=size(coverImage,1);
Nc=size(coverImage,2);

a=10;


watermark = imread('dmg1.tif');

watermark=im2bw(watermark,0.05);
Mn=size(watermark,1);
Nn=size(watermark,2);

[LL,LH,HL,HH] = dwt2(coverImage,'haar');
%[LL1,LH1,HL1,HH1] = dwt2(HH,'haar');

Ih=idwt2([],[],[],HH,'haar');

[Uh,Sh,Vh]=svd(Ih);
[Uw,Sw,Vw]=svd(double(watermark));

Shw=Sh+a*Sw;**%%%%%ERROR OCCURRING HERE%%%%%**
VhT=transpose(Vh);
Ihw=Uh*Shw*VhT;
[LL2,LH2,HL2,HH2]=dwt2(Ihw,'haar');
watermarked_image=idwt2(LL,LH,LH,HH,'haar');
figure;
imshow(watermarked_image,[]);
title('Watermarked Image');

【问题讨论】:

    标签: matlab steganography svd dwt


    【解决方案1】:
    [Uh,Sh,Vh]=svd(Ih);
    [Uw,Sw,Vw]=svd(double(watermark));
    

    当您运行svd 时,结果矩阵Sh 的维度与Ih 相同,结果Sw 的维度为watermark
    http://www.mathworks.com/help/matlab/ref/svd.html

    现在,

    Shw=Sh+a*Sw;
    

    您将 2 个矩阵相加。矩阵加法要求您相加的矩阵具有相同的维度(rows 的数量相同,cols 的数量相同) http://en.wikipedia.org/wiki/Matrix_addition

    因此,这似乎意味着:您的代码期望水印与输入图像的尺寸相同。我不知道您在这种情况下使用的是什么图像,但它似乎这是一个错误的期望。我猜你使用的水印通常比你嵌入的输入图像要小,可能要小得多。

    看来你要么需要

    1. 使用与输入相同尺寸的水印或
    2. 修改您的代码,使水印的尺寸不 取决于输入图像的尺寸。

    【讨论】:

    • 感谢您的详细解释。是的,水印图像比封面图像小很多。关于如何修改代码以隐藏较小的水印图像的任何想法?谢谢
    • 我相信您所要做的就是用0填充水印,将其添加到原始图像中。是“将矩阵添加到更大的矩阵”的问题,这个页面应该有所帮助:mathworks.com/matlabcentral/answers/…
    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多