Que faire en matière de traitement d’image ou d’apprentissage automatique pour détecter et comparer le cercle de tâches

la programmation


je travaille sur un logiciel dans lequel je veux effectuer un traitement d’image et détecter le cercle de l’image et il y a deux cercles que je veux détecter, le premier est dans l’objet (diamant brut) et le second est sur lequel je dessine la boîte d’image ou de vidéo.
voici quelques images de quel type d’image il s’agira Image1
Image2
Image3
Image4

ici, dans les images ci-dessus, un cercle rouge est celui que je dessine en utilisant certains paramètres et le cercle noir qui se trouve sur l’objet est le cercle que je veux détecter pour comparer ou faire correspondre le cercle que j’ai dessiné sur la boîte vidéo.

maintenant, une fois la détection terminée, je veux comparer ou faire correspondre les cercles que je dessine et le cercle que j’obtiens grâce au traitement d’image à partir de l’image.

donc j’essaie le traitement d’image depuis 2 jours, je n’ai toujours pas obtenu le résultat que je souhaite.
je dois donc penser au Machine Learning ou à l’IA
si je peux fournir un ensemble de données de cercles correspondants ou non, puis-je utiliser l’IA ou l’apprentissage automatique pour mon projet ?
si oui, comment puis-je l’utiliser et combien de temps est nécessaire pour cela ?

Ce que j’ai essayé :

J’ai essayé la bibliothèque EmguCV et effectué un traitement d’image mais ce n’est pas précis, je suis toujours bloqué sur la simple détection du cercle noir sur l’objet (diamant brut)

ici, j’ai effectué un traitement d’image en utilisant emgucv mais je n’ai pas obtenu le résultat souhaité
les résultats que j’ai obtenus en utilisant ce code sont :
image1
image2

Remarque : fonctionne également pour certaines images, mais pas pour toutes.

C#
// Convert the image to grayscale
            Image<Gray, byte> grayImage = originalImage.Convert<Gray, byte>();
            pictureBox1.Image = grayImage.ToBitmap();


            // Apply Gaussian blur
            CvInvoke.GaussianBlur(grayImage, grayImage, new Size(5, 5), 0);
            pictureBox2.Image = grayImage.ToBitmap();

            // Threshold the grayscale image to isolate black circles
            double thresholdValue = 70; // Adjust this value based on the intensity of your black circles
            Image<Gray, byte> binaryImage = grayImage.ThresholdBinary(new Gray(thresholdValue), new Gray(255));
            pictureBox3.Image = binaryImage.ToBitmap();

            VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
            Mat hierarchy = new Mat();

            CvInvoke.FindContours(binaryImage, contours, hierarchy, RetrType.List, ChainApproxMethod.ChainApproxSimple);

            // Loop through all detected contours
            for (int i = 0; i < contours.Size; i++)
            {
                using (VectorOfPoint contour = contours[i])
                {
                    double area = CvInvoke.ContourArea(contour);
                    double perimeter = CvInvoke.ArcLength(contour, true);

                    // Calculate circularity (4 * π * area / perimeter^2)
                    double circularity = (4 * Math.PI * area) / (perimeter * perimeter);

                    // Check if the contour is a perfect circle based on circularity
                    if (circularity > 0.8 && contour.Size > 150) // Adjust the circularity threshold and minimum number of vertices as needed
                    {
                        CircleF circle = CvInvoke.MinEnclosingCircle(contour);
                        originalImage.Draw(circle, new Bgr(Color.Red), 2); // You can change the color and thickness of the circle here
                    }
                }
            }

            pictureBox.Image = originalImage.ToBitmap();

Solution 1

Salut,
Jetez un œil à Hough Circle Transform pour détecter le cercle.

コメント

タイトルとURLをコピーしました