Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 26-05-2011 12:38:07

stormin
Membre
Inscription : 03-12-2009
Messages : 124

Matlab: Centrer une lettre

Bonsoir,
Le centrage d'une lettre E dans une image de fond noir de taille 256*256.

%% Calcul du barycentre de E
nbpoint1 = sum(E(:));
[valeury1 valeurx1] = find(E);
bary_y1 = round(sum(valeury1)/nbpoint1);
bary_x1 = round(sum(valeurx1)/nbpoint1);

%% Calcul du décalage à faire
[M1 N1]=size(E);
centreimagey1=round(M1/2);
centreimagex1=round(N1/2);
dy1=centreimagey1-bary_y1;
dx1=centreimagex1-bary_x1;

%% Centrage de E
Ecentre = zeros(M1,N1);
if(dx1>=0 && dy1>=0)
    Ecentre(dy1+1:end,dx1+1:end) = E(1:M1-dy1,1:N1-dx1);
elseif(dx1>0 && dy1<0)
    Ecentre(1:M1+dy1,dx1+1:end) = E(-dy1+1:end,1:N1-dx1);
elseif(dx1<0 && dy1>0)
    Ecentre(dy1+1:end,1:M1+dx1) = E(1:M1-dy1,-dx1+1:end);
elseif(dx1<0 && dy1<0)
    Ecentre(1:M1+dy1,1:N1+dx1) = E(-dy1+1:end,-dx1+1:end);
end

Je devrais centrer la lettre E dans les coordonnées (128,128),mais la vérification me montre qu'elle est centrée autour de (129,129) et je vois pas l'erreur que j'ai commis.

Merci

Hors ligne

#2 26-05-2011 14:02:53

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 944

Re : Matlab: Centrer une lettre

Salut,

Décidément, tu cumules les problèmes.
Ta lettre E s'inscrit dans un rectangle de quelles dimensions ?
Dans matlab, les coordonnées graphiques commencent à 1 ou à 0 ? L'origine des coordonnées est en bas à gauche, en haut à gauche ?
Par centrer la lettre E : c'est ça que tu veux dire :

_________
|       |
|       |
|   E   |
|       |
|_______|

Ta lettre E est une lettre tracée sur ce principe :

 ________
|   _____|    
|  |
|  |___
|   ___|
|  |
|  |_____
|________|

pixel après pixel, en partant par exemple du coin haut gauche et tracé de "vecteurs" horizontaux et verticaux jusqu'à revenir au point de départ, puis en remplissant le fond autour en noir...
supposons l le nombre de pixels de la lettre en hauteur, et h celui en hauteur.
Partons du point en haut à gauche pour le tracé,  en supposant que l'origine des coordonnées dans le fond noir noir de 256 x 256, ses coordonnées seront : ((256 -l)/2;256 - h)/2).
Pourquoi faire des barycentres ? Pour chercher le centre théorique de de ta lettre ?

A mon avis, il n'y a pas d'erreur : tout dépend si les dimensions du E sont paires ou impaires...
Si tu as des valeurs impaires, après division par 2, tu tombes sur un nombre décimal en .5 et avec application de l'arrondi tu te retrouves au pixel supérieur : round(7/2)=4
Si tu n'arrondis pas  soit tu te retrouves avec le pixel inférieur puisque les coordonnées doivent être entières, soit, il arrondit quand même à l'unité supérieure par défaut.
Si les dimensions sont paires, il n'y a plus de problème avec la division par 2.

@+


Arx Tarpeia Capitoli proxima...

En ligne

#3 27-05-2011 11:30:47

stormin
Membre
Inscription : 03-12-2009
Messages : 124

Re : Matlab: Centrer une lettre

Re,

Merci,je vais essayer de ce concentrer sur le programme.

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt plus soixante quatorze
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums