Bagaimana Anda menghindari pita warna menonjol dalam gradien?


13

Jadi ini visualisasi yang lebih ilmiah daripada desain grafis, tetapi saya pikir teorinya sama. Dalam colormaps yang digunakan untuk memvisualisasikan data, sering ada pita warna yang menonjol ketika mereka tidak seharusnya. Saya percaya mereka adalah bentuk band Mach ?

Sebagai contoh, saya menggunakan bipolar colormap ini dan menghasilkan gambar seperti ini:

masukkan deskripsi gambar di sini

Ini hampir seperti cincin oranye neon sekitar 0,2, dan yang serupa dengan biru sekitar -0,2. Berikut adalah plot komponen RGB, dan perhitungan pencahayaan relatif berwarna hitam:

masukkan deskripsi gambar di sini

Saya secara manual men-tweak untuk mencoba menyingkirkan band-band, dan agak berhasil, tetapi saya tidak benar-benar memahami teori di baliknya:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Lebih baik, tapi saya masih melihat band di dalamnya.

Sebagai contoh lain, untuk colormap panas, saya pikir mungkin saya harus membuat linier plot luminance untuk mencegah banding, tetapi tidak benar-benar berfungsi:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Pita kuning dan oranye masih ada di sana, hanya bergerak dan sedikit ternoda. Jadi diskontinuitas dalam plot luminance bukanlah penyebab masalah.

Bagaimana cara saya mentransisikan warna dengan mulus tanpa garis melintang? Apakah ada aturan untuk membuat kurva halus melalui ruang warna Lab atau sesuatu? ( Sunting: Ooh, saya menemukan contoh untuk ini : "Skala warna dihitung dengan menggunakan ruang warna L a b *. Ini mengikuti jalan seragam di sepanjang arah L *, dan mengikuti jalur setengah lingkaran di a * -b * pesawat.")

Pembaruan: Berikut adalah sebidang colormap ini dalam kubus RGB, menunjukkan sudut tajam yang dibicarakan pengguna568458:

masukkan deskripsi gambar di sini


1
perhatikan, saya membuat komentar tentang band perseptual (di bawah), tetapi ini sebelum saya benar-benar melihat pertanyaan. Saya melihat bahwa Anda berbicara tentang bagaimana dua rentang warna tertentu menonjol.
horatio

1
Diagram yang bagus! Itulah tepatnya yang saya maksud dengan sudut tajam, saya membayangkan kubus warna seperti ini atau seperti ini . Saya telah menambahkan ilustrasi kasar tapi semoga bermanfaat tentang hal yang saya maksudkan untuk jawaban saya. (tentu saja ada juga pasangan sudut tajam kedua di titik-titik di mana jalur merah menambahkan hijau untuk mencapai putih, dan di mana jalur biru menambahkan merah untuk mencapai putih)
user56reinstatemonica8

Jawaban:


6

Jangan lupa itu, bahkan jika Anda bekerja dengan nilai warna LAB, nilai RGB harus menjadi output untuk ditampilkan di layar. Pada titik tertentu, ia harus memberi tahu piksel layar merah, hijau, dan biru tentang apa yang harus dilakukan.

Lihatlah dalam istilah RGB, dan penyebab band sebenarnya cukup sederhana.

Ambil pemilih warna dan lihat gradien, dan Anda akan melihat bahwa band-band tersebut berada di sekitar titik di mana sifat gradien berubah:

  • Di merah, itu di sekitar tempat itu berubah dari lancar meningkatkan R di RGB untuk menambahkan G menjadi kuning - sekitar # FF0000 ke # FF2500
  • Dengan warna biru, ini berubah dari peningkatan B ke RGB dengan lancar hingga menambahkan G menjadi cyan - sekitar # 0000FF hingga # 0025FF

Dan juga dengan plot bagian bawah, menambahkan kuning ke putih: mereka pada dasarnya tiga gradien bergabung bersama. Menggunakan gradien merah sebagai contoh:

  • itu # 000000 ke # FF0000 (meningkatkan Brightness dalam hal HSB, meningkatkan Red channel di RGB)
  • lalu # FF0000 ke # FFFF00 (mengubah Hue dalam istilah HSB, meningkatkan saluran Hijau di RGB)
  • lalu # FFFF00 ke #FFFFFF (mengubah Saturasi dalam istilah HSB, meningkatkan saluran Biru di RGB)

masukkan deskripsi gambar di sini

Jadi selalu akan ada gabungan yang terlihat, jika memang itu yang diatur. Sebagai aturan umum, di mana akurasi dan linearitas adalah tujuan utama, yang terbaik adalah menjaga gradien sederhana, memvariasikan satu fitur secara terus-menerus (kecuali jika Anda ingin penjaluran, misalnya pada beberapa jenis pemindaian otak).


Yang mengatakan , jika Anda bertekad untuk menjalankan melalui spektrum yang lebih luas (itu terlihat bagus), saya akan melihat ke salah satu mulai menambahkan saluran kedua sebelum yang pertama selesai, membentuk bagian menjembatani antara gradien, atau memiliki sedikit kurva bentuk S terbalik ke tingkat di mana saluran kedua ditambahkan (mungkin keduanya).

Jadi alih-alih:

  • 000000 hingga # FF0000, 100% hitam hingga 100% merah

  • FF0000 hingga # FFFF00, 100% merah hingga 100% kuning

  • FFFF00 hingga #FFFFFF, 100% kuning hingga 100% putih

... mungkin saja (tebak saja bagian atas kepala saya, perlu penyesuaian):

  • 000000 hingga # E90000, 100% hitam menjadi merah cerah

  • E90000 hingga # FF2500, (JEMBATAN PENDEK) merah cerah (gelap) hingga merah terang (sedikit oranye)

  • FF2500 ke # FFE900, merah terang (sedikit oranye) hingga kuning cerah (sedikit oranye)

  • FFE900 hingga # FFFF25, (SHORT BRIDGE) kuning cerah (sedikit oranye) hingga kuning cerah (terang)

  • FFFF25 hingga #FFFFFF, kuning cerah (terang) hingga 100% putih

... lalu sesuaikan kurva masing-masing bagian sesuai selera :-)


Sunting: Ini sebuah demonstrasi dari saran 'memotong sudut'. Itu tidak sempurna - itu cukup tidak dimurnikan, hanya sesuatu yang saya kumpulkan dengan mata dalam beberapa menit menggunakan alat campuran Illustrator (benda yang tidak diblender di bagian bawah untuk menunjukkan titik warna). Setiap segmen dari gradien antara setiap titik warna adalah 100% linier, sedangkan Anda mungkin menginginkan sesuatu yang lebih bulat - dan sebagai hasilnya, jika Anda perhatikan dengan teliti, Anda dapat melihat band.

Hasil bervariasi di antara monitor: pada monitor 'baik' saya, halus; pada monitor 'buruk' yang saya gunakan untuk memeriksa ketahanan gambar web (di mana band asli tidak menunjukkan dengan sangat jelas), jeruk selalu tampak tenang membuat ares merah dan kuning tampak lebih terang daripada oranye bergabung, terlalu menekankan merah dan area kuning - tetapi Anda masih dapat melihat bahwa 'tepi' dari band asli sebagian besar telah hilang.

Either way, dibandingkan dengan gradien asli, Anda dapat dengan jelas melihat perbedaannya. (Adapun matematika di balik ini - tidak tahu, saya bukan ahli matematika, tapi mudah-mudahan ini membantu mengidentifikasi masalah dan solusi)

masukkan deskripsi gambar di sini

Keuntungan lainnya adalah, Anda bebas menggunakan lebih hitam> satu saluran transisi lebih jelas.


Atau ide yang sama pada kubus warna RGB (maafkan kekasarannya, itu dimaksudkan untuk menunjukkan tidak akurat ...):

masukkan deskripsi gambar di sini

Ini menunjukkan mungkin lebih jelas apa yang saya maksud ketika saya mengatakan contoh gradien dapat ditingkatkan dengan membuat transisi dari segmen utama ke segmen cutting-edge lebih lancar daripada angular.


jadi tldr; hindari nilai 255 untuk saluran R, G, B (?)
horatio

2
@horatio not really no, lebih seperti tldr; hindari sudut tajam di antara bagian gradien
user56reinstatemonica8

Itu semua tergantung pada ruang warna yang digunakan untuk output - Anda akan melihat band yang sama dalam desain cetak jika Anda memiliki gradien yang pergi misalnya dari putih murni ke magenta murni ke violet murni (100% magenta dan cyan) ke hitam murni ( terbuat dari 100% C, m, k)
user56reinstatemonica8

Lebih seperti "hindari sudut tajam saat bergerak melalui ruang HSB"? Tetapi jika saya mencoba melakukan interpolasi kubik atau sesuatu, saya akhirnya keluar dari ruang HSB, yang kemudian klip nilai-nilai dan menyebabkan hal-hal buruk pula. Dalam contoh kedua saya, saya agak melakukan apa yang Anda rekomendasikan tentang menambahkan bagian bridging, tetapi tidak berfungsi dengan baik. Itu masih terlihat seperti gumpalan kuning di dalam gumpalan oranye kemerahan dengan lingkaran cahaya di sekitarnya, alih-alih perubahan warna yang lancar.
endolith

1
Berikut adalah upaya menggunakan kurva bezier sebagai gantinya: flic.kr/p/e1bcFf flic.kr/p/e15wik
endolith

1

Mungkin ini bisa membantu Anda, itu bekerja untuk saya, tetapi saya tidak tahu cara manual untuk mencapainya.

http://nomorebanding.com/


Itu bukan jenis ikatan yang sama, dan ragu-ragu tidak mungkin dalam konteks ini. Saya kira saya berbicara lebih banyak tentang band perseptual dalam apa yang seharusnya menjadi gradien halus, sementara tautan Anda adalah tentang penandaan karena kuantisasi warna?
endolith

1
pita persepsi berasal dari kuantisasi warna. Ini adalah masalah dengan representasi 8-bit per piksel. Saya tidak tahu apa-apa tentang plug-in, tetapi menggunakan 16bpp RGB ketika memproduksi gradien dan kemudian down-sampling ke 8bpp akan menghasilkan hasil yang jauh lebih baik dengan jauh lebih sedikit pita daripada membangunnya di 8bpp.
horatio

@horatio: Tidak, pita berasal dari kurva yang mengambil sudut tajam saat bergerak melalui ruang warna perseptual. Khususnya, dalam contoh saya, kroma yang mencapai puncak di sudut-sudut itu.
endolith
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.