IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

Détection de cercles peu contrastés


Sujet :

Traitement d'images

  1. #1
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut Détection de cercles peu contrastés
    Bonsoir,
    Je me retrouve face à un problème : détecter des cercles dont le contour est assez peu contrasté par rapport au reste de l'image.
    La différence principale entre les cercles et le fond est que le fond possède un texture tandis que les disques sont assez homogènes, en pratique ces cercles peuvent tout de même est constellés de petites saletés (je n'ai pas d'exemple "sale" sous la main ce soir)

    J'ai déjà fait de la détection de cercle unique
    • soit avec du Hough (très lent et pas fiable sur ces examples)
    • soit avec de la détection de contour suivi de fit de cercle sur les segments extraits (c'est rapide mais pas totalement robuste sur ces images là)

    Dans ce cas là
    • j'ai plusieurs cercles espacés d'une distance que je connais à peu près, et je n'ai pas vraiment besoin de connaître les rayons mais surtout leurs centres.
    • il y a surement moyen d'exploiter la différence de texture (un Canny ou Sobel a tendance à ne laisser en noir que l'intérieur des cercles)

    Est-ce que vous avez des pistes pour élaborer un algo rapide et robuste (tant qu'à faire!)

    Merci

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Deux solutions pour ton problème car les textures sont vraiment TRES différentes :
    - Extraction de caractéristiques locales (Gabor, Haralick, Size Zone Matrix, Granulométrie) puis clustering (k-means) à deux classes.
    - Convolutional Neural Network (CNN), n'importe quelle architecture marchera parfaitement pour ton problème.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Merci pour tes réponses,
    Haralick j'avais testé ici : http://demo.ipol.im/demo/35/result?k...F2E89AE333697F
    ça ne marche pas du tout

    Size Zone Matrix, je vois que tu as bossé dessus, est-ce que par hasard tu connais un moyen de tester rapidement avant de l'implémenter dans mon code ?

    CNN, je ne comprends pas, c'est plus un cadre de travail (réseau de neurone) qu'un algo particulier, du coup je ne comprends pas ce que tu suggères.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Voila une solution possible: calculer la variance autour de chaque pixel. Comme la zone des cercles est plus uniforme que le background, leur variance sera faible, alors que celle du background sera haute.


    Ensuite, il suffit de seuiller, trouver les composantes connexes, et fitter un cercle sur chacune.

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    import cv2
    import numpy as np
     
    def stddev(im, window_size):
        """
        Compute the standard deviation in a window_size x window_size area for each pixel.
        """
        assert window_size % 2 != 0 # window_size must be odd
        k = window_size // 2
        h, w = im.shape
        std = np.ones((h-2*k, w-2*k)) * 255
        for y in range(k, h - k):
            for x in range(k, w - k):
                std[y-k][x-k] = np.std(im[y - k:y+k, x-k:x+k])
        return std.astype(np.uint8)
     
    def is_valid_circle(label_id, stats, labels):
        """
        Check is the connected component #label_id is a valid circle.
        """
        x, y, w, h, n_pixels = stats
     
        # Check number of pixels
        if n_pixels < 500 or n_pixels > 10000:
            return False
     
        # Check coverage
        # optimal for a circle is pi/4 ~ 0.78
        # put 0.7 to have a margin
        total_area = h * w
        if n_pixels / total_area < 0.7:
            return False
     
        # Could add some shape descriptors using labels
        # ...
        return True
     
    def find_circles(im_gray):
        # 1. Resize, mainly to speed-up detection
        resize_factor = 0.25
        height, width = im_gray.shape
        resized_height = int(round(height * resize_factor))
        resized_width = int(round(width * resize_factor))
        im_resized = cv2.resize(im_gray, (resized_height, resized_width),
                                interpolation=cv2.INTER_CUBIC)
     
        # 2. Compute std
        std_window = 9
        blur_window = 13
        im_std = stddev(im_resized, std_window)
        im_std_soft = cv2.medianBlur(im_std, ksize=blur_window)
     
        # 3. Threshold (THRESH_OTSU to find the optimal threshold)
        threshold_value, thresholded = cv2.threshold(im_std_soft, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
     
        # 4. Find connected components
        n_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresholded)
     
        # 5. Fit a circle
        circles = []
        for label_id in range(n_labels):
            if not is_valid_circle(label_id, stats[label_id], labels):
                continue
     
            im_label = (labels == label_id).astype(np.uint8) * 255
            _, contours, _ = cv2.findContours(im_label, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
            # Should check for contours[i] ...
            contours = contours[0].reshape((-1, 2))
            ellipse = cv2.fitEllipse(contours)
            (xc, yc), (h, w), angle = ellipse
            radius = (h + w)/4
            # Rescale and offset
            xc = (xc + std_window // 2) / resize_factor
            yc = (yc + std_window // 2) / resize_factor
            radius = radius / resize_factor
            circles.append((xc, yc, radius))
     
        return circles, im_std, im_std_soft, thresholded # for debug
     
    def plot_circles(im_bgr, circles):
        cross = 10
        for xc, yc, r in circles:
            xc = int(round(xc))
            yc = int(round(yc))
            r = int(round(r))
            cv2.circle(im_bgr, (xc, yc), 3, color=(0, 0, 255), thickness=-1)
            cv2.line(im_bgr, (xc - cross, yc), (xc + cross, yc), color=(0, 0, 255), thickness=3)
            cv2.line(im_bgr, (xc, yc - cross), (xc, yc + cross), color=(0, 0, 255), thickness=3)
            cv2.circle(im_bgr, (xc, yc), r, color=(0, 0, 255), thickness=1, lineType=cv2.LINE_AA)
     
    filename="3wXEJNV.jpg"
    im_gray = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
    im_bgr = cv2.cvtColor(im_gray, cv2.COLOR_GRAY2BGR)  # for display
     
    circles, im_std, im_std_soft, thresholded = find_circles(im_gray)
    plot_circles(im_bgr, circles)
     
    cv2.imwrite(filename + "_circles.jpg", im_bgr)
    # To debug
    cv2.imwrite(filename + "_std.png", im_std)
    cv2.imwrite(filename + "_std_soft.png", im_std_soft)
    cv2.imwrite(filename + "_thresholded.png", thresholded)

  5. #5
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Bonjour Nzeuwik,
    Bonne idée la variance, j'avais aussi fait quelques essais sous imageJ

    Est-ce que tu peux expliquer pourquoi tu appliques un medianBlur après le calcul de variance ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 26
    Points
    26
    Par défaut
    Le medianBlur sert à "lisser" l'image avant de seuiller. Sans ca, il y aurait des "trous" dans le masque binaire obtenu: comme on calcule la std dans des petites zones (9x9), et que les cercles n'ont une texture pas parfaitement uniforme, certains pixels vont avoir une std un peu haute.
    En utilisant une region plus grande dans le calcul de la std (std_window), on peut peut-etre eviter ca, mais ca augmente le temps de calcul.

  7. #7
    Membre régulier
    Homme Profil pro
    Applis analyse d'image
    Inscrit en
    Juin 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Applis analyse d'image

    Informations forums :
    Inscription : Juin 2009
    Messages : 73
    Points : 92
    Points
    92
    Par défaut application d'un filtre variance
    Bonjour Nzeuwik,

    je connais et utilise deux algos de filtrage basés sur la variance à l'intérieur d'une matrice de pixels, dont celui de ImageJ, mais l'efficacité du vôtre pour passer simplement ensuite à un seuillage automatisé me frappe. Cependant j'aimerais savoir sur laquelle des 3 images proposées vous avez obtenu le résultat que vous montrez (l'une d'elles n'a d'ailleurs pas besoin de ça et peut être seuillée directement).
    Par avance merci.

  8. #8
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Nzeuwik Voir le message
    Le medianBlur sert à "lisser" l'image avant de seuiller. Sans ca, il y aurait des "trous" dans le masque binaire obtenu: comme on calcule la std dans des petites zones (9x9), et que les cercles n'ont une texture pas parfaitement uniforme, certains pixels vont avoir une std un peu haute.
    En utilisant une region plus grande dans le calcul de la std (std_window), on peut peut-etre eviter ca, mais ca augmente le temps de calcul.
    Merci pour les détails.
    Note qu'on peut accélérer le calcul de variance (10ms au lieu de 12s avec ton code)
    https://stackoverflow.com/questions/...59915#11459915

    J'ai une autre question sur ton extraction de contours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            _, contours, _ = cv2.findContours(im_label, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
            # Should check for contours[i] ...
            contours = contours[0].reshape((-1, 2))
    ligne 1 pourquoi tu passes CHAIN_APPROX_SIMPLE ? On veut fitter le cercle sur tout les points, donc plutôt CHAIN_APPROX_NONE, non ?
    ligne 2 qu'est ce que tu avais en tête ? si on trouve un anneau au lieu d'un disque, on peut déduire le fait qu'un contour soit inclus dans un autre par exemple ?
    Que fais-tu exactement ligne 3 ?

    Citation Envoyé par charlinou Voir le message
    Cependant j'aimerais savoir sur laquelle des 3 images proposées vous avez obtenu le résultat que vous montrez (l'une d'elles n'a d'ailleurs pas besoin de ça et peut être seuillée directement).
    Par avance merci.
    C'est l'image dont les cercles sont blanc.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par neF4ST
    Note qu'on peut accélérer le calcul de variance (10ms au lieu de 12s avec ton code)
    https://stackoverflow.com/questions/...59915#11459915
    Je ne connaissais pas cette astuce; c'est excellent, beaucoup plus rapide en effet.

    Citation Envoyé par neF4ST
    ligne 1 pourquoi tu passes CHAIN_APPROX_SIMPLE ? On veut fitter le cercle sur tout les points, donc plutôt CHAIN_APPROX_NONE, non ?
    Oui, je n'ai pas vérifié à quoi correspondait chaque paramètre. CHAIN_APPROX_NONE devrait être mieux. Pourtant, je viens d'essayer et le résultat est moins bon sur les cercles partiellement dans l'image (sur les cotés).

    Citation Envoyé par neF4ST
    ligne 2 qu'est ce que tu avais en tête ? si on trouve un anneau au lieu d'un disque, on peut déduire le fait qu'un contour soit inclus dans un autre par exemple ?
    Je ne me souviens plus de la structure exacte retournée par la fonction, mais je pense qu'il faut gérer les cas où la fonction ne renvoie pas un seul contour, et garder le meilleur cercle trouvé dans ces cas la ("meilleur" à définir, sans doute le plus grand).

    Citation Envoyé par neF4ST
    Que fais-tu exactement ligne 3 ?
    Elle ne sert à rien: je voulais être sur d'avoir les bonnes dimensions pour passer les points à fitEllipse, mais c'est déjà le cas.

  10. #10
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Nzeuwik Voir le message
    Oui, je n'ai pas vérifié à quoi correspondait chaque paramètre. CHAIN_APPROX_NONE devrait être mieux. Pourtant, je viens d'essayer et le résultat est moins bon sur les cercles partiellement dans l'image (sur les cotés).
    Normal car du coup on fitte ça :
    Citation Envoyé par Nzeuwik Voir le message
    Je ne me souviens plus de la structure exacte retournée par la fonction, mais je pense qu'il faut gérer les cas où la fonction ne renvoie pas un seul contour, et garder le meilleur cercle trouvé dans ces cas la ("meilleur" à définir, sans doute le plus grand)
    Tu penses au cas où il y a un/des trou dans la composante connexe ? Hormis ce cas, il ne devrait y avoir qu'un contour, non ?

    Sinon le dernier problème que je vois est que ça à tendance à déformer les contours, ce qui rend l'estimation des centres moins précise

  11. #11
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut tracer l'intensité le long de droites
    Bonjour
    As-tu essayé de tracer l'intensité le long de droites sécantes ? Il est beaucoup plus facile et rapide de calculer en 1D si c'est possible
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  12. #12
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Histogramme et seuillage autour de la valeur la plus probable.
    Y a-t-il d'autres infos implicites sur tes images (taille, disposition des cercles, etc) ?
    Nom : disques5.JPG
Affichages : 1378
Taille : 223,9 Ko
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  13. #13
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut Profil le long d'une bande
    Nom : disques6.JPG
Affichages : 1382
Taille : 198,2 Ko
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  14. #14
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    Histogramme et seuillage autour de la valeur la plus probable.
    Y a-t-il d'autres infos implicites sur tes images (taille, disposition des cercles, etc) ?
    seuillage sur l'image d'origine ca va être compliqué car des fois les cercles sont plus clairs que le fond, et d'autre fois du même niveau de gris.
    Sinon oui j'ai déjà une estimation de la taille des cercles +/- 15% et de leur disposition

  15. #15
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par neF4ST Voir le message
    seuillage sur l'image d'origine ca va être compliqué car des fois les cercles sont plus clairs que le fond, et d'autre fois du même niveau de gris.
    Sinon oui j'ai déjà une estimation de la taille des cercles +/- 15% et de leur disposition
    Le principe est de seuiller de part et d'autre de la valeur la plus probable, indépendamment de cette valeur. (voir la fenêtre ImageJ)
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  16. #16
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par neF4ST Voir le message
    Merci pour tes réponses,
    Haralick j'avais testé ici : http://demo.ipol.im/demo/35/result?k...F2E89AE333697F
    ça ne marche pas du tout
    Haralick aurait dû produire quelque chose similaire à la variance. Comment l'as tu utilisé ?



    Citation Envoyé par neF4ST Voir le message
    Size Zone Matrix, je vois que tu as bossé dessus, est-ce que par hasard tu connais un moyen de tester rapidement avant de l'implémenter dans mon code ?
    Non, je n'ai rien qui s'applique juste autour d'un pixel. Le plus simple est de découper un patch autour de quelques pixels et regarder les valeurs des caractéristiques.




    Citation Envoyé par neF4ST Voir le message
    CNN, je ne comprends pas, c'est plus un cadre de travail (réseau de neurone) qu'un algo particulier, du coup je ne comprends pas ce que tu suggères.
    Tu segmentes à la main une image ou deux, puis tu découpes des vignettes que tu donnes à un CNN. Il va faire de la segmentation pour toi.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  17. #17
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut Après binaisation et
    Après binarisation et un certain nombre de dilatations et d'erosions.
    Pour aller plus loin : quel est le problème exact et quelles sont toutes les infos dont tu disposes ?
    Nom : disques7.JPG
Affichages : 1350
Taille : 22,5 Ko
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  18. #18
    Nouveau membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    J'ai bricolé autour du code proposé par Nzeuwik.
    J'ai viré le resizing qui avait tendance à décaler les centres des cercles trouvés.
    Un fit de cercle "Pransac" (trouvable sur ce forum) est bien plus robuste
    Le seuillage Otsu n'est pas optimal, au final avec un seul à 16 on est pas mal sur tous mes exemples.

    Il me reste des cercles "sales" qui malheureusement sont mal détectés, la variance devient assez proche du fond :

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/02/2011, 17h21
  2. Détection de cercle par la transformée de hough
    Par roulian46 dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 23/12/2010, 11h20
  3. Détection de cercle partiel
    Par pasqual dans le forum OpenCV
    Réponses: 3
    Dernier message: 27/11/2008, 14h31
  4. Détection de cercles dans une image
    Par abs2008 dans le forum Images
    Réponses: 6
    Dernier message: 29/05/2008, 13h47
  5. Détection de cercles
    Par goformat dans le forum Images
    Réponses: 4
    Dernier message: 13/03/2007, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo