Zoom conservation contour

thibobr Messages postés 31 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 13 septembre 2007 - 12 sept. 2007 à 11:45
thibobr Messages postés 31 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 13 septembre 2007 - 13 sept. 2007 à 09:31
Bonjour,

je viens demander un peu d'aide après 2 jours à chercher un algo efficace pour mon problème.

Je souhaite effectuer un zoom négatif d'une forme.
J'ai deux contraintes: un bord du contour(de la forme) est composé de deux pixels adjacents. First est à l'extérieur et Second à l'intérieur.
Un bord définie par deux pixels et suivi par un autre bord et on se dirige dans le sens inverse des aiguilles d'une montre.

Pour le zoom positif j'y arrive bien en faisant une interpolation linéaire des pixels puis en vérifiant que chacun des couples de pixels sont adjacents, sinon je modifie en déplacant second vers first.
Puis je rajoute les pixels manquants entre.

Mais pour le zoom négatif je me retrouve souvent avec First==Second et il y a trop de pixel(plusieurs fois les meme coordonnées)
Du coup je perds et les bords et le sens de navigation, que faire?

ps: j'ai une piste, un angle de ma forme est définie comme suit:
soit deux bords consécutifs A et B composés chacun, je le rappel, de 2 pixels, First et Second. Alors soit A::First == B::Fisrt ou A::Second==B::Second

Merci

Toby or not Toby

http://aubrun.thibaut.free.fr

4 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
12 sept. 2007 à 17:07
Salut Thibault!
Je n'ai pas tout compris: pourquoi ton zomm dépendrait de la forme contenue dans l'image?
Une réduction se fait généralement de cette manière: la couleur du pixel résulat est une moyenne des pixels du voisinage. Pour un agrandissement, tu fais une interpolation avec les pixels voisins.

Si tu veux un exemple, regarde ma source qui explique clairement (enfin, j'espère ) quelques traitements d'images.
Si pb de compréhension, je suis dispo...

Bon courage et tiens nous au courant!

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
thibobr Messages postés 31 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 13 septembre 2007
12 sept. 2007 à 17:43
Bonjour buno.

Je suis entierement d'accord avec toi concernant l'interpolation linéaire, bicubique...

Mais la je définit un contour que je dois absolument conserver. En fait je définit deux pixels qui forment alors une partie de se contour.

Je vais exposer quelques hypothèse pour définir mon contour:

Deux pixels, un extérieur et un intérieur au contour, forme un lignel.
Chaque lignel précède un autre lignel et sont adjacents.
Un ensemble de lignels forment un contour dans le sens anti horaire.

Je souhaite réduire ce contour en gardant les proriétés

J'ai pensé à une solution:

Remplir une matrice 2D de 0 (une image noir et blanc).

Pour chaque Lignel prendre le pixel extérieur et affecté 1 à la matrice 2D à la

position x y de ce pixel.

Puis on fait un zoom linéaire tout simple.

Ensuite on utilise un algo de "OUT IN" (je sais pas si cela s'appel comme ca)
On parcours notre nouvelle image de gauche à droite pour chaque ligne.
En gros au départ on est à l'extérieur. Si on change de valeur de pixel on est à l'intérieur, si on change encore on est a l'extérieur ...
Bref on est capable de dire tiens on tombe sur un bord.

Et la j'ai un problème.
Soit on fait cela
La il faut faire le même algo dans le sens haut vers bas et seulement pour la colonne courante afin de déterminer ou se trouve le deuxième pixel formant notre lignel

Soit on préremplit notre image de 1 mais uniquement à l'intérieur du contour obtenu par interpolation(sais po comment on fait). et dans ce cas il suffit juste de regarder en haut a gauche a droite et en bas ou il y a des 0 afin de définir notre deuxième pixel.

Bon la je parie que personne ne me comprends plus ;)
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
12 sept. 2007 à 18:12
Effectivement, tu m'as perdu...
Si je comprends bien, tu as une forme dans ton image (délimitée par un contour) et tu veux appliquer un changement de taille sur ce contour?? Si oui, je te diriges vers les notions d'érosion et de dilatation.
Voici une page contenant de bonnes explications pour l'érosion.
C'est ce principe que tu veux utiliser?
Suis-je à côté de la plaque?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
thibobr Messages postés 31 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 13 septembre 2007
13 sept. 2007 à 09:31
En fait je travail sur les coordonnées de mes points. L'image en elle même je m'en fiche.

Ce que je veux faire peut paraitre bizarre, je sais. Ce qui m'intéresse c'est d'obtenir un contour définie non pas par une suite de pixels mais par une suite d'arrêtes. Une arrête comportant 2 pixels. exemple:   P1|P2 
Intuitivement on voit bien que si on fait un zoom on perds la propriété P1 est adjacent à P2. De plus il peuvent se superposer, on perds alors la direction de l'arrête.

Pour un affichage à l'écran je n'utiliserais que P1 par exemple.

Merci quand même.
0
Rejoignez-nous