Xử lý hình ảnh hoặc học máy để phát hiện và so sánh vòng tròn nhiệm vụ

lập trình


tôi đang làm việc trên một phần mềm mà tôi muốn thực hiện một số xử lý hình ảnh và phát hiện vòng tròn từ hình ảnh và có hai vòng tròn mà tôi muốn phát hiện vòng tròn đầu tiên nằm trong vật thể (kim cương thô) và vòng tròn thứ hai là tôi đang vẽ lên hộp hình ảnh hoặc video.
đây là một số hình ảnh về loại hình ảnh đó Hình ảnh1
Hình ảnh2
Hình ảnh3
Hình ảnh4

Ở đây trong các hình ảnh trên, một vòng tròn màu đỏ là tôi đang vẽ bằng cách sử dụng một số tham số và vòng tròn màu đen trên đối tượng là vòng tròn tôi muốn phát hiện để so sánh hoặc khớp với vòng tròn mà tôi đã vẽ trên hộp video.

bây giờ sau khi quá trình phát hiện hoàn tất, tôi muốn so sánh hoặc khớp các vòng tròn mà tôi đang vẽ và vòng tròn mà tôi nhận được từ quá trình xử lý hình ảnh từ hình ảnh.

vì vậy tôi đang thử xử lý ảnh từ 2 ngày vẫn không đạt được kết quả như mong muốn.
do đó tôi phải nghĩ về Machine Learning hoặc AI
Nếu tôi có thể cung cấp tập dữ liệu về các vòng kết nối trùng khớp hoặc không khớp thì tôi có thể sử dụng AI hoặc Machine learning cho dự án của mình không?
Nếu có thì tôi có thể sử dụng như thế nào và cần bao nhiêu thời gian cho việc này?

Những gì tôi đã thử:

tôi đã thử Thư viện EmguCV và thực hiện một số xử lý hình ảnh nhưng điều này không chính xác nhưng tôi vẫn bị kẹt khi chỉ phát hiện vòng tròn màu đen trên vật thể (kim cương thô)

ở đây tôi đã thực hiện một số xử lý hình ảnh bằng emgucv nhưng không nhận được kết quả như mong muốn
kết quả tôi nhận được khi sử dụng mã này là:
hình ảnh1
hình ảnh2

lưu ý: cũng có tác dụng với một số hình ảnh, không phải cho tất cả.

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

Giải pháp 1

CHÀO,
Hãy xem Hough Circle Transform để phát hiện vòng tròn.

コメント

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