Saya telah menulis program komputer yang dapat mendeteksi koin dalam gambar statis (.jpeg, .png, dll.) Menggunakan beberapa teknik standar untuk penglihatan komputer (Gaussian Blur, thresholding, Hough-Transform dll.). Dengan menggunakan rasio koin yang diambil dari gambar yang diberikan, saya dapat menetapkan dengan pasti koin mana yang mana. Namun, saya ingin menambah tingkat kepercayaan saya dan juga menentukan apakah koin yang saya simpulkan memiliki tipe-A (dari rasio radius) juga dari colo [u] r yang benar. Masalahnya adalah bahwa untuk koin Inggris et al. (tembaga, perak, emas), warna masing-masing (khususnya tembaga ke emas) sangat mirip.
Saya memiliki rutinitas yang mengekstraksi warna rata-rata dari koin yang diberikan dalam istilah 'ruang warna' RedGreenBlue (RGB) dan rutin untuk mengubah warna ini menjadi 'ruang-warna HueSaturationBrightness (HSB atau HSV)'.
RGB tidak terlalu bagus untuk digunakan dalam upaya membedakan antara tiga warna koin (lihat gambar [dasar] yang terlampir sebagai contoh). Saya memiliki rentang dan nilai tipikal berikut untuk warna dari berbagai jenis koin:
Catatan: nilai khas di sini adalah nilai yang dipilih menggunakan rata-rata 'piksel-bijaksana' dari gambar nyata.
**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).
**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).
**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86)
Saya pertama kali mencoba menggunakan 'jarak Euclidian' antara warna koin rata-rata yang diberikan (menggunakan RGB) dan nilai-nilai khas untuk setiap jenis koin yang diberikan di atas yang memperlakukan nilai RGB sebagai vektor; untuk tembaga kita akan memiliki:
di mana nilai terkecil dari selisih ( ) akan memberi tahu kami jenis koin mana yang paling mungkin. Metode ini menunjukkan dirinya sangat tidak akurat.
Saya juga mencoba membandingkan rona koin dengan nilai tipikal dari tipe yang disediakan di atas. Meskipun secara teoritis ini memberikan 'ruang warna' yang jauh lebih baik untuk menangani berbagai tingkat kecerahan dan saturasi gambar, juga tidak cukup akurat.
Pertanyaan: Apa metode terbaik untuk menentukan jenis koin berdasarkan warna (dari gambar statis)?
Terima kasih banyak atas waktu Anda.
Edit 1
Catatan: Saya telah mencoba semua ide yang dibahas di bawah dan hampir tidak berhasil. Perbedaan dalam kondisi pencahayaan (bahkan di dalam gambar yang sama) membuat masalah ini sangat sulit dan harus dipertimbangkan.
Edit 2 (Ringkasan Hasil)
Terima kasih atas jawaban anda Penelitian lebih lanjut saya sendiri (termasuk jawaban dan komentar Anda) telah menyoroti betapa sulitnya masalah ini untuk ditangani dalam kasus generik pencahayaan sewenang-wenang, kamera sewenang-wenang (perangkat seluler), fluktuasi warna koin (bahkan untuk spesies / jenis yang sama) dll. Saya pertama kali melihat pengenalan warna kulit (bidang penelitian yang sangat aktif) sebagai titik awal dan masih ada banyak masalah bahkan dengan pengenalan warna kulit untuk orang Kaukasia saja (lihat makalah ini untuk tinjauan teknik saat ini), dan fakta bahwa masalah ini mengandung tiga objek warna berbeda yang kesemuanya dapat memiliki chromacities kontinu dan bervariasi membuat topik visi komputer ini menjadi sangat sulit untuk diklasifikasi dan ditangani secara sesuai (sebenarnya Anda dapat melakukan Ph.D. !).
Saya melihat ke Metode Kendala Gamut dari posting yang sangat membantu oleh DW di bawah ini. Ini pada pandangan pertama sangat menjanjikan sebagai langkah pra-pemrosesan untuk mengubah gambar dan objek koin terpisah menjadi warna yang tidak tergantung pada kondisi pencahayaan. Namun, bahkan teknik ini tidak bekerja dengan sempurna (dan melibatkan perpustakaan gambar / histogram untuk pemetaan - yang saya tidak ingin masuki) dan juga tidak metodologi metodologi Neural Network Architecture yang jauh lebih kompleks. Bahkan makalah ini menyatakan secara abstrak bahwa:
"current machine colour constancy algorithms are not good enough for colour-based
object recognition.".
Itu bukan untuk mengatakan bahwa tidak ada lebih banyak makalah terkini tentang hal ini di luar sana, tetapi saya tidak dapat menemukan mereka dan tampaknya tidak menjadi area penelitian yang sangat aktif saat ini.
The jawabannya oleh AVB juga membantu dan saya telah melihat ke L A B * sebentar.
"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative
perceptual differences between any two colours in L*a*b* can be approximated by
treating each colour as a point in a three dimensional space."
Dari apa yang telah saya baca, transformasi ke ruang warna ini untuk gambar yang tergantung pada perangkat saya akan menjadi rumit - tetapi saya akan membahasnya secara terperinci (dengan maksud untuk semacam implementasi) ketika saya memiliki sedikit waktu lebih banyak.
Saya tidak menahan napas untuk solusi konkret untuk masalah ini dan setelah upaya dengan L A B * saya akan mengabaikan warna koin dan mencari untuk memastikan algoritma deteksi geometrik saya saat ini (Elliptic Hough Transform akurat dll.).
Terima kasih semuanya. Dan sebagai catatan akhir untuk pertanyaan ini, berikut adalah gambar yang sama dengan algoritma pendeteksian geometrik baru, yang tidak memiliki pengenalan warna:
sumber
Jawaban:
Dua hal, sebagai permulaan.
Satu, pasti tidak bekerja di RGB. Default Anda adalah ruang warna Lab (alias CIE L * a * b *). Buang
L
. Dari gambar Anda sepertinyaa
koordinat memberi Anda informasi paling banyak, tetapi Anda mungkin harus melakukan analisis komponen utamaa
danb
dan bekerja di sepanjang komponen pertama (paling penting), hanya untuk menjaga hal-hal sederhana. Jika ini tidak berhasil, Anda dapat mencoba beralih ke model 2D.Hanya untuk mendapatkan perasaan untuk itu, masuk
a
tiga koin kekuningan memiliki STD di bawah 6, dan sarana 137 ("emas"), 154, dan 162 - harus dibedakan.Kedua, masalah pencahayaan. Di sini Anda harus hati-hati mendefinisikan masalah Anda. Jika Anda ingin membedakan warna dekat di bawah pencahayaan apa pun dan dalam konteks apa pun - Anda tidak bisa, tidak seperti ini. Jika Anda hanya khawatir dengan variasi kecerahan lokal, Lab sebagian besar akan menangani ini. Jika Anda ingin dapat bekerja di bawah cahaya siang dan lampu pijar, dapatkah Anda memastikan latar belakang putih yang seragam, seperti pada contoh gambar Anda? Secara umum, bagaimana kondisi pencahayaan Anda?
Selain itu, gambar Anda diambil dengan kamera yang cukup murah. Ini mungkin memiliki semacam fitur white balance otomatis, yang mengacaukan warna yang sangat buruk - matikan jika Anda bisa. Ini juga terlihat seperti gambar dikodekan dalam YCbCr di beberapa titik (sering terjadi jika itu adalah kamera video) atau dalam varian JPG yang serupa; informasi warna sangat tidak tersampel. Dalam kasus Anda itu mungkin benar-benar baik - itu berarti kamera telah melakukan denoising untuk Anda di saluran warna. Di sisi lain, itu mungkin berarti bahwa di beberapa titik informasi warna juga dikuantifikasi lebih kuat dari kecerahan - itu tidak begitu baik. Hal utama di sini adalah - masalah kamera, dan apa yang Anda lakukan harus bergantung pada kamera yang akan Anda gunakan.
Jika ada yang tidak masuk akal di sini - tinggalkan komentar.
sumber
Dengan semangat bertukar pikiran, saya akan membagikan beberapa ide yang dapat Anda coba:
Coba Hue lebih banyak? Sepertinya Hue memberi Anda pembeda yang cukup baik antara perak dan tembaga / emas, meskipun tidak antara tembaga dan emas, setidaknya dalam satu contoh yang Anda tunjukkan di sini. Sudahkah Anda memeriksa menggunakan Hue secara lebih rinci, untuk melihat apakah mungkin fitur yang layak untuk membedakan perak dari tembaga / emas?
Saya mungkin mulai dengan mengumpulkan banyak contoh gambar, yang telah Anda beri label secara manual, dan menghitung Hue masing-masing koin di setiap gambar. Maka Anda mungkin mencoba histogram mereka, untuk melihat apakah Hue terlihat seperti cara yang masuk akal untuk melakukan diskriminasi. Saya mungkin juga mencoba melihat Hue rata-rata setiap koin, untuk beberapa contoh seperti yang Anda sajikan di sini. Anda juga dapat mencoba Saturation, karena sepertinya itu juga bisa membantu.
Jika ini gagal, Anda mungkin ingin mengedit pertanyaan Anda untuk menunjukkan apa yang telah Anda coba dan memberikan beberapa contoh untuk menggambarkan secara singkat mengapa ini sulit atau di mana ia gagal.
Ruang warna lain? Demikian pula, Anda dapat mencoba mengubah ke rg chromacity dan kemudian bereksperimen untuk melihat apakah hasilnya membantu membedakan perak dari tembaga / emas. Ada kemungkinan bahwa hal ini dapat membantu menyesuaikan variasi iluminasi, sehingga dapat dicoba.
Untuk ketahanan, Anda mungkin memiliki beberapa gambar referensi berbeda untuk setiap koin (pada kenyataannya, setiap sisi dari setiap koin), dan coba semua gambar referensi untuk menemukan yang paling cocok.
Lihatlah algoritma penglihatan untuk keteguhan warna. Komunitas penglihatan komputer telah mempelajari kekonstanan warna , masalah mengoreksi sumber penerangan yang tidak diketahui; lihat, misalnya, ikhtisar ini . Anda dapat menjelajahi beberapa algoritme yang diturunkan untuk masalah ini; mereka mencoba untuk menyimpulkan sumber iluminasi dan kemudian memperbaikinya, untuk mendapatkan gambar yang akan Anda peroleh seandainya gambar diambil dengan sumber iluminasi referensi.
Saya tidak tahu apakah semua ini memiliki peluang untuk bekerja, tetapi mereka adalah beberapa ide yang dapat Anda coba.
sumber
Masalah menarik dan kerja bagus.
Coba gunakan nilai warna median daripada rata-rata. Ini akan lebih kuat terhadap nilai outlier karena kecerahan dan saturasi. Coba gunakan hanya satu dari komponen RGB, bukan ketiganya. Pilih komponen yang paling membedakan warna. Anda dapat mencoba memplot histogram dari nilai-nilai piksel (misalnya salah satu komponen RGB) untuk memberi Anda gambaran tentang sifat-sifat distribusi piksel. Ini mungkin menyarankan solusi yang tidak segera jelas. Cobalah memplot komponen RGB dalam ruang 3D untuk melihat apakah mereka mengikuti pola apa pun, misalnya mereka mungkin terletak dekat dengan garis yang menunjukkan bahwa kombinasi linear dari komponen RGB mungkin merupakan pengklasifikasi yang lebih baik daripada yang individual.
sumber