decomposer une image en le plus petit nombre de rectangles possible

decomposer une image en le plus petit nombre de rectangles possible - Algo - Programmation

Marsh Posté le 27-05-2006 à 16:40:18    

Bonjour,
 
Comme dit dans le titre, je cherche un algo pour decomposer une image en le plus petit nombre de rectangles (de couleur unie) possibles.
Ou disons un nombre suffisament petit.
En gros je cherche à decrire une image en utilisant des rectanlges de couleur unie, et de la maniere la plus compacte possible.
 
Evidemment le but n'est pas de decrire une image complexe genre jpeg de paysage, mais plutot des trucs genre graph ou autres images générées.
 
Si vous avez une idée ou une piste, ca m'interesse
merci
 
EDIT: petite precision: les rectangles ne peuvent pas se chevaucher. Par exemple une image representant une simple ligne verticale au milieu de l'image sera decrite par 3 rectangle: le fond à gauche de la ligne, la ligne, et le fond à droite.


Message édité par pospos le 27-05-2006 à 22:33:11
Reply

Marsh Posté le 27-05-2006 à 16:40:18   

Reply

Marsh Posté le 27-05-2006 à 23:09:15    

Tu peux faire un système qui ajoute à chaque rectangle de couleur unie existant une ligne ou une colonne de pixels adjascents au rectangle s'ils sont de la même couleur, en démarrant avec des rectangles de la taille d'un pixel de l'image.
Par contre, pour trouver la solution optimale, à mon avis ça ressemble à un problème NP-complet.


Message édité par rnoizet le 27-05-2006 à 23:09:55
Reply

Marsh Posté le 27-05-2006 à 23:24:11    

ouai effectivement ca doit etre NP complet, un peu comme les trucs genre binpack.
 
Je pensais effectivement faire comme ca, en prenant des points de depart au pif, et en essayant de maximiser un rectangle à partir de ca.
Il me faudrait une solution "satisfaisante", pas forcement optimale.
Le but est de faire ca sur des images genre graph ou chart, donc avec normalement de beaux gros rectangle à aller chercher.

Reply

Marsh Posté le 28-05-2006 à 11:15:13    

Tu peut déja classer les couleurs de l'image par nombre d'occurences dans l'image, ca te donnera une idée d'endroits ou commencer (la ou y'a les couleurs les plus présentes dans l'image)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 28-05-2006 à 11:41:09    

yep, bonne idée! merci

Reply

Marsh Posté le 29-05-2006 à 22:12:35    

'alut
et une decomposition en quad-Tree c'est pas fait pour ca?
 
@pluche

Reply

Marsh Posté le 30-05-2006 à 00:25:50    

ca consite à decouper l'image en 4, puis à continuer pour chaque region en s'arrettant des que la region est de couleur unie c'est ca?
 
Ouai c'est pas mal comme approche. Apres il faudrait faire une seconde passe pour eventuellement regrouper des carrée juxtant et de meme couleur dans deux zones differentes. Mais ca doit deja donner de bons resultat tels quels.
Je vais essayer ca.
merci

Reply

Marsh Posté le 30-05-2006 à 08:29:02    

alut,
 
ouais cest tout a fait ca. Quand à la seconde passe je ne sais pas trop si elle est necessaire, dans la mesure où le critère de 'split' n'est pas respecté dans les cas de regions identiques.
 
@pluche

Reply

Marsh Posté le 30-05-2006 à 09:38:01    

oui mais imagine le cas suivant:


l'image originale :
 
========
==----==
==----==
========
 
1er split :
 
==== ====
==-- --==
 
==-- --==
==== ====
 
2eme split (une des possibilités) :
 
====  ====
 
== -- -- ==
 
== -- -- ==
 
====  ====
 
la on a 12 zones, mais en regroupant des zones qui appartenaient à des zones differentes au split precedent on pourrait obtenir ca:
 
========
 
== ---- ==
== ---- ==
 
========
 
5 zones
 


Message édité par pospos le 30-05-2006 à 09:38:33
Reply

Marsh Posté le 30-05-2006 à 09:57:38    

l'ideal serait de ne pas systematiquement split au milieu mais aux endroits de fort contraste (et pas trop eloignés du milieu tout de meme). Ca donnerait ca:
 


l'image originale :
 
========
==----==
==----==
========
 
1er split :
 
== ======
==
== ----==
== ----==
   ======
 
2eme split (une des possibilités) :
 
== ======
==
== ---- ==
== ---- ==
 
   ======
 
 
5 zones sans faire de seconde passe


 
mais bon, la c'est un cas simple
et puis ca demande à faire une passe avant chaque split, peut etre bcp plus couteuse qu'une passe finale


Message édité par pospos le 30-05-2006 à 10:01:49
Reply

Marsh Posté le 30-05-2006 à 09:57:38   

Reply

Marsh Posté le 30-05-2006 à 12:01:35    

d'un autre coté (j'y reviens par moments, au cours de la journée...) le fait d'ajuster les frontieres de split au mieux devrait permettre de reduire le nombre de recursions de split necessaires dans la plupart des cas

Reply

Marsh Posté le 30-05-2006 à 17:30:16    

ca ca me fait penser à un algo utiliser pour la compression en couleur, ou tu splits les populations defacon a avoir le meme nombre d'elements des deux cotés de la frontiere....
mais la, en fait ca serai plutot un truc du genre split & merge qui faudrai utiliser.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed