Ini pertanyaan untuk para ahli pemrosesan gambar.
Saya sedang mengerjakan masalah penglihatan komputer yang sulit. Tugasnya adalah untuk menghitung stomata (ditandai di bawah) dalam gambar mikroskop DIC. Gambar-gambar ini tahan terhadap sebagian besar teknik pemrosesan gambar yang dangkal seperti operasi morfologis dan deteksi tepi. Ini juga berbeda dari tugas penghitungan sel lainnya.
Saya menggunakan OpenCV. Rencana saya adalah meninjau fitur yang berpotensi bermanfaat untuk diskriminasi stomata.
- Klasifikasi tekstur
- DCT (Discrete cosine transform / analisis domain frekuensi)
- LBP (pola biner lokal)
- HOG (Histogram gradien berorientasi)
- Detektor fitur yang kuat (saya skeptis)
- Sudut Harris
- SIFT, SURF, STAR, dll.
- Fitur Haar cascade classifier / Viola-Jones
Dan mungkin mendesain deskriptor fitur baru. Saya meninggalkan pemilihan classifier untuk saat ini.
Apa yang saya lewatkan? Bagaimana Anda menyelesaikan ini? Solusi untuk masalah deteksi objek serupa akan sangat membantu.
Contoh gambar di sini .
Setelah bandpass filter:
Deteksi tepi cerdik tidak menjanjikan. Beberapa area gambar tidak fokus:
sumber
Jawaban:
Maaf saya tidak tahu OpenCV, dan ini lebih merupakan langkah pra-pemrosesan daripada jawaban lengkap:
Pertama, Anda tidak ingin detektor tepi. Detektor tepi mengubah transisi (seperti gelap ke terang):
ke punggungan (garis terang pada gelap) seperti ini:
Dengan kata lain, ia melakukan diferensiasi.
Namun dalam gambar Anda, ada cahaya yang menyinari dari satu arah, yang menunjukkan kepada kita relief permukaan 3D. Kami menganggap ini sebagai garis dan tepi, karena kami terbiasa melihat hal-hal dalam 3D, tetapi sebenarnya tidak, itulah sebabnya mengapa detektor tepi tidak berfungsi, dan pencocokan templat tidak akan bekerja dengan mudah dengan gambar yang diputar (sempurna kecocokan pada rotasi 0 derajat benar-benar akan dibatalkan sepenuhnya pada 180 derajat, karena terang dan gelap akan saling sejajar)
Jika ketinggian salah satu garis simpang siur ini terlihat seperti ini dari samping:
maka fungsi kecerahan saat menyala dari satu sisi akan terlihat seperti ini:
Ini yang Anda lihat di gambar Anda. Permukaan menghadap menjadi lebih cerah dan permukaan trailing menjadi lebih gelap. Jadi, Anda tidak ingin membedakan. Anda perlu mengintegrasikan gambar di sepanjang arah iluminasi, dan itu akan memberi Anda peta ketinggian asli permukaan (kurang-lebih). Maka akan lebih mudah untuk mencocokkan hal-hal, baik melalui transformasi Hough atau pencocokan template atau apa pun.
Saya tidak yakin bagaimana mengotomatiskan menemukan arah iluminasi. Jika sama untuk semua gambar Anda, bagus. Kalau tidak, Anda harus menemukan garis kontras terbesar dan menganggap cahayanya tegak lurus terhadapnya atau sesuatu. Sebagai contoh saya, saya memutar gambar secara manual ke apa yang saya pikir adalah arah yang benar, dengan cahaya yang datang dari kiri:
Anda juga perlu menghapus semua perubahan frekuensi rendah pada gambar, untuk menyoroti hanya fitur seperti garis yang berubah dengan cepat. Untuk menghindari artefak dering, saya menggunakan 2D Gaussian blur dan kemudian mengurangi itu dari aslinya:
Integrasi (jumlah kumulatif) dapat berjalan dengan mudah, yang menghasilkan goresan horizontal. Saya menghapus ini dengan high-pass Gaussian lain, tetapi hanya dalam arah horizontal kali ini:
Sekarang stomata berbentuk elips putih, bukan putih di beberapa tempat dan hitam di tempat lain.
Asli:
Terintegrasi:
The transformasi Hough dapat digunakan untuk mendeteksi elips punggungan seperti ini, terbuat dari "ujung pixel", meskipun itu benar-benar mahal dalam perhitungan dan memori, dan mereka tidak elips sempurna sehingga akan menjadi sedikit "ceroboh" detektor. Saya belum pernah melakukannya, tetapi ada banyak hasil Google untuk " deteksi elips hough ". Saya akan mengatakan jika Anda mendeteksi satu elips di dalam yang lain, dalam ruang pencarian ukuran tertentu, itu harus dihitung sebagai stoma.
Lihat juga:
sumber
Hal pertama yang saya coba adalah pencocokan templat, dengan templat yang diputar untuk semua sudut dengan beberapa langkah. Rotasi templat penting di sini. Juga pilihan template bisa non-sepele - bisa beberapa dengan pencahayaan berbeda, dan itu bisa kabur untuk memungkinkan perbedaan bentuk.
http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution
Berikutnya - HOG terlihat menjanjikan di sini. Solusi lain dapat menggunakan detektor sudut yang kuat seperti Moravec atau Shi-Tomasi (dengan penindasan non-maksimum) dan mencari kelompok 2-sudut atau 3-4 sudut pada baris yang sama dengan kandidat. Setelah menemukan kandidat, Anda dapat menerapkan kontur aktif untuk verifikasi (tidak yakin apakah itu benar-benar membantu, tapi itu mungkin)
http://en.wikipedia.org/wiki/Corner_detector
http://en.wikipedia.org/wiki/Active_contour
Namun kemungkinan lain adalah menggunakan transformasi Hough untuk elips, mungkin dengan tidak 2 tetapi 3-4 parameter gratis.
sumber
Sebagian jawaban. Menemukan kandidat dengan Mathematica:
sumber
Saya akan mulai dengan menggunakan detektor tepi sensitif (misalnya gradient magnitude dengan ambang batas rendah), dan kemudian menggunakan transformasi Hough untuk mencoba menemukan elips. Canny mungkin masih bekerja juga. Saya yakin ada beberapa parameter yang dapat Anda atur untuk membuatnya lebih sensitif dan mengambil tepi buram.
sumber