Bonjour,

Je dois faire un travail en binôme qui traite la détection de forme dans mon cas c'est de la détection de cercle dans une image .bmp ou via une capture d'image d'une webcam et qui va utiliser Emgu et Aforge.

Je dois faire le travail sous Aforge. J'ai réussi à effectuer la capture d'une image via ma webcam et le chargement d'une image présent sur mon disque dur qui est la partie la moins difficile de ce travail, de plus j'ai réussi la détection de mes formes et à les compter. Maintenant, on s'est ajouté une difficulté dans la détection de nos cercles c'est de pouvoir détecter nos cercles avec des contrastes différentes et la détection de cercles qui se superposent formant un groupe qui ressemble à tout sauf à un cercle (donc la détection des cercles formant ce groupe).

Maintenant le problème c'est que je ne vois pas comment faire pour le deuxième défis pour que mon programme puisse détecter chaque cercle composant notre groupe. Pour le premier défis j'ai pensé à deux solutions possibles soit modifier la valeur de mon seuil de détection, soit accentuer le contraste des cercles .

Merci d'avance pour votre aide.

P.S: voici mon code qui permet de traiter mon image:
Code : 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
private void traite_Click(object sender, EventArgs e)
{
 
    Bitmap img = (Bitmap)pictureBox2.Image;
    //Bitmap img = new Bitmap(pictureBox2.Image,pictureBox2.Image.Size);
    AForge.Imaging.Image.SetGrayscalePalette(img);
    int nbr = 0;
    // collect statistics
    //HorizontalIntensityStatistics his = new HorizontalIntensityStatistics(img);
    ImageStatistics his = new ImageStatistics(img);
    // get gray histogram (for grayscale image)
    Histogram histogram = his.Gray;
    // output some histogram's information
    label4.Text = "Valeur medianne histogramme : " + (histogram.Median);
    label5.Text = "Valeur minimale histogramme : " + (histogram.Min);
    label6.Text = "Valeur maximale histogramme : " + (histogram.Max);
    int seuil = histogram.Max - histogram.Min;
 
    Threshold filtre = new Threshold(seuil);
    filtre.ApplyInPlace(img);
    BlobCounter blobCount = new BlobCounter();
    blobCount.ProcessImage(img);
    Blob[] blobs = blobCount.GetObjectsInformation();
    SimpleShapeChecker shapechecker = new SimpleShapeChecker();
    for (int i = 0, n = blobs.Length; i < n; i++)
    {
 
 
        List<IntPoint> edge = blobCount.GetBlobsEdgePoints(blobs[i]);
        AForge.Point centre;
        float radius;
        if (shapechecker.IsCircle(edge, out centre, out radius) && radius < 17.5)
        {
            nbr = nbr + 1;
        }
    }
 
    pictureBox3.Image = (Bitmap)img.Clone();
    res.Text = Convert.ToString("Il y a " + nbr + " colonies");
}