2012-04-17 102 views
0

其實我想實現以下網站http://www.mathworks.com/matlabcentral/fileexchange/28300上的代碼,但在給定的兩個圖像具有相同的尺寸這部作品而已,我想使這個代碼工作,其中一個圖像有一定的尺寸和其他有一些其他維度,如果我這樣做與當前的代碼,它給出了錯誤錯誤在MATLAB關於尺寸不匹配

??? Sub scripted assignment dimension mismatch. Error in ==> example2 at 27 

第27行:

I(:,1:size(I1,2),:)=I1; I(:,size(I1,2)+1:size(I1,2)+size(I2,2),:)=I2; 

可以解決這個給我嗎?

回答

1

你可以嘗試用零填充較小的圖像,即具有相同尺寸的放大圖像。例如

%Start with rows:  
if size(I1,1) > size(I2,1) %I1 has more rows so pad I2 
     pad = zeros (size(I1,1) - size(I2,1), size(I2,2)); 
     I2 = [I2 ; pad]; %Append the rows of zeros to the bottom of I2 
else %I2 has more rows so pad I1 
     pad = zeros (size(I2,1) - size(I1,1), size(I1,2)); 
     I1 = [I1 ; pad]; %Append the rows of zeros to the bottom of I1 

%Pad the columns  
if size(I1,2) > size(I2,2) %I1 has more rows so pad I2 
     pad = zeros (size(I2,1), size(I1,2) - size(I2,2)); 
     I2 = [I2 , pad]; %Append the columns of zeros to the left of I2 
else %I2 has more rows so pad I1 
     pad = zeros (size(I1,1), size(I2,2) - size(I1,2)); 
     I1 = [I1 , pad]; %Append the columns of zeros to the left of I1 

我沒有測試過,雖然,所以你可能需要擺弄了一下,以獲得完美的尺寸,如可能的大小(I2,2) - 大小(I1,2)+ 1,而不是大小(I2,2) - 大小(I1,2),這種事情。

但是,你需要首先弄清楚什麼你正在嘗試做的邏輯。用零填充可能在您的應用程序中沒有意義。此外,我的代碼墊在底部和左側,但您可能需要一直填充以使您的圖像位於新圖像的中心。

+0

+1了很好的解釋。另一種選擇是將較大的圖像裁剪爲較小的圖像。 – 2012-04-17 07:22:37

+0

呀,裁剪是一種可能性,但因爲它是信息的丟失,似乎不太可能。然而,還有其他選項,如填充,但不包含零。也許在邊緣或其他形式的外推中反映圖像。但它完全是上下文的。 – Dan 2012-04-17 07:28:30

+1

對於圖像處理工具箱,你可以改用'padarray'。 – Jonas 2012-04-17 11:56:11