|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |||
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
Salut,
Il existe plusieurs algorithmes de squelettisation d'images, je vais essayer de vous expliquer quelques uns, je commence par l'algorithme de Hilditch : Considérons le voisinage suivant : Citation:
2 < = B(p1) < = 6 A(p1)=1 p2.p4.p8=0 ou A(p2)!= 1 p2.p4.p6=0 ou A(p4)!= 1 Avec : B(p1) = nombre de voisins non nuls de P1. A(p1) = nombre de passage de 0,1 de la séquence : P2,p3,p4,p5,p6,p7,p8,p1,p2 code C++ Code C :
NB : Les objets dans l'image doivent être noirs ( je n'aime pas les fonds noirs A suivre.... |
|||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() |
Merci pour cette contribution.
Je vois que vous utiliser la propriété Pixels!,la traitement doit être hyper long non?(surtout avec 3 boucles imbriqués)
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
|
|
|
00
|
|
|
#4 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
En l'occurence, je crois qu'il parle d'une optimisation spécifique à C++Builder(Scaline / Pixels)
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#5 | ||
|
Membre expérimenté
![]() |
Citation:
Je viens de le tester chez moi,ça met environ une minute pour une Image 256x256 et avec 10 itérations. Citation:
En remplaçant la propriété Pixels par ScanLine,le traitement sera beaucoup plus rapide.
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
||
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
|
|
|
00
|
|
|
#7 |
![]() ![]() Romuald PerrotAttaché Temporaire d'Enseignement et de Recherche (ATER) Inscription : avril 2005 Messages : 4 146 ![]() |
Est-ce que tu peux nous poster un exemple d'application de ton algo ?
__________________
http://rperrot.developpez.com http://phos-graphein.fr Vous désirez contribuer à la rubrique algorithmique, n'hésitez pas à me contacter. |
|
|
00
|
|
|
#8 | ||||
|
Membre expérimenté
![]() |
Personnellement pour le traitement d'image avec C++ Builder je procède comme suit:
1-Charger l'image dans une matrice.(Lecture) 2-Effectuer les traitement sur la matrice. 3-Charger la matrice dans l'image.(Ecriture) J'utilise pour cela deux procédures : -Pour la lecture : Code :
void ImageToMatrice(TImage *img,byte mat[3000][3000]) -Pour l'affichage: Code C++ :
void MatriceToImage(TImage *img,byte mat[3000][3000]) C'est deux procédure utilisent la méthode ScanLine.L'image en entré doit être une BMP de format 24 bits,Sinon il faut modifier le corp des procédures. Pour l'algorithme,comme je disais je n y toucherai pas,sauf pour le début et la fin du parcours,dans les boucles parcourant l'image en hauteur et largeur j'ai commencé par 2 au lieu de 1 jusqu'à w-3(en largeur) et h-3 (en hauteur),sinon il y aurai accès à des éléments qui se trouvent hors de l'image (Image1->Canvas->Pixels[x-2][y-2] avec x=0!) Code C++ :
Ce qu'il faut ajouter en déclaration globale dans le fichier "H" : Code C++ :
Je viens de testé chez moi,le traitement avec affichage est quasi instantané.J'ajouterai juste que les procédures ImageToMatrice et MatriceToImage ne sont pas optimisé pour ce cas là,je les ai implémenté pour des bmp couleur 24 bits,il faudra donc ajouter un test sur le format de l'image au début dans le corp de ImageToMatrice.
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
||||
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
Pas mal
|
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : mars 2008 Messages : 209 ![]() |
tu penses que c'est plus rapide ? je n' suis pas si sur . en plus tu utilise une matrice 3000*3000 . je suggere plutot l'utilisation de matrice à base de vecteurs dynamiques ( une spécialité Borland quoi ) . puis tu met utilise setLength.
|
|
|
00
|
|
|
#11 | ||
|
Membre expérimenté
![]() |
Citation:
Mais en temps d'éxécution l'utilisation de ScanLine est beaucoup plus rapide que Pixels Comme je le disais avec PIXELS le traitement prend presque une minute avec 10 itérations! alors qu'avec SCANLINE cela est instantané. Citation:
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
||
|
|
00
|
|
|
#12 | ||
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
Salut !!
L'algorithme de Thomé est un algorithme de type parallèle : il supprime plusieurs points inessentiels à la fois. Les 16 configurations présentent dans la pièce jointe sont un résumé de l'ensemble de toutes les configurations où P est inessentiel Code C++ :
A bientôt |
||
|
|
00
|
|
|
#13 |
|
Membre actif
![]() Inscription : mars 2008 Messages : 209 ![]() |
non je parlais plutot de cette maniere bitmap-matrice-bitmap .
puis voila ce que donne ton code ... sur une image fractale http://www.developpez.net/forums/att...1&d=1211134984 originale.jpg avec un nombre d iteration de 10 ca donne http://www.developpez.net/forums/att...1&d=1211134984 10bw.jpg avec 100 cela donne http://www.developpez.net/forums/att...1&d=1211134984 100bw.jpg on constate qu il n y a aucun changement apart que ca passe en BW . Pire encore sur une autre image ( un building ) l algo n a aucun effet ... C'est normal ça ??? |
|
|
00
|
|
|
#14 |
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
|
|
|
00
|
|
|
#15 |
|
Membre actif
![]() Inscription : mars 2008 Messages : 209 ![]() |
Lost in il fallait le signaler au début et en plus ... a quoi servent ces filtres ?...
|
|
|
00
|
|
|
#16 | |
|
Membre expérimenté
![]() |
Citation:
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
|
00
|
|
|
#17 |
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
Pour PRomu@ld
Images obtenues après : 10 itérations pour Thomé 10 itérations pour Hilditch |
|
|
00
|
|
|
#18 | ||||
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
Salut,
Pour déterminer si un point est inessentiel, Serra utilise les masques suivants : Citation:
Citation:
Code c++ :
L’algorithme général est de type séquentiel. Il consiste à balayer l’image ligne par ligne et à supprimer les points inessentiels au fur et à mesure qu’ils sont rencontrés. Il ne peut donc pas tenir compte de l’environnement dans lequel il opère et a tendance à enlever trop de points d’un seul coup. |
||||
|
|
00
|
|
|
#19 | ||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
Algorithme de thomé en OpenCV: (petit pb d'exécution)
J'ai deja implémenté l'algo de Thomé en C++ mais à l'aide de la biblio OpenCv pr l'accés aux pixels de l'image (builder C++ et ImageToMatrice...machin chose pas trop compri !! en OpenCv, l'accés à l'image ne se fait pas comme une matrice donc le traitement est un peu lourd cad kil faut récupérer la valeur du pixel aprés faire la verification de son voisinage de configuration...etc, du fait, cela va prendre bcp de temps ou meme un buggage..voici mon code: Code :
|
||
|
|
00
|
|
|
#20 |
|
Membre régulier
![]() Inscription : janvier 2008 Messages : 268 ![]() |
Salut,
Je n'ai pas bien compris ton problème !! Pour l'algorithme de Thomé il suffit qu'un pixel de l'image satisfasse l'une des 16 configurations données pour qu'on puisse dire qu'il n'appartient pas au squelette. A+
__________________
Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com