Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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.
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
Pages : 1