Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Utilitaires >> Graph 35 à 100 >> Graphisme >> Sprite Recon
Sprite Recon
Version : Alpha Taille : 1500 octets Ajouté le : 2019-05-01 19:36 Modifié le : 2019-05-05 18:23
Auteur et posteur :
DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Planète Casio - Programme Casio de graphisme - Sprite Recon - disperseur - Calculatrices
Nombre de visites sur cette page : 2951
Score au progrank : 26
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
297 téléchargements | Soumettre un test

Ce programme est sous licence Creative Commons 2.0 BY


Description en français :

Bonjour à tous,
Comme promis dans la dernière rdp je publie ici la première version de mon algorithme de reconnaissance de sprite.
Comme on peut le deviner ce programme reconnait des sprites.
Au démarrage du programme, on se retrouve dans une interface utilisateur en locate, dans laquelle on peux dessiner le sprite de notre choix (actuellement de taille maximum 7*7 pixels). Puis on presse [EXE], la calto potasse quelques dixièmes de seconde et elle vous dit si le sprite donné est connu. Si oui, alors vous avez une réponse positive, sinon le programme l\'enregistre et sera capable de le reconnaître plus tards. Mieux, si ce sprite est référencé dans la petite base de données intégrée au programme, l'algo vous dit de quelle forme il s'agit. Actuellement les formes implémentées sont:
-carré de 2*2 px;
-carré vide de 3*3 px;
-cercle vide de 4px de diamètre;
-cercle vide de 5px de diamètre;
-pixel (point);
-croix de 3px de largeur.

Pour ceux qui ne veulent pas télécharger le programme, voici son code source:

Do
LpWhile Getkey<>0

0->A~Z
ClrText

'LIST MEM
"MEM"->List 1
If List 1[1]=0
Then 100->Dim List 1
"MEM"->List 1
1->List 1[1]
15->List 1[2]
495->List 1[3]
63903->List 1[4]
186->List 1[5]
4357252->List 1[6]
27030->List 1[7]
15255086->List 1[8]
IfEnd

'PICT BASE
[[0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0]]->Mat A

'PICT EDITOR

'_->_PICT LOAD
For 1->Theta To 7
For 1-><r> To 7
Mat A[Theta,<r>]=1=>Locate <r>,Theta,"_#E6A6_"
Next
Next

'_->_BACKGROUND
For 1-><r> To 7
Locate 8,<r>,"|"
Next

Red Locate 9,1,"Sprite Recon"
Blue Locate 9,3,"By Disperseur"
Black Locate 9,4,"Use  [_#E690__#E692__#E693__#E691_]"
Black Locate 9,5,"and  [SHIFT]"
Black Locate 9,6,"and  [ALPHA]"
Black Locate 9,7,"then [EXE]"

'_->_POS INIT
1-><r>:1->Theta
Locate 1,1,"+"

'_->_MAIN LEAP
While 1
Do
LpWhile Getkey=0
If Mat A[Theta,<r>]=1
Then Locate <r>,Theta,"_#E6A6_"
Else Locate <r>,Theta," "
IfEnd

'_->_COMMANDS
<r><7=>Getkey=27=>Isz <r>
<r>>1=>Getkey=38=>Dsz <r>
Theta<7=>Getkey=37=>Isz Theta
Theta>1=>Getkey=28=>Dsz Theta
Getkey=78=>1->Mat A[Theta,<r>]
Getkey=77=>0->Mat A[Theta,<r>]

Locate <r>,Theta,"+"
Getkey=31=>Break
Do
LpWhile Getkey<>0
WhileEnd
ClrText

"Analyse.."

'FIRST POINT SEARCHING
For 1->Theta To 7
For 1-><r> To 7
If Mat A[Theta,<r>]=1
Then
<r>->A~B
Theta->C~D
Break
IfEnd
Next
Next

'SIZE DETERMINING
For 1->Theta To 7
For 1-><r> To 7
If Mat A[Theta,<r>]=1
Then
<r><A=><r>->A
<r>>B=><r>->B
Theta<C=>Theta->C
Theta>D=>Theta->D
IfEnd
Next
Next

'READING MAT DIM
{D-C+1,B-A+1}->Dim Mat B

'WEIGHT MAT DIM
{D-C+1,B-A+1}->Dim Mat C

For C->Theta To D
For A-><r> To B
Mat A[Theta,<r>]=1=>1->Mat B[Theta-C+1,<r>-A+1]
Next
Next

'WEIGHT MAT FILL
For 1->Theta To D-C+1
For 1-><r> To B-A+1
2^W->Mat C[Theta,<r>]
Isz W
Next
Next

'SOM CALC
0->S
For 1->Theta To D-C+1
For 1-><r> To B-A+1
S+(Mat B[Theta,<r>]*Mat C[Theta,<r>])->S
Next
Next

'SEARCH
"S="
SDisps
'IMAGES REFERENCEES

For 1-><r> To 100
If List 1[<r>]=S
Then "Connu"
Break
IfEnd
If List 1[<r>]=0
Then "Inconnu, enregistré"
S->List 1[<r>]
Break
IfEnd
Next

S=1=>"POINT"
S=15=>"CARRE 2*2"
S=495=>"CARRE 3*3"
S=63903=>"CARRE 4*4"
S=186=>"CROIX 3*3"
S=4357252=>"CROIX 5*5"
S=27030=>"CERCLE D=4"
S=15255086=>"CERCLE D=5"

ClrMat  


Le petit bémol est que l'algo ne peux pas reconnaître plusieurs sprites regroupés. Pour parer à ce problème je cherche un moyen de détecter les différents sprites qui pourraient êtres présents dans l'image donnée au début.

Sur ce, si vous avez des questions (et je pense qu'il y en aura ) n'hésitez pas.

A+ sur Planet Casio

English description:

//////


Commentaires :

Pages: Précédente | 1, 2, 3, 4, 5 | Suivante

DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Posté le 02-05-2019 à 18:54 | #
Oui je peux renier la liste à 100 cases ou même à 50.
Comment ça il ne renvoie pas toujours la même valeur ? (Je sais que pour certaines formes on à un bug de reconnaissance )
LephenixnoirHors ligneAdministrateurPoints: 24228 Défis: 170 Message
Posté le 02-05-2019 à 20:04 | #
Je ne parle pas de mettre moins, je parle d'adapter la taille de la liste pour utiliser 10 cases quand il y a 10 sprites et 990 cases quand il y a 990 sprites !

Oui, c'est ça. Tu peux réduire le nombre de collisions en choisissant mieux ta matrice.
DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Posté le 02-05-2019 à 20:21 | #
Le truc c'est que j'ai choisi un remplissage de ce type:
1.1 1.2 1.3
2.1 2.2 2.3
3.1 3.2 3.3
Pour éviter au maximum les collisions. Je ne vois pas quel remplissage adopter pour qu'il n'y en ait moins Le random ne fonctionnerait pas vu que l'on ne trouverait jamais les mêmes résultats
LephenixnoirHors ligneAdministrateurPoints: 24228 Défis: 170 Message
Posté le 02-05-2019 à 20:25 | #
Pour cette taille de matrice, le remplissage suivant ne crée aucune collision :

  1   2   4
  8  16  32
64 128 256

Je suppose que tu vois pourquoi...
DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Posté le 02-05-2019 à 20:27 | #
Oui je pense voir pourquoi. Merci de l'idée. Une nuit et je revois taille de liste et remplissage des poids. Merci de ton aide
HackcellHors ligneMaître du PuzzlePoints: 1524 Défis: 11 Message
Posté le 03-05-2019 à 08:34 | #
Ho, ya un plein de tours de magie qui utilise ça
(Et accessoirement chown chmod )
DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Posté le 05-05-2019 à 18:16 | #
MAJ effectuée: suppression des bugs de superposition. Merci Lephenixnoir !
LephenixnoirHors ligneAdministrateurPoints: 24228 Défis: 170 Message
Posté le 05-05-2019 à 18:42 | #
Jusqu'à quelle taille de matrice est-ce que les collisions sont éliminées ?
DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Posté le 05-05-2019 à 18:59 | #
Ah euh... je n'ai pas testé mais ce dont je suis sur c'est qu'à partir d'une certaine taille, la puissance de 2 est arrondie et que la précision diminue. Je n'ai testé ce modèle que pour mon cas, avec une taille de 7 * 7 max.

Edit:
Oui en effet, à partir de 7*7 je commence à avoir des bugs. Si tu remplis la matrice de 1, et que tu refais le test avec la même matrice remplie mais en retirant un pixel (en ajoutant un 0), tu as un bug. Je pense qu'en faisant une suite comme celle que j'ai faite avec le 2 mais avec un nombre plus petit comme 0.1 (je ne sais pas si ça fonctionne par contre ) peux être que ça peut régler le problème
DisperseurHors ligneMembrePoints: 1830 Défis: 1 Message
Posté le 05-05-2019 à 20:25 | #
Solution: faire un remplissage avec les puissances de 0.2. Ça ne fait pas de bugs à première vue. En plus on reste dans des valeurs raisonnables. Comment on appelle une suite de nombre constituée d'une succession d'un même nombre à des puissances croissantes ?

Pages: Précédente | 1, 2, 3, 4, 5 | Suivante

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 77 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd