2016-03-10 1 views
2

Mon exigence est de trouver l'inclinaison des lignes (tous les 8 lignes) autour de la matrice de données, comme représenté sur le bord détecté l'image:algorithme rapide pour détecter l'inclinaison des lignes dans l'image

image

les deux principales restrictions:

  • l'inclinaison détectée doit avoir une précision d'au moins 0,1 ° (le meilleur possible dans cette image)
  • Temps nécessaire doit être inférieure à 30 ms

Je suis l'implémentation de l'algo sur un DSP Blackfin, et j'ai utilisé la boîte à outils de traitement d'image Blackfin.

J'ai essayé d'utiliser la transformation Hough et Contour pour trouver les lignes et donc leurs inclinaisons mais la limite de temps dépasse. Toute suggestion pour utiliser un algorithme différent ou optimiser celui-ci serait utile.

[pour mon cas d'utilisation plus la précision de l'angle le mieux, je vise au moins 0,02 à 0,05 avec une image de résolution supérieure]

+5

Comment comptez-vous atteindre cette précision? Les lignes externes ont une longueur d'environ 260 px. Vous ne pouvez détecter une position sur la ligne qu'avec une erreur de ± 0,5 px (l'image ne convient pas pour les méthodes sous-pixel). Cela seul entraîne une incertitude d'au moins 'arc tan (0,5/260) = 0,1 °'. –

+0

que voulez-vous accomplir? Je ne peux pas penser à une application où vous avez besoin d'une telle précision pour un DMC. partager plus d'informations s'il vous plaît – Piglet

+0

Ajouté réponse avec je pense que l'approche assez rapide. Le problème de précision est toujours là et dépend grandement de la qualité de l'ajustement et de la résolution/qualité de l'image d'entrée. BTW ressemble à une application de placement SMD/BGA ou ai-je tort? – Spektre

Répondre

0

Une approch rapide et facile serait de balayer chaque ligne et colonne pour la premier et deuxième pixel blanc à partir de gauche, droite, haut et bas. Ensuite, utilisez simplement un algorithme d'ajustement de ligne robuste pour obtenir les lignes.

Sauf si vous n'avez pas déjà essayé de le faire, vous pouvez réduire les données pour la transformation Hough ou d'autres algorithmes en recadrant l'image à la taille DMC.

La précision d'angle requise ne peut pas être atteinte car vous n'avez pas assez de résul- tats. Et même si vous aviez vos résultats souffriraient de tout bruit et de valeurs aberrantes.

1
  1. boîte bondissant

    analyse tous les points et trouvé xmin,ymin,xmax,ymax de pixels ensemble

  2. trouver les lacunes

    lignes de balayage coulé par la moitié de la zone de délimitation remémoration/mesure les tailles d'écart. Pour éviter les lignes manquantes (à cause des trous), vous pouvez lancer plus de lignes de balayage ou scanner avec un rayon plus large.

    Si vous avez besoin d'exemples pour voir ray fonte/balayage:

  3. segmentate l'image dans des régions

    vient rétrécir boîte englobante par une fraction (50 %) d'un écart ... quelque chose comme ceci:

    regions

    formant 8 régions rectangulaires chacune avec une seule ligne sans bruit provenant des bords.

  4. regress/lignes d'ajustement

    L'idée est de faire une liste de tous les pixels fixés pour chaque région séparément et s'adapter à une ligne qui a la plus petite distance à tous.

    Je voudrais essayer d'utiliser ceci:

    Ou utiliser la recherche d'approximation et forme quelque chose comme

    simplement ignorer la courbure et ajuster les paramètres d'équation de ligne directement à la place des cubiques.

    Après les lignes sont montées, vous pouvez calculer leur pente directement par atan2(dy,dx)

+0

merci pour la suggestion. Laissez-moi essayer cela et je vous ferai savoir si cela fonctionne dans la contrainte de temps. Si nécessaire, je peux identifier les goulots et répéter la solution. – kaustubh