2015-01-30 5 views
1

Я получаю ошибку в коде ниже «Размеры матрицы должны совпадать» Это происходит в строке кода (Shw = Sh + a * Sw;) CoverImage, который я использую, представляет собой изображение в оттенках серого , tiff, как и водяной знак. Какие-нибудь предложения могут быть моими проблемами? СпасибоОшибка в сингулярном значении Декомпозиция matlab code

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'); 

ответ

0
[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. изменить код таким образом, чтобы размеры водяного знака не зависит от размеров входное изображение.
+1

Благодарим вас за подробное объяснение. Да, изображение водяного знака меньше, чем изображение обложки. Любые идеи о том, как я могу изменить код, чтобы скрыть изображение меньшего водяного знака? Спасибо – Hitmanpaddy

+0

Я считаю, что все, что вам нужно сделать, это выгрузить водяной знак с помощью 0s, чтобы добавить его к исходному изображению. Это проблема «добавления матрицы к более крупной матрице», эта страница должна помочь: http://www.mathworks.com/matlabcentral/answers/77743-put-a-small-matrix-in-a-bigger- один – chiliNUT

+0

Благодарим вас за ответ. Я отдам! – Hitmanpaddy