Pregunta

Me gustaría añadir dos vectores con diferentes longitudes en Matlab o Octave. Por ejemplo.

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

que debería traducirse en un vector que contiene cc

cc = [101 102 3 4]

¿Alguien puede encontrar la manera de hacer esto?

Actualización: Este es el código que terminó con las señales que luego convertir a gris imágenes en escala

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

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

plot(1:length(tc),tc)

Muchas gracias a todos los que =)

¿Fue útil?

Solución

Esto no tiene ningún sentido matemáticamente, pero si insiste, se puede hacer esto:

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

Otros consejos

Para el caso 1-D se trata de un conjunto de vectores, las otras respuestas señalan las soluciones correctas (que implican el relleno del vector con ceros más corto o la realización de la adición utilizando un subíndice en el vector más largo). Sin embargo, ya que ha mencionado en un comentario que está en última instancia, que desean agregar dos imágenes en escala de grises juntos, pensé que se iba a presentar una solución más general 2-D para las matrices.

En primer lugar, voy a cargar algunos incorporado imágenes de muestra de MATLAB y obtener sus tamaños:

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

Observe que Convertí la imagen RGB a escala de grises primero usando rgb2gray . A continuación, voy a hacer una nueva matriz de ceros cuyo tamaño es el máximo de los tamaños de las dos imágenes:

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

Tenga en cuenta que he incluido 'uint8' en la llamada a zeros , ya que desea que la matriz de ceros que sea del mismo tipo que las imágenes de modo que las operaciones posteriores sobre ellos funcionarán correctamente. El newImage matriz es ahora lo suficientemente grande como para contener cualquiera de las dos imágenes. Por último, las imágenes se pueden agregar a la nueva imagen de este modo:

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

Y se puede ver con lo siguiente:

imagesc(newImage);
colormap(gray);

introducir descripción de la imagen aquí

Nota: Una cosa importante a tener en cuenta es el tipo que se utiliza para las imágenes. Normalmente, los datos de imagen que se carga en MATLAB es de tipo uint8 . Sin embargo, es posible que observe que la adición de dos imágenes de tipo entero sin signo de 8 bits como yo lo hice anteriormente pueden dar lugar a la saturación de los píxeles exceden el valor de 255 (el valor máximo de un entero sin signo de 8 bits). El resultado es que partes de la imagen se ven de color blanco brillante y pierden detalle (notan algunos de los pimientos que se superponen la imagen más pequeña arriba). Es posible que desee evitar esta escalando los valores de sus imágenes antes de añadirlos, o convirtiendo las imágenes a escribir double para llevar a cabo las operaciones y luego extender su aplicación antes de volver a guardar la imagen.

No he utilizado MATLAB en diez años, pero creo que vas a tener que hacer algo como:

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

Si es un hecho que AA es más grande que bb, entonces me gustaría hacer esto:

cc = aa;
cc(1:length(bb)) = cc(1:length(bb)) + bb;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top