Apa yang harus dilakukan pemrosesan gambar atau pembelajaran mesin untuk mendeteksi dan membandingkan lingkaran tugas

pemrograman


saya sedang mengerjakan perangkat lunak di mana saya ingin melakukan beberapa pemrosesan gambar dan mendeteksi lingkaran dari gambar dan ada dua lingkaran yang ingin saya deteksi, yang pertama ada di dalam objek (berlian kasar) dan yang kedua adalah saya sedang menggambar kotak gambar atau video.
berikut adalah beberapa gambar jenis gambar apa yang akan dibuat Gambar1
Gambar2
Gambar3
Gambar4

di sini pada gambar di atas satu lingkaran merah yang saya gambar menggunakan beberapa parameter dan lingkaran hitam yang ada pada objek adalah lingkaran yang ingin saya deteksi untuk dibandingkan atau dicocokkan dengan lingkaran yang telah saya gambar di kotak video.

sekarang setelah deteksi selesai saya ingin membandingkan atau mencocokkan lingkaran yang saya gambar dan lingkaran yang saya dapatkan dari pengolahan gambar dari gambar tersebut.

jadi saya mencoba pemrosesan gambar dari 2 hari masih belum mendapatkan hasil yang saya inginkan.
jadi saya harus memikirkan tentang Pembelajaran Mesin atau AI
jika saya dapat memberikan kumpulan data lingkaran yang cocok atau tidak, bisakah saya menggunakan AI atau pembelajaran Mesin untuk proyek saya?
jika ya, bagaimana cara menggunakannya dan berapa banyak waktu yang diperlukan untuk ini?

Apa yang saya coba:

saya telah mencoba Perpustakaan EmguCV dan melakukan beberapa pemrosesan gambar tetapi ini tidak akurat, saya masih terjebak hanya pada deteksi lingkaran hitam pada objek (berlian kasar)

di sini saya telah melakukan beberapa pemrosesan gambar menggunakan emgucv tetapi tidak mendapatkan hasil yang saya inginkan
Hasil yang saya dapatkan menggunakan kode ini adalah:
gambar1
gambar2

catatan: juga berfungsi untuk beberapa gambar, bukan untuk semua.

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

Solusi 1

Hai,
Carilah Hough Circle Transform untuk mendeteksi lingkaran.

コメント

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