Git Product home page Git Product logo

gama's People

Contributors

adrienlcn avatar aureliebrnt avatar gabrielhdt avatar maelysb avatar

Watchers

 avatar

gama's Issues

Séparation

Lors de certaines séparations de contours, le parcours se passe mal, un pixel se retrouve isolé et le programme renvoie une KeyError ou pop() from an empty list.

séparation des contours

Problème dans les contours séparés: si un pixel d'un contour a 3 voisins (e.g. le pixel juste avant un coin de carré), il ne sera pas compté dans le contour et se retrouvera (par différence ensembliste) dans l'autre, alors qu'il n'a rien à y faire.

Tangentes parfois inexistantes

Le problème vient du calcul des tangentes: si start.x == end.x, alors un des points de contrôle risque d'être confondu avec le point de départ ou d'arrivée. Une solution est d'utiliser plus souvent les cubiques véritables.

création de curve dans list_curves(cont)

En lançant list_curves([cont]), l'erreur suivante est obtenue

File "test.py", line 34, in test_tg
    curves = cp.list_curves([cont])
  File "/home/gabriel/workspace/vcs/GAMA/control_points.py", line 79, in list_curves
    curves.append(curve)
UnboundLocalError: local variable 'curve' referenced before assignment

avec cont un carré défini par:

cont.xys += [ie.Pixel(10 + i, i) for i in range(10, 21)]                    
cont.xys += [ie.Pixel(30 - i, 20 + i) for i in range(1, 11)]                
cont.xys += [ie.Pixel(20 - i, 30 - i) for i in range(1, 11)]                
cont.xys += [ie.Pixel(10 + i, 20 - i) for i in range(1, 11)]

Le problème semble résider dans les conditions
if len(contour.xys) < 3: et while start != c_end: qui ne couvriraient pas tous les cas, laissant curve non initialisée lors de l'appel curves.append(curve).

Protubérances

Avec des contours d'une largeur de 1 pixel (une ligne), la ligne est aperçue si le contour est attaqué de l'extérieur, pas de l'intérieur. Il restera un contour non fermé après séparation des contours. Tests réalisés avec
Uploading lines.png…

Départ séparation contours

Si la séparation du contour démarre sur un agencement type:

  • pixel en (0, 0)
  • pixel en (1, 0)
  • pixel en (0, 1)
  • pixel en (2, 1)
    alors le programme peut parcourir dans l'ordre:
  1. Pixel(0, 0)
  2. Pixel(1, 0)
  3. Pixel(0, 1)
    puis continuer du côté gauche, laissant le Pixel(2, 1) sans voisins et faisant planter le programme lors du pop() ligne 170:
inspix = neighbourhood.pop()
KeyError: 'pop from an empty set'

Conditions de passage à vraie cubique

Jusqu'où peut-on considérer l'intersection des tangentes? Actuellement, si l'intersection dépasse le rectangle formé par les deux pixels, on ne considère pas l'intersection des tangentes, cf validate_flyby() dans control_points. La fonction peut-être modifiée.

Séparation de contours et résidus

Lors de la séparation d'un contour, la présence d'un pixel ayant 2 voisins proches peut engendrer le saut d'un des voisins et laisser alors un contour (raw_minusloop) avec seulement le pixel exclu. Sa suppression est envisageable (petite quantité de pixels). Peut être comparé avec les autres contours. À suivre.

Management of separation of contours

Could be more efficient to return a list of stacks when separating contours, each stack being a block of neighbours. Would cost less in terms of computing when sorting.

Boucle infinie détection contour

Le programme detection_contour(...) boucle infiniment. En affichant la variable voisins_contourless à chaque appel, on remarque que le programme tombe dans un état périodique:

...
[<Pixel at 0, 2>]                                                               
[<Pixel at 1, 1>, <Pixel at 1, 3>]                                              
[<Pixel at 0, 0>, <Pixel at 0, 2>]                                              
[<Pixel at 1, 1>, <Pixel at 0, 2>]                                              
[<Pixel at 0, 2>]                                                               
[<Pixel at 1, 1>, <Pixel at 1, 3>]
...

En affichant l'attribut unread à chaque appel, on obtient (au bout d'un nombre d'itérations) une alternance False True False True ... jusqu'à dépassement de la max recursion depth. En fait, le <Pixel at 1, 1> reste toujours à True, les autres sont bien à False.

Peut-être faut-il examiner la manière dont python stocke les variables lors d'appels récursifs (mise à jour de celles là dans les appels précédents ou non), ou utiliser une matrice de booléen remplaçant les attributs.

Calcul précision

Possibilité de séparer le calcul de la précision de pente_s de pente_e. Nécessite de connaître le point d'inflexion suivant, voire tous?

Points de contrôle faux

À partir d'une simili cardioïde définie dans contour_tests, list_curves me renvoie

[array([[ 10.        ,  20.        ],
       [ 22.99270073,  42.99270073],
       [ 31.        ,  19.        ]]),
 array([[ 31.        ,  19.        ],
       [ 11.23595506,  19.97378277],
       [ 11.        ,  21.        ]])]

ce qui donne, après le passage dans la nouvelle fonction curves2curvemat:

[[ 10.          20.        ]
 [ 22.99270073  42.99270073]
 [ 31.          19.        ]
 [ 11.23595506  19.97378277]
 [ 11.          21.        ]]

et le dessin suivant
tgtest

Le point de contrôle [23, 43] peut-être dû à un problème de repère (origine en haut à gauche). Les deux derniers points sont également faux, peut-être un problème de translation? On ne les voit pas sur la figure mais on obtient deux courbes de Bézier, qui se chevauchent ici.

contours et bords d'image

Si une zone longe le bord, alors le contour de cette zone n'est pas fermé. Testé avec le logo python, donnant une matrice greyscale avec un seuil de 0.1 après un regroupement de couleurs:
figure_1

Contours

Détermination des contours par seuillages successifs, pourrait être plus précis.

Séparation des contours (Partie II)

La séparation des contours se fait nécessairement avant affinage, car ce dernier restreint le nombre de voisins par pixel à deux, incompatible avec des intersections de contours. Le problème réside dans l'intersection de contours (à vérifier) et dans la présence de ``couloirs'' i.e. une ligne d'un pixel bordée par deux contours différents, générant un quadrillage rempli sur la longueur de la ligne
cont3 svg

Tangentes

Le find_inflexion() à corriger, trop de points de contrôle sur des lignes droites et l'utilisation de is_vert est mal implémentée

Traitement ligne droite

Identifié les waypoints donnés par scanlines() pour forcer la tangente droite d'un côté du point et ainsi assurer la ligne droite entre les deux points du scanlines.

vertan

Utile ou non? Ne semble pas pertinent.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.