Hai CV / Komunitas Pengakuan Pola,
Saya punya masalah serius mengenai segmentasi gambar. Skenarionya adalah suasana di dalam tungku yang membuat kepalaku menjadi gila. Dan saya perlu mendeteksi kontur benda dari berbagai bahan (gelas, keramik, Al, Ir, ..) dalam waktu singkat (<10 detik) dan bukan hanya untuk satu kasing khusus. Saya juga memerlukan kontur dalam deretan piksel berurutan untuk kode. Oleh karena itu diperlukan kode rantai atau yang disebut border / contour, sehingga lubang terbuka tidak bagus. Di latar belakang adalah suara non linear, kira-kira debu, partikel atau yang lainnya, yang muncul dari waktu ke waktu.
Saran Matlab atau OpenCV dipersilakan.
Untuk membuatnya lebih jelas, saya telah memposting gambar lain dari tujuan saya dan objek setengah transparan, yang juga perlu dideteksi. Juga contoh lebih lanjut yang perlu diperhatikan.
Seperti yang dapat Anda lihat di Gambar # 1, ada partikel di bagian kanan gambar dan dekat kontur luar bintang, yang merupakan objek. Kontras secara keseluruhan juga tidak terlalu bagus. Objek itu sendiri berdiri di bawah tanah, yang tidak relevan untuk deteksi kontur. Gambar # 2 menunjukkan objek halftransparan, yang juga dimungkinkan.
Saya ingin mencari kontur / keliling objek itu, seperti pada layar berikutnya (garis merah). Dua persegi panjang (kuning) menandai awal (kiri) dan titik akhir (kanan). Garis biru tidak dapat diabaikan.
Pada awalnya saya berpikir bahwa saya bisa menyelesaikan masalah atmosfer kotor hanya dengan filter. Tetapi setelah sejumlah waktu investasi yang terhormat, saya baru sadar, bahwa saya harus menghilangkan atau mengurangi suara secara signifikan untuk meningkatkan kontras latar depan dan latar belakang. Saya sudah mencoba banyak metode, seperti ekualisasi histogram, ekualisasi adaptif Otsu, filter linear (mis. Gauss), filter nonlinier (median, difusi), Kontur Aktif, k-Means, Fuzzy-c-means dan juga Canny untuk murni Deteksi Tepi dalam kombinasi dengan operator morfologi.
- Canny: Partikel-partikel dan atmosfir menyebabkan lubang, tetapi saya membutuhkan kontur objek yang lengkap. Masih dengan penutupan, dilatasi operator morfologi tidak cukup baik. Canny masih memiliki hasil terbaik dari semua metode yang telah saya pelajari karena histeresis.
- Kontur Aktif: Mereka bekerja pada tepi / gradien juga, mereka bertindak benar-benar gila setelah menginisialisasi di dalam objek, yang mungkin disebabkan oleh peta tepi yang menghasilkan objek 'terbuka'. Sejauh yang saya tahu kontur harus ditutup. Mencobanya dengan turunan yang berbeda (GVF / VFC / Classic Snake).
- k-Means: Hasil termasuk suasana tungku, karena latar belakang berkabut. Sama untuk fuzzy-c-means. Saya memilih dua kelompok, karena memisahkan objek dari latar belakang. Lebih banyak kelompok mengarah pada hasil yang lebih lemah.
- Histogram / Otsu: Karena intensitas abu-abu yang sangat dekat (imho!), Itu menggabungkan objek dengan latar belakang. Mencobanya dengan metode lokal dan global.
- Filter: Terutama GLPF atau LPF lainnya mengolesi tepi, yang tidak begitu baik dan bahkan tidak mengurangi atmosfer berkabut.
- Filter Non-Linier menjaga ujung-ujungnya. Kebanyakan dari mereka terlalu lama untuk menghitung gambar besar. Mengambil filter bilateral cepat untuk saat ini. Hasilnya lihat di bawah.
Oleh karena itu, tidak ada metode tunggal yang cukup baik untuk langkah-langkah pasca-pemrosesan, karena hasil yang diperoleh dari segmen objek miskin bersaing dengan algoritma yang ada. Algoritma yang ada sangat lokal dan karenanya bekerja untuk skenario yang sangat khusus ini.
Jadi saya bertanya kepada Anda, jika saya telah melewatkan sesuatu sepenuhnya ... Saya tidak memiliki ide lebih lanjut bagaimana memproses dan bagaimana saya harus mendapatkan hasil kontur yang baik, tanpa memiliki celah atau lubang .. Apakah mungkin tanpa membuat banyak perubahan pada CCD dan lingkungan fisik? Terima kasih sebelumnya!
Pendekatan Terakhir sejauh ini (setelah malam panjang bereksperimen dengan MO):
- Filter Bilateral (pengawetan tepi, tetapi menghaluskan area homogen)
- Canny (Sigma = 2, Threshold = [0,04 0,08])
- Morfologi Operasi (MO):
bwareopen
,closing
,remove
&bridge
bwlabel
untuk memilih hanya perimeter kontur, yang menghilangkan suara yang tidak diinginkan. belum ada tangkapan layar yang diperbarui, tetapi berfungsi untuk bintang. kaca mendapat kontur dalam yang terhubung ke kontur outter, yang juga dapat dilihat pada screenshot di bawah ini.
Jadi saya takut bahwa saya memerlukan algoritma khusus untuk traversal kontur outter. Ini akan menjadi beberapa pencarian lingkungan searah / berlawanan arah jarum jam. Langkah searah jarum jam / berlawanan arah jarum jam dapat beralih, jika ada titik sudut. jika ada celah, tambah jari-jari dan lihat lagi. jika ada dua atau lebih poin berikut yang mungkin, ambil orang yang mendapat arah yang sama seperti sebelumnya. Menurut Anda, apakah algoritma mengikuti kontur ini masuk akal?
Jawaban:
Anda dapat mencoba yang berikut ini:
Segmentasi Gambar Berbasis Grafik yang Efisien: http://www.cs.brown.edu/~pff/segment/ (kode tersedia)
Segmentasi berbasis GraphCut: http://www.csd.uwo.ca/~olga/OldCode.html (kode tersedia)
Pertama denoise gambar menggunakan metode sparse: http://spams-devel.gforge.inria.fr/ (kode tersedia)
sumber
Saya pikir Anda menyerah pada teknik ambang batas terlalu dini. Lihatlah histogram Anda, ini jelas tri-modal: (Saya menghapus kolom putih di sebelah kanan gambar Anda secara manual, saya berasumsi bahwa itu bukan bagian dari gambar - silakan ambil gambar ini sebelum menjalankan kode saya)
Lihatlah semua nilai dalam grup pertama:
Untuk menemukan mode dalam histogram tri-modal, dimungkinkan untuk menggunakan pengelompokan K-means dengan
K=3
intensitas. Kode Matlab berikut ditemukanth1=67
pada kode Anda. Idenya adalah untuk mengasumsikan bahwa Anda memiliki 3 set, dan menghitung centroid tertimbang pada masing-masing. Kemudian, setiap level intensitas ditugaskan ke klusternya sendiri. Anda berhenti ketika centroid tertimbang berhenti bergerak. Ini adalah hasil dari menemukan dua ambang batas pada gambar Anda, ditunjukkan pada histogram.Memecahkan masalah setelah itu adalah sepotong kue, cukup lakukan beberapa operasi morfologis sederhana, seperti pembukaan.
sumber
imhist
kehist
Seperti yang disarankan di atas, thresholding dapat sangat efektif pada gambar ini, yang pada dasarnya adalah biner, kecuali bahwa ambang konstan tidak akan dilakukan karena pencahayaan yang tidak merata. Anda membutuhkan ambang batas adaptif.
Saran saya adalah melakukan rekonstruksi latar belakang dengan model sederhana (mungkin planar [3 DOF] atau quadradic [6 DOF]), dengan mengambil sampel sejumlah kecil nilai di wilayah terang. Yang terbaik adalah menggunakan ROI kecil untuk menghilangkan kebisingan. Kemudian koreksi bayangan dengan mengurangi (atau membagi dengan) nilai latar belakang.
Jika interaksi manusia bukan opsi, Anda dapat mengotomatiskan pencarian untuk area latar belakang dengan Otsu langsung pertama dan mempertimbangkan ROI seragam (varian rendah) di bawah ambang batas. Setelah rekonstruksi latar belakang pertama, Anda mungkin dapat meningkatkan dengan menerapkan proses ini ke gambar yang dikoreksi datar.
Seluruh proses dapat diterapkan untuk berjalan di bawah satu detik.
sumber
Saya pikir cara terbaik adalah menggunakan kontur aktif. Jika Anda tidak mengetahui kontur aktif apa yang terlihat di video ini di youtube http://www.youtube.com/watch?v=ijNe7f3QVdA
Pada dasarnya, Anda perlu memberikan segmentasi inisialisasi dan itu akan meningkatkan bentuk. Saran saya adalah untuk salah satu metode yang dibahas pada posting ini dan menggunakan kontur aktif sebagai langkah ke-2 yaitu. sebagai langkah peningkatan.
Berikut ini adalah implementasi dari kontur aktif yang dapat Anda gunakan http://www.mathworks.com/matlabcentral/fileexchange/19567
sumber
Anda jelas tahu tentang apa yang Anda bicarakan tetapi Anda belum menyebutkan menggunakan ambang, khususnya apakah Anda mencoba menerapkan ambang global menggunakan Otsu untuk menghitung tingkat yang tepat, kemudian menemukan kontur dan memilih yang terbesar?
[Edit untuk menjelaskan]
Ambang global jelas tidak akan berfungsi karena graident yang terlihat di seluruh gambar.
Saya bermain cepat dengan ini dan menemukan bahwa jika Anda memecah gambar menjadi 6 potongan (2 baris dengan 3 kolom berukuran sama), kemudian lakukan perontokan menggunakan Otsu pada masing-masing dan kemudian pasang kembali, itu pekerjaan yang cukup baik untuk membersihkan gambar.
Masih ada beberapa artefak kecil di bagian kanan atas bintang.
Terjadi pada saya bahwa karena objek memiliki batas garis lurus, Anda mungkin ingin mempertimbangkan transformasi Hough untuk mengekstrak tepi ini, memotongnya untuk menemukan titik dan menggunakan hasilnya sebagai kontur objek Anda.
sumber
Apakah garis besarnya selalu garis lurus atau kurva yang dikenal?
Jika demikian maka daripada mencoba untuk mendapatkan setiap pixel di sepanjang tepi yang benar, saya akan menggunakan transformasi Hough untuk mendapatkan persamaan garis dan kemudian menciptakan kontur dari garis dan itnersections
sumber