[ad_1]
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.
// 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.
[ad_2]
コメント