2009-12-21 2 views
6

Matlab 또는 Octave에서 길이가 다른 두 개의 벡터를 추가하고 싶습니다. 예 :길이가 다른 벡터를 추가하는 방법은 무엇입니까?

cc = [101 102 3 4] 

사람이 작업을 수행하는 방법을 알아낼 수 포함하는 벡터 CC 발생한다

aa = [1 2 3 4]; 
bb = [100 100]; 

?

업데이트 :이 코드는 나중에 그레이 스케일 이미지로 변환 한 신호로 끝났습니다.

load train; 
t = y; 
load chirp; 
c = y; 

tc = c + [t; zeros(length(c) - length(t),1)]; 

plot(1:length(tc),tc) 

이 수학적으로 이해가되지 않습니다

답변

6

) = 모두 당신에게 대단히 감사합니다,하지만 당신이 주장하는 경우, 당신은이 작업을 수행 할 수 있습니다

cc = aa + [bb zeros(1,2)]; 
+0

쿨. 실제로 2 개의 행렬을 가지고 있기 때문에 실제로 추가하려는 회색조 그림입니다. 이제 여러분의 해를 행렬 =) – Louise

+2

-1로 일반화하고 싶습니다. 어떤 경우 수학적으로도 의미가 있습니다. –

+0

예 : 신호를 벡터로 처리 할 때 (예 : z- 변환을 의미) –

4

내가하지 않은 10 년 MATLAB을 사용하지만 난 당신이 뭔가해야 할 것 같아요 : 벡터의 집합을 다루는 1-D의 경우를 들어

cc = aa + [bb zeros(1, length(aa) - length(bb))] 
+0

"오류 : 불균형 또는 예기치 않은 괄호 또는 대괄호"를 표시합니다. 그러나 "cc = aa + [bb 제로 (1, 길이 (bb))];" 작동 중입니다.) – Louise

+1

@ 루이스, 나쁘지 만, '길이'가 아니라 '크기'여야합니다. ''길이 (bb) = 길이 (aa) - 길이 (bb) '때문에'0 (1, length (bb)) '작업은 단지 우연의 일치입니다. –

+0

차가움. 그 문제를 해결해 주셔서 감사합니다. – Louise

9

을 다른 답변은 올바른 해결책을 지적합니다 (더 짧은 벡터를 0으로 채우거나 더 긴 벡터에 하위 색인을 사용하여 더하기를 수행함). 그러나 두 개의 회색 명암 이미지를 추가하려는 궁극적 인 의견을 언급 한 이후로 저는 여러분에게 행렬에 대한보다 일반적인 2D 솔루션을 보여줄 것이라고 생각했습니다.

첫째, 일부 MATLAB의 샘플 이미지에 내장 얻을 자신의 크기를로드 할 것이다 : 나는 rgb2gray를 사용하여 첫 번째 그레이 스케일하기 위해 RGB 이미지를 변환

image1 = rgb2gray(imread('peppers.png')); 
image2 = imread('cameraman.tif'); 
[r1, c1] = size(image1); 
[r2, c2] = size(image2); 

공지 사항. 당신이 제로의 행렬을 원하기 때문에 내가 zeros 호출에 'uint8'을 포함

newImage = zeros(max(r1, r2), max(c1, c2), 'uint8'); 

주의 사항 : 다음으로, 제로 사이즈 두 이미지의 크기의 최대 값의 새로운 매트릭스를 만들거야 자신의 이미지와 동일한 유형이어서 후속 작업이 올바르게 작동 할 수 있습니다. 행렬 newImage은 이제 두 이미지 중 하나를 포함 할만큼 충분히 큽니다.

newImage(1:r1, 1:c1) = image1;      % Insert image 1 
newImage(1:r2, 1:c2) = newImage(1:r2, 1:c2)+image2; % Add image 2 

그리고 다음으로 그들을 볼 수 있습니다 : 마지막으로, 영상과 같이 새 이미지에 추가 할 수 있습니다

imagesc(newImage); 
colormap(gray); 

enter image description here

참고 : 하나 개 중요한 것은에 이미지에 사용하는 유형을 고려하십시오. 일반적으로 MATLAB에로드되는 이미지 데이터는 uint8입니다. 그러나 위에서 설명한 것처럼 두 개의 8 비트 부호없는 정수 이미지를 추가하면 픽셀이 255 (부호없는 8 비트 정수의 최대 값)를 초과하는 채도가 발생할 수 있습니다. 결과적으로 이미지의 일부가 흰색으로 밝아지고 세부 사항을 잃게됩니다 (위의 작은 이미지와 겹치는 일부 고추를 확인하십시오). 이미지를 추가하기 전에 값을 스케일링하거나 이미지를 double으로 변환하여 작업을 수행 한 다음 이미지를 다시 저장하기 전에 크기를 조정하여이 문제를 방지 할 수 있습니다.그것이 AA는 BB보다 큰 주어진 경우

+0

와우! 매우 자세한 솔루션을 제공해 주셔서 감사합니다! 그것은 내가하고 싶었던 바로 그 것이었다. =) – Louise

1

, 그럼 내가 이런 짓을 했을까 :

cc = aa; 
cc(1:length(bb)) = cc(1:length(bb)) + bb; 
관련 문제