2015-01-30 8 views
1

아래 코드에서 오류가 발생합니다. "행렬 치수가 일치해야합니다"코드 줄 (Shw = Sh + a * Sw;)에서 발생합니다. 사용하고있는 표지 이미지는 회색조 이미지입니다 , tiff 형식은 워터 마크와 동일합니다. 어떤 문제가 내 문제 일 수 있니? 감사합니다특이 값 분해 MATLAB 코드 오류

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를 실행하면 결과 행렬 ShIh와 같은 크기를 가지고 있으며, 그 결과 Swwatermark 같은 크기를 가지고있다. 이제 http://www.mathworks.com/help/matlab/ref/svd.html


, 당신은 함께 두 행렬을 추가

Shw=Sh+a*Sw; 

. 매트릭스 또한 당신이 함께 추가하는 행렬이 동일한 크기 (rows 같은 수의 cols의, 같은 수)이 의미하는 것처럼 무엇 그래서 http://en.wikipedia.org/wiki/Matrix_addition

을 가지고 있어야합니다 : 코드는 워터 마크가 동일 할 것으로 예상 치수를 입력 이미지로 사용합니다. 귀하의 상황에서 어떤 이미지를 사용하고 있는지 알 수는 없지만 그 이미지는 잘못된 것 같습니다. 나는 당신이 사용하고있는 워터 마크가 일반적으로 당신이 그것을 포함하고있는 입력 이미지보다 작고, 아마도 훨씬 작을 것이라고 추측하고 있습니다.

는 그래서

  1. 같은 입력으로 치수 또는
  2. 워터 마크의 크기는의 크기에 의존하지 않는 있도록 코드를 수정하는 워터 마크를 사용하는 방법 중 하나를 필요가 나타납니다 입력 이미지.
+1

자세한 설명을 주셔서 감사합니다. 예, 워터 마크 이미지는 표지 이미지보다 작습니다. 더 작은 워터 마크 이미지를 숨기려면 코드를 수정할 수있는 방법에 대한 아이디어가 있습니까? 감사합니다. – Hitmanpaddy

+0

원본 이미지에 추가하려면 0으로 워터 마크를 덧씌우기만하면됩니다. "큰 행렬에 행렬 추가"문제는이 페이지가 도움이됩니다. http://www.mathworks.com/matlabcentral/answers/77743-put-a-small-matrix-in-a-bigger- 하나 – chiliNUT

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 줄 것이다! – Hitmanpaddy