Qué hacer con el procesamiento de imágenes o el aprendizaje automático para detectar y comparar el círculo de tareas

programación


Estoy trabajando en un software donde quiero procesar algunas imágenes y detectar el círculo de la imagen y hay dos círculos que quiero detectar, el primero está en el objeto (diamante en bruto) y el segundo es en el que estoy dibujando. el cuadro de imagen o vídeo.
Aquí hay algunas imágenes de qué tipo de imagen será. Imagen1
Imagen2
Imagen3
Imagen4

Aquí, en las imágenes de arriba, estoy dibujando un círculo rojo usando algunos parámetros y el círculo negro que está en el objeto es el círculo que quiero detectar para comparar o hacer coincidir con el círculo que dibujé en el cuadro de video.

Ahora, una vez completada la detección, quiero comparar o hacer coincidir los círculos que estoy dibujando y el círculo que obtengo del procesamiento de la imagen.

Así que estoy intentando procesar imágenes durante 2 días y aún no obtuve el resultado que quiero.
Por eso tengo que pensar en el aprendizaje automático o la IA.
Si puedo proporcionar un conjunto de datos de círculos coincidentes o no coincidentes, ¿puedo usar la IA o el aprendizaje automático para mi proyecto?
En caso afirmativo, ¿cómo puedo usarlo y cuánto tiempo se necesita para esto?

Lo que he probado:

Probé la biblioteca EmguCV y procesé algunas imágenes, pero esto no es exacto. Aún así, estoy atascado en la detección del círculo negro en el objeto (diamante en bruto).

aquí hice un procesamiento de imágenes usando emgucv pero no obtuve el resultado que quiero
Los resultados que obtuve usando este código son:
imagen1
imagen2

nota: también funciona para algunas de las imágenes, no para todas.

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();

Solución 1

Hola,
Eche un vistazo a Hough Circle Transform para detectar círculos.

コメント

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