Domanda

Vorrei aggiungere due vettori con differenti lunghezze in Matlab o Octave. Per es.

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

che dovrebbe sfociare in un vettore contenente cc

cc = [101 102 3 4]

Chiunque può capire come fare questo?

Aggiornamento: Questo è il codice ho finito con i segnali che ho poi convertire in grigio le immagini in scala

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

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

plot(1:length(tc),tc)

Grazie mille a tutti voi =)

È stato utile?

Soluzione

Questo non ha alcun senso matematicamente, ma se insistete, si può fare questo:

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

Altri suggerimenti

Per il caso 1-D trattare con un insieme di vettori, altre risposte indicano le soluzioni corrette (coinvolgono imbottitura il vettore più breve con zeri o eseguire la somma utilizzando un sottoindice nel vettore più lungo). Tuttavia, dal momento che lei ha citato in un commento che si sta in ultima analisi, vogliono aggiungere due immagini in scala di grigi insieme, ho pensato di vedere una soluzione più generale 2-D per le matrici.

In primo luogo, io caricare alcuni built-in immagini di esempio MATLAB e ottenere le loro dimensioni:

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

Si noti che ho convertito l'immagine RGB in scala di grigio a usare rgb2gray . Poi, farò una nuova matrice di zeri la cui dimensione è la massima delle dimensioni delle due immagini:

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

Si noti che ho incluso 'uint8' nella chiamata a zeros , poiché si desidera la matrice di zeri di essere dello stesso tipo di immagini in modo che le successive operazioni su di essi funziona correttamente. Il newImage matrice è ormai abbastanza grande da contenere una delle due immagini. Infine, le immagini possono essere aggiunte alla nuova immagine in questo modo:

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

E si possono visualizzare con il seguente:

imagesc(newImage);
colormap(gray);

entrare descrizione dell'immagine qui

Nota: Una cosa importante da considerare è il tipo che si utilizza per le immagini. Normalmente, i dati immagine che viene caricato in MATLAB è di tipo uint8 . Tuttavia, è possibile notare che l'aggiunta di due immagini intero senza segno a 8 bit come ho sopra può comportare saturazione dove pixel superano il valore di 255 (il valore massimo per un intero senza segno a 8-bit). Il risultato è che le parti dell'immagine sguardo luminoso bianco e perdono dettaglio (notare alcuni dei peperoni che si sovrappongono l'immagine più piccola sopra). Si consiglia di evitare questo scalando i valori nelle immagini prima di aggiungere di loro, o convertendo le immagini di digitare double per eseguire le operazioni e poi scalare prima resaving dell'immagine.

Non ho usato MATLAB in dieci anni, ma penso che si dovrà fare qualcosa di simile:

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

Se è un dato di fatto che è più grande di aa bb, quindi vorrei fare questo:

cc = aa;
cc(1:length(bb)) = cc(1:length(bb)) + bb;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top