2012-04-17 3 views
0

http://www.mathworks.com/matlabcentral/fileexchange/28300 실제로 코드를 구현하려고하는데 두 이미지의 치수가 같을 때만 작동합니다.이 코드는 한 이미지에 치수 및 기타 치수가있는 경우에만 작동합니다. , 다른 차원을 가지고 내가 현재 코드와 함께이 작업을 수행 할 경우, 오류치수 불일치와 관련하여

??? 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

작은 이미지를 0으로 채우려고하면 큰 이미지와 크기가 같아집니다. 예를 들어

%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으로 채우는 것이 의미가 없을 수 있습니다. 또한 내 코드 패드는 아래쪽과 왼쪽에 붙어 있지만 이미지가 중앙에 위치하도록 모든 부분을 패드 할 수 있습니다.

+0

+1 좋은 설명입니다. 다른 대안은 더 큰 이미지를 더 작은 이미지 크기로 자르는 것입니다. –

+0

그래, 자르기는 가능하지만 정보가 손실 될 가능성이 적습니다. 그러나 패딩 (padding)이나 0이 아닌 다른 옵션이 있습니다. 어쩌면 이미지를 가장자리 나 다른 외삽 형태로 반사 할 수 있습니다. 그러나 완전히 맥락입니다. – Dan

+1

이미지 처리 도구 상자를 사용하면 대신'padarray'를 사용할 수 있습니다. – Jonas