2017-04-18 2 views
1

J'essaie d'utiliser la transformation Hough de DLIB mais je ne peux pas afficher plus d'une ligne. L'exemple de Dlib docs utiliser un seul point fort:Le filtrage à travers les résultats de la transformation Hough dans DLIB

point p = max_point(mat(himg)); 

Comment puis-je obtenir tous forts (au-dessus certain seuil ou N) la plupart des votes des lignes pour montrer?

J'ai essayé de boucle à travers les points et le masque chacun déjà trouvé, mais le dlib::max_point garde trouver le même point bien qu'il soit remis à zéro déjà:

for(int i = 0; i < nPoints; ++i){ 
    dlib::point p = dlib::max_point(dlib::mat(hImg)); 
    maxPoints.push_back(p); 
    std::cout << "Turning point " << p.x() << ", " << p.y() << " = " << hImg[p.x()][p.y()] << std::endl; 

    hImg[p.x()][p.y()] = 0; 

    std::pair<dlib::point, dlib::point> line = ht.get_line(p); 

    dlib::draw_line(temp, line.first+5, line.second+5, dlib::rgb_pixel(255,255,0)); 
} 

qui produit la même valeur après la première itération de boucle:

Turning point 595, 584 = 78540 
Turning point 595, 584 = 0 
Turning point 595, 584 = 0 

Existe-t-il une approche «correcte» du filtrage à travers un espace creux dans DLIB? Comme Davis King a souligné, j'ai échangé les coordonnées (ligne, col) vs (x, y) qui a résolu le problème immédiat, mais le problème de base est toujours là. Mon espace ien ressemble à ceci:

Hough Image in color for clarity

Comme on le voit, il y a un certain nombre de maxima locaux, mais tout est dominé par l'énorme blob au milieu. Mon idée initiale était que chaque zone floue pouvait être réduite à un seul point dominant

Je pensais à regrouper chaque goutte de points au-dessus d'un certain seuil, mais en bouclant toute l'image pour trouver de tels points ET des points d'alimentation trouvés l'algorithme de clustering sera très inefficace, il doit donc y avoir un moyen plus intelligent, peut-être que les bords internes de l'image elle-même pourraient être supprimés (petits objets comme un fouillis irrégulier)?

Répondre

2

Vous avez permuté la ligne et la colonne. hImg[p.x()][p.y()] = 0; est en arrière, il devrait être hImg[p.y()][p.x()] = 0;

+0

Merci, je me mêle parfois quand on utilise un endroit x, y et l'autre rangée, col – user3002166