2009-12-21 36 views
6

Matlab veya Octave'de farklı uzunluklarda iki vektörü eklemek istiyorum. Örneğin.Farklı uzunluktaki vektörler nasıl eklenir?

cc = [101 102 3 4] 

kimse bunun nasıl anlamaya Can içeren bir vektör cc yol açmalıdır

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

?

Güncelleme: Bu daha sonra daha sonra gri ölçekli görüntülere dönüştüğüm sinyaller için bittiğim kod.

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

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

plot(1:length(tc),tc) 

Bu matematiksel olarak hiçbir şey ifade etmiyor

cevap

6

) = Hepinize çok teşekkür ederim, ama eğer ısrar, bunu yapabilirsiniz:

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

Serin. Bunun nedeni, eklemek istediğim gri ölçekli resimler olan 2 matrisim var. Şimdi çözümünüzü matrislere genellemek istiyorum =) – Louise

+2

-1: Bazı durumlarda matematiksel olarak anlamlıdır. –

+0

evet, örneğin, sinyalleri vektörler olarak ele alırken (z-dönüşümü) –

4

I have not on yıl içinde MATLAB kullandık ama böyle bir şey yapmak gerekecek düşünüyorum: vektörlerin, bir dizi ile uğraşan 1-D durum için

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

"Hata: Dengesiz veya beklenmedik parantez veya parantez" verir. Fakat "cc = aa + [bb sıfırlar (1, uzunluk (bb))];" çalışıyor =) – Louise

+1

@Louise, Benim kötüyüm, "boy" olmalı ve "boyut" değil. Bu sıfırlar (1, uzunluk (bb)) 'nin sadece bir rastlantıdır çünkü uzunluk (bb) = uzunluk (aa) - uzunluk (bb)' dir. –

+0

Serin. Bunu temizlediğiniz için teşekkürler. – Louise

9

Diğer cevaplar doğru çözümleri işaret eder (daha kısa vektörlerin sıfırlarla doldurulması veya bir alt indeks kullanılarak daha uzun vektör kullanılarak ekleme yapılması). Ancak, sonuçta iki gri tonlamalı görüntüyü bir araya getirmek istediğiniz bir yorumda bahsettiğiniz için, size matrisler için daha genel bir 2-D çözümü göstereyim diye düşündüm.

Birincisi, bazı MATLAB örnek görüntüleri dahili ve almak onların boyutlarını yük olacak: Ben rgb2gray kullanarak ilk gri tonlama RGB görüntüyü dönüştürülen

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

Bildirimi. Eğer sıfır matrisi istiyorum çünkü zeros çağrısında 'uint8' dahil

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

Bildirim Sıradaki ben sıfır boyut iki görüntü boyutlarının maksimum yeni bir matris yapacağız resimlerinizle aynı türde olacaksınız, böylece sonraki işlemler doğru şekilde çalışacaktır. newImage matrisi artık iki görüntüden birini içerecek kadar büyük.

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

Ve aşağıdaki ile görüntüleyebilirsiniz:: Son olarak, görüntüler, böylece gibi yeni görüntüye eklenebilir

imagesc(newImage); 
colormap(gray); 

enter image description here

NOT: önemli bir nokta için Görüntüler için kullandığınız türü düşünün. Normal olarak MATLAB'a yüklenen görüntü verileri, uint8 tipindedir. Ancak, yukarıda yaptığım gibi iki 8 bit imzasız tamsayı görüntü ekleyerek piksellerin 255 değerini (8 bit işaretsiz tamsayı için maksimum değer) aştığı doygunluğa neden olabileceğini fark edebilirsiniz. Sonuç, görüntünün kısımlarının parlak beyaz görünmesi ve detayların kaybolmasıdır (yukarıdaki küçük görüntünün üstüste binen biberlerinden bazılarına dikkat edin). Görüntüleri eklemeden önce değerleri ölçekleyerek ya da görüntüleri gerçekleştirmek için görüntülerinizi double türüne dönüştürerek ve ardından görüntüyü yeniden kaydetmeden önce ölçekleyerek bunu önlemek isteyebilirsiniz.Bir aa bb daha büyük olduğunu verilirse

+0

WOW! Bu çok ayrıntılı çözüm için çok teşekkür ederim! Tam olarak yapmak istediğim buydu. =) – Louise

1

, o zaman bu yapardın:

cc = aa; 
cc(1:length(bb)) = cc(1:length(bb)) + bb; 
İlgili konular