7
votes

Comment ajouter des vecteurs avec une longueur différente?

Je voudrais ajouter deux vecteurs avec différentes longueurs dans Matlab ou Octave. Par exemple xxx

qui devrait aboutir à un vecteur cc contenant xxx

peut-il comprendre comment faire cela?

MISE À JOUR: Ceci est le code que j'ai fini par les signaux que je convertit ensuite en images de gris à gris. xxx

merci beaucoup tout =)


0 commentaires

4 Réponses :


6
votes

Cela n'a aucun sens mathématiquement, mais si vous insistez, vous pouvez le faire:

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


2 commentaires

Cool. C'est parce que j'ai 2 matrices, qui sont réellement des images grises que j'aimerais ajouter. Alors maintenant, je voudrais généraliser votre solution à matrice =)


Oui, par exemple, lors du traitement des signaux en tant que vecteurs (désignant la transformation Z)



4
votes

Je n'ai pas utilisé Matlab dans dix ans, mais je pense que vous devrez faire quelque chose comme: xxx


2 commentaires

Il donne "Erreur: parenthèse ou support non équilibré ou inattendu". Mais "CC = AA + [BB Zeros (1, Longueur (BB))];" travaille =)


@Louise, mon mauvais, il aurait dû être longueur et non taille . Que zéros (1, longueur (bb)) fonctionne est juste une coïncidence depuis longueur (bb) = longueur (AA) - longueur (BB) .



10
votes

Pour l'affaire 1-D traitant d'un ensemble de vecteurs, les autres réponses indiquent les solutions correctes (impliquant un remplissage du vecteur plus court avec des zéros ou effectuer l'addition à l'aide d'un sous-index dans le vecteur le plus long). Cependant, depuis que vous avez mentionné dans un commentaire que vous souhaitez finalement ajouter deux images en niveaux de gris ensemble, je pensais que je vous montrerais une solution plus générale 2-D pour les matrices.

Tout d'abord, je vais charger des informations intégrées Matlab Échantillon d'images et obtenez leurs tailles: xxx

avis que j'ai converti l'image RVB en niveaux de gris en utilisant rgb2gray . Ensuite, je vais faire une nouvelle matrice de zéros dont la taille est le maximum de la taille des deux images: xxx

avis que j'ai inclus 'uint8' < / Code> Dans l'appel à zéros , puisque vous voulez que la matrice des zéros soit le même type que vos images afin que les opérations ultérieures sur eux fonctionnent correctement. La matrice Newimage est maintenant assez grande pour contenir l'une des deux images. Enfin, les images peuvent être ajoutées à la nouvelle image, comme: xxx

et vous pouvez les afficher avec les éléments suivants: xxx

 Entrez la description de l'image ici

Remarque: Une chose importante à considérer est le type que vous utilisez pour les images. Normalement, les données d'image chargées dans MATLAB sont de type UINT8 . Toutefois, vous remarquerez peut-être que l'ajout de deux images entières non signées 8 bits que je le faisait ci-dessus peut entraîner une saturation où les pixels dépassent la valeur de 255 (valeur maximale d'un entier non signé 8 bits). Le résultat est que certaines parties de l'image ont l'air blanche brillante et perdent des détails (remarquez certains des poivrons qui chevauchent la plus petite image ci-dessus). Vous voudrez peut-être éviter cela en éduquant les valeurs dans vos images avant d'y ajouter ou en convertissant vos images en tapez double pour effectuer les opérations, puis les éteindre avant de renvoyer l'image.


1 commentaires

WOW! Merci beaucoup pour cette solution très détaillée! C'était exactement ce que je voulais faire. =)



1
votes

Si c'est une étant donné que AA est plus grand que BB, alors je ferais ceci: xxx


0 commentaires