Saya melihat ruang warna HSV digunakan di semua tempat: untuk pelacakan, deteksi manusia, dll ... Saya bertanya-tanya, mengapa? Ada apa dengan ruang warna ini yang membuatnya lebih baik daripada menggunakan RGB?
Saya melihat ruang warna HSV digunakan di semua tempat: untuk pelacakan, deteksi manusia, dll ... Saya bertanya-tanya, mengapa? Ada apa dengan ruang warna ini yang membuatnya lebih baik daripada menggunakan RGB?
Jawaban:
Jawaban sederhananya adalah bahwa tidak seperti RGB , HSV memisahkan luma , atau intensitas gambar, dari kroma atau informasi warna. Ini sangat berguna di banyak aplikasi. Misalnya, jika Anda ingin melakukan penyetaraan histogram dari gambar berwarna, Anda mungkin ingin melakukannya hanya pada komponen intensitas, dan biarkan komponen warna saja. Kalau tidak, Anda akan mendapatkan warna yang sangat aneh.
Dalam visi komputer Anda sering ingin memisahkan komponen warna dari intensitas karena berbagai alasan, seperti kekokohan terhadap perubahan pencahayaan, atau menghilangkan bayangan.
Perhatikan, bagaimanapun, bahwa HSV adalah salah satu dari banyak ruang warna yang memisahkan warna dari intensitas (Lihat YCbCr, Lab, dll.). HSV sering digunakan hanya karena kode untuk mengkonversi antara RGB dan HSV tersedia secara luas dan juga dapat dengan mudah diimplementasikan. Sebagai contoh, Image Processing Toolbox untuk MATLAB mencakup fungsi rgb2hsv
dan hsv2rgb
.
Informasi warna biasanya jauh lebih berisik daripada informasi HSV.
Biarkan saya memberi Anda sebuah contoh: Saya dan beberapa teman terlibat dalam sebuah proyek yang berurusan dengan pengakuan rambu-rambu lalu lintas di video adegan nyata (kebisingan, bayangan dan kadang-kadang hadir oklusi). Itu adalah bagian dari proyek yang lebih besar, sehingga memungkinkan kami waktu untuk mencoba berbagai pendekatan untuk masalah khusus ini (dan menggunakan kembali pendekatan yang lebih tua). Saya sendiri tidak mencoba pendekatan berbasis warna, tetapi saya ingat informasi yang menarik: _ Komponen RGB dominan dalam tanda STOP sering tidak berwarna merah! (sebagian besar karena bayangan)
Anda biasanya bisa mendapatkan informasi yang lebih baik dari ruang warna HSV . Biarkan saya mencoba dan memberikan contoh pengalaman pribadi lagi: Coba bayangkan Anda memiliki gambar pesawat satu warna dengan bayangan di atasnya. Dalam RGB colorspace, bagian bayangan kemungkinan besar akan memiliki karakteristik yang sangat berbeda daripada bagian tanpa bayangan. Dalam ruang warna HSV, komponen rona kedua tambalan lebih cenderung serupa: bayangan terutama akan mempengaruhi nilai , atau mungkin komponen satuasi , sedangkan rona , menunjukkan "warna" primer (tanpa kecerahan dan encer-ness oleh putih) / hitam) seharusnya tidak banyak berubah.
Jika penjelasan ini tidak terdengar intuitif untuk Anda, saya sarankan:
coba dan lihat alasan mengapa jenis representasi warna ini dikembangkan: selalu dalam beberapa cara, berdasarkan beberapa pandangan interpretasi warna manusia
mis. anak-anak tidak benar-benar menyukai objek bernilai tinggi == berwarna , mereka lebih suka objek yang sangat terpisah , objek yang warnanya intens dan tidak encer
setelah Anda mendapatkan ini dan mengembangkan beberapa intuisi, Anda harus bermain dengan gambar: coba dekomposisi berbagai gambar dalam komponen RGB dan HSV mereka
Tujuan Anda adalah untuk melihat dan memahami perbedaan dalam dekomposisi ini untuk gambar yang mengandung bayangan, pencahayaan yang kuat, refleksi cahaya.
jika Anda memiliki jenis gambar tertentu yang ingin Anda mainkan, coba dekomposisikan mereka: siapa tahu, mungkin RGB benar-benar lebih cocok untuk kebutuhan Anda daripada HSV :)
Hanya menggunakan komponen Hue membuat algoritma kurang sensitif (jika tidak invarian) terhadap variasi pencahayaan.
Pilihan populer lainnya adalah ruang warna LAB, di mana saluran AB mewakili warna dan jarak euclidean di ruang AB lebih cocok dengan persepsi manusia tentang warna. Sekali lagi, mengabaikan saluran L (Luminance) membuat algoritma lebih kuat untuk perbedaan pencahayaan.
Jawaban terbaik yang dapat saya pikirkan adalah: RGB berkaitan dengan "detail implementasi" berkenaan dengan cara RGB menampilkan warna, dan HSV berkaitan dengan komponen "warna aktual". Cara lain untuk mengatakan ini adalah RGB adalah cara komputer memperlakukan warna, dan HSV mencoba menangkap komponen cara kita memandang warna.
Saya akan menguraikan:
Warna adalah persepsi yang didasarkan pada gelombang elektromagnetik. Sifat alami gelombang ini adalah, misalnya intensitas dan frekuensi. Jika kita menyapu frekuensi gelombang cahaya dari infra-merah ke ultra-violet, kita akan secara visual merasakan variasi warna di sepanjang warna pelangi. Warna pelangi dapat dianggap "warna murni" karena diwakili oleh gelombang frekuensi tunggal.
Sekarang mata manusia hanya dapat merespon, atau "beresonansi" ke tiga frekuensi cahaya utama, tidak mengejutkan merah, hijau dan biru. Faktanya adalah bahwa respons ini non-linear, sehingga retina dapat membedakan warna murni yang diberikan (dan secara implisit "frekuensinya") oleh respons gabungan dari tiga komponen warna .
Ruang warna RGB hanya ada untuk meniru cara kerja internal retina kami, sehingga sebagian besar warna dapat diwakili di layar komputer dengan cara yang nyaman (dari sudut pandang komputer) warna 24 bit-per-piksel coding. Ruang warna RGB tidak memiliki hubungan intrinsik dengan sifat warna alami, tidak juga dengan interpretasi warna manusia.
Misalnya, setiap operasi aritmatika yang dilakukan saluran-bijaksana dalam ruang RGB (misalnya, generasi gradien warna) memberikan hasil yang sangat kasar atau bahkan "salah". Karena itu disarankan untuk membuat colormaps dengan mengubah penghentian warna dari RGB ke ruang warna lain (HLS, Lab, dll.), Melakukan interpolasi, kemudian mengubah nilai yang diinterpolasi kembali ke RGB.
Semoga ini membantu!
HSV singkatan dari Hue-Saturation-Value. Ini sebenarnya adalah jenis representasi bidang warna (seperti RGB, YCbCr dll.).
Ini adalah format representasi warna independen perangkat: Representasi warna HSV berguna untuk mendeteksi jenis warna tertentu, misalnya: warna kulit, warna api, dll.
Matlab
fungsi untuk mengkonversi gambar RGB ke pesawat HSV adalah rgb2hsv('/inputimage_name')
.
Saya akan memberi Anda sebuah contoh untuk dipahami. Seperti tangan kita memiliki banyak bagian telapak tangan, telapak belakang, dan di bawahnya. kita dapat melihat variasi warna yang berbeda di area ini, tetapi rona untuk semua wilayah ini tidak banyak berbeda, sehingga nilai rona dapat berguna dalam segmentasi tangan.
Tidak ada yang saya ketahui yang secara khusus lebih baik dengan HSV dibandingkan dengan YUV atau LAB yang akan membuatnya lebih baik untuk ekstraksi fitur dan invariansi pencahayaan atau visualisasi. Saya kira HSV adalah yang lebih umum digunakan karena konvensi dan kontinuitas: lebih mudah untuk membandingkan hasil dan berkomunikasi satu sama lain jika Anda berdua menggunakan ruang warna yang sama.
Dengan itu, HSV (tidak seperti RGB) digunakan dalam visi komputer karena 2 alasan yang saya tahu:
Seperti yang telah disebutkan, bermanfaat untuk memisahkan luma dari kroma. Luma sangat bervariasi dalam adegan berdasarkan jumlah cahaya yang jatuh pada objek. Chroma, di sisi lain, berkorelasi lebih baik dengan sifat intrinsik objek, dan untuk gambar yang benar-benar putih seimbang lebih atau kurang invarian.
Namun, saya ingin menambahkan bahwa HSV, HSL, atau bahkan ruang warna dengan parametrization kutub dari bidang chroma, adalah pilihan yang buruk untuk tujuan itu. Itu karena mereka memperkenalkan singularitas pada garis abu-abu (rona mana yang abu-abu?), Membuat mereka sangat sensitif terhadap kebisingan dan keseimbangan putih. Selain itu membandingkan antara dua warna dalam sistem koordinat kutub tidak semudah itu. Juga perhatikan bahwa baik nilai HSV maupun cahaya di HSL tidak sesuai dengan persepsi cahaya manusia atau ukuran energi fisik lainnya.
Ada banyak ruang warna linier yang memberikan pemisahan luma-chroma yang sama sambil mempertahankan linearitas (YCbCr, YUV) atau memodelkan penglihatan manusia dengan benar (LUV, LAB). Dengan itu Anda dapat membandingkan dua warna menggunakan norma L2 Euclidean pada kromatisitasnya, menghasilkan algoritma yang lebih kuat secara keseluruhan.
Mengapa HSV / HSL sering digunakan? Sulit memberikan jawaban yang objektif. Dari pengalaman saya itu sebagian besar disebabkan oleh ketidaktahuan dan ketersediaan rutinitas konversi RGB-> HSV. Harus bekerja dengan kode yang penulisnya tidak memahami koreksi gamma, apalagi ruang warna yang berbeda. Terlihat kode yang mengkonversi RGB ke HSV kemudian mengelompokkan gambar berdasarkan rona, mengabaikan fakta bahwa itu adalah kuantitas modular. Saya pikir kita bisa sepakat bahwa itu bukan keputusan sadar yang didukung oleh alasan apa pun.