Mengapa kita sering menggunakan ruang warna HSV dalam penglihatan dan pemrosesan gambar?

64

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?

bubur
sumber
3
Ini pertanyaan yang sangat bagus. Menurut pendapat saya, itu akan mendapat manfaat dari sedikit lebih rinci: apa itu HSV, apa itu RGB. Karena sebagian besar jawaban membandingkan HSV ke RGB, judul dapat diulang untuk membandingkan dua ruang warna ini.
PhilMacKay
2
Pertanyaan bagus lainnya mungkin, "Mengapa HSV digunakan di semua tempat alih-alih HSL?"
posfan12

Jawaban:

60

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 rgb2hsvdan hsv2rgb.

Dima
sumber
42

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 pahami lebih baik komponen yang digunakan untuk mewakili warna di HSV colorspace, dan perbarui pengetahuan Anda tentang RGB
  • 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 :)

Penelope
sumber
1
Jika bayangan, seharusnya hanya mengubah kecerahan - bukan saturasi.
Andrey Rubshtein
@Andrey seperti yang saya katakan, saya tidak bekerja pada pendekatan berbasis warna sendiri, tetapi saya dapat berspekulasi bahwa jika bukan hanya bayangan - mungkin beberapa pencahayaan tidak langsung dari lingkungan atau sesuatu yang serupa juga memainkan peran.
penelope
1
Kamu benar. Namun, dalam kasus pencahayaan tidak langsung, Hue mungkin berubah juga.
Andrey Rubshtein
1
@Andrey Oleh karena itu kata-kata saya: "lebih mungkin", "mirip", "terutama pengaruh", ... Lagi pula, saya tidak menjelaskan HSV, hanya memberikan beberapa contoh dan tebakan berdasarkan pengalaman. Dan, cara terbaik untuk memilih ruang warna yang paling cocok untuk aplikasi apa pun adalah bermain-main dengan basis data gambar Anda dan ruang warna yang berbeda
penelope
3
Apa pun yang berada dalam bayangan dan karenanya tidak diterangi oleh sumber cahaya primer (matahari) sedang dinyalakan oleh sumber cahaya sekunder - langit, yang merupakan cahaya raksasa, terang, dan sangat biru. Untuk mata manusia, merah masih terlihat merah karena mata kami melakukan pengukuran warna relatif alih-alih warna absolut, itulah mengapa foto-foto non-flash di dalam ruangan Anda terlihat lebih kuning daripada yang Anda pikir seharusnya. Dan saya sangat setuju untuk bermain-main dengan database gambar yang sebenarnya.
John Robertson
8

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.

nimrodm
sumber
7

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!

heltonbiker
sumber
2
Saya tidak setuju. Ada tiga domain, bukan dua: manusia, komputer, dan fisika. Model RGB berasal dari mata manusia, yang memiliki tiga reseptor warna.
MSalters
@Malters Saya pikir kita berbicara tentang hal yang sama (walaupun mungkin saya belum membuat diri saya sepenuhnya jelas). Tampilan RGB dibuat agar sesuai dengan sistem persepsi warna kami. Mereka memiliki komputer counter-part, (R, G, B) "koordinat". Karena koordinat ini memetakan implementasi daripada sifat fisik, "sifat asli" warna, mereka tidak cocok untuk melakukan beberapa pemrosesan matematis, misalnya interpolasi gradien linier perseptual, koreksi warna, kecerahan dan op saturasi, dll.
heltonbiker
2

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.

Matlabfungsi untuk mengkonversi gambar RGB ke pesawat HSV adalah rgb2hsv('/inputimage_name').

Nish
sumber
1

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.

crack_addict
sumber
1

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:

  1. Visualisasi . Setiap kali Anda memiliki informasi arah yang padat di atas gambar, maka HSV adalah ruang warna yang baik untuk visualisasi. Alih-alih memplot vektor kecil di atas gambar (mereka akan mengacaukan segalanya), Anda dapat membuat plot warna dengan HSV, dengan meletakkan vektor arah dipetakan ke H (sudut vektor) dan S (besarnya vektor). Ini meninggalkan komponen Value, yang dapat diatur dalam berbagai cara tergantung pada apa yang ingin Anda capai. Lihat contoh di bawah ini dari dataset aliran optik middlebury. HSV digunakan untuk menampilkan arah dengan padat.

Contoh dari middlebury DB pada aliran optik

  1. Ekstraksi fitur dan invarian pencahayaan , seperti yang dijelaskan dalam jawaban lain.
Stefan Karlsson
sumber
0

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.

ybungalobill
sumber
-1

Model warna HSV lebih berkorelasi dengan bagaimana manusia melihat objek berwarna, dibandingkan dengan RGB, YUV, Lab dll.

Kita melihat apa warna objeknya (Hue), berapa jenuhnya (Saturasi) dan berapa banyak cahaya putih yang jatuh di atasnya (Intesitas).

Deepak
sumber