Rabu, 29 April 2020

Anti-Aliasing

Anti-aliasing 


Anti-aliasing
digunakan dalam fotografi digital , grafik komputer , audio digital , dan banyak aplikasi lainnya. Anti-aliasing berarti melepaskan komponen sinyal yang memiliki frekuensi lebih tinggi daripada yang dapat diselesaikan dengan baik oleh perangkat perekaman (atau pengambilan sampel). Penghapusan ini dilakukan sebelum (kembali) pengambilan sampel pada resolusi yang lebih rendah. Ketika pengambilan sampel dilakukan tanpa melepaskan bagian sinyal ini, hal itu menyebabkan artefak yang tidak diinginkan seperti kebisingan hitam putih di dekat bagian atas Gambar 1 (a) di bawah ini . Dalam akuisisi sinyal dan audio, anti-aliasing sering dilakukan dengan menggunakan filter anti-aliasing analog untuk menghapus komponen out-of-band dari sinyal input sebelum pengambilan sampel dengan konverter analog-ke-digital . Dalam fotografi digital, filter anti-aliasing optik yang terbuat dari bahan birefringent menghaluskan sinyal dalam domain optik spasial. Filter anti-aliasing pada dasarnya mengaburkan gambar sedikit untuk mengurangi resolusi ke atau di bawah yang dapat dicapai oleh sensor digital (semakin besar pixel pitch , semakin rendah resolusi yang dapat dicapai pada tingkat sensor).

Contoh

An aliased picture of a checker-board from an angle looks random in the distance, and has jagged lines in the foreground.
(a)
The same picture, anti-aliased, blurs into a grey in the distance, and has smoother lines in the foreground.
(b)
There are different algorithms for anti-aliasing, creating a slightly different appearance
(c)
Gambar 1
Dalam grafik komputer, anti-aliasing meningkatkan penampilan ujung-ujung poligon "bergerigi", atau " jaggies ", sehingga mereka dihaluskan di layar. Namun, itu menimbulkan biaya kinerja untuk kartu grafis dan menggunakan lebih banyak memori video . Tingkat anti-aliasing menentukan seberapa halus tepi poligon (dan berapa banyak memori video yang dikonsumsi).
Gambar 1 (a) menggambarkan distorsi visual yang terjadi ketika anti-aliasing tidak digunakan. Di dekat bagian atas gambar, di mana papan checker sangat kecil, gambar keduanya sulit dikenali dan tidak menarik secara estetika. Sebaliknya, Gambar 1 (b) menunjukkan versi adegan anti-alias. Papan checker di dekat bagian atas menyatu menjadi abu-abu, yang biasanya merupakan efek yang diinginkan ketika resolusi tidak cukup untuk menampilkan detail. Bahkan di dekat bagian bawah gambar, ujung-ujungnya tampak jauh lebih halus pada gambar anti-alias. Gambar 1 (c) menunjukkan algoritma anti-aliasing lain, berdasarkan filter sinc , yang dianggap lebih baik daripada algoritma yang digunakan dalam gambar 1 (b).



     Gambar 2

Gambar 2 menunjukkan bagian yang diperbesar ( interpolasi menggunakan algoritma tetangga terdekat ) dari Gambar 1 (a) (kiri) dan 1 (c) (kanan) untuk perbandingan.
 Pada Gambar 1 (c), anti-aliasing telah menginterpolasi kecerahan piksel pada batas untuk menghasilkan piksel abu-abu karena ruang tersebut ditempati oleh ubin hitam dan putih. Ini membantu membuat Gambar 1 (c) tampak jauh lebih halus daripada Gambar 1 (a) pada perbesaran asli.
Anti-aliased-diamonds.png
Kiri atas: versi alias dari bentuk sederhana; kanan atas: versi anti-alias dengan bentuk yang sama; kanan: Grafik anti-alias dengan pembesaran 5x
Anti-aliased diamond enlarged.png
Gambar 3
Dalam Gambar 3, anti-aliasing digunakan untuk memadukan piksel batas dari sampel grafis; ini mengurangi efek estetis dari batas tajam, seperti langkah yang muncul dalam grafik alias di sebelah kiri. Anti-aliasing sering diterapkan dalam rendering teks pada layar komputer, untuk menyarankan kontur halus yang lebih baik meniru penampilan teks yang dihasilkan oleh pencetakan tinta-dan-kertas konvensional.
Terutama dengan font yang ditampilkan pada layar LCD biasa, adalah umum untuk menggunakan teknik rendering subpixel seperti ClearType . Render sub-pixel membutuhkan filter anti-aliasing warna-seimbang khusus untuk mengubah distorsi warna yang parah menjadi pinggiran warna yang nyaris tidak terlihat. Hasil yang setara dapat diperoleh dengan membuat masing-masing sub-pixel dapat dialamatkan seolah-olah mereka adalah piksel penuh, dan memasok filter anti-aliasing berbasis perangkat keras seperti yang dilakukan pada pengontrol tampilan laptop OLPC XO-1 . Geometri piksel mempengaruhi semua ini, apakah pengalamatan anti-aliasing dan sub-piksel dilakukan dalam perangkat lunak atau perangkat keras.

Pendekatan paling sederhana untuk anti-aliasing



Pendekatan paling dasar untuk anti-aliasing piksel adalah menentukan berapa persentase piksel yang ditempati oleh wilayah tertentu dalam grafik vektor - dalam hal ini persegi berukuran piksel, mungkin ditransformasikan lebih dari beberapa piksel - dan menggunakan persentase tersebut sebagai warna. .
Plot yang sangat mendasar dari satu titik anti-alias putih-hitam yang menggunakan metode itu dapat dilakukan sebagai berikut:
  def plot_antialiased_point ( x : float , y : float ):
      untuk roundedx di lantai ( x ) hingga ceil ( x ):
          untuk bundaran di lantai ( y ) hingga langit - langit ( y ):
              persen_x = 1 - abs ( x - roundedx )
              persen_y = 1 - abs ( y - roundedy )
              persen = persen_x * persen_y
              draw_pixel ( koordinat = ( roundedx , roundedy ), warna = persen ( kisaran 0 - 1 ) )
Metode ini umumnya paling cocok untuk grafik sederhana, seperti garis atau kurva dasar, dan aplikasi yang seharusnya harus mengubah koordinat absolut ke koordinat yang dibatasi piksel, seperti grafik 3-D. Ini adalah fungsi yang cukup cepat, tetapi relatif berkualitas rendah, dan semakin lambat seiring dengan meningkatnya kompleksitas bentuk. Untuk keperluan yang membutuhkan grafik berkualitas tinggi atau bentuk vektor yang sangat kompleks, ini mungkin bukan pendekatan terbaik.
Catatan: Rutin DrawPixel atas tidak dapat secara buta mengatur nilai warna ke persentase yang dihitung. Itu harus menambahkan nilai baru ke nilai yang ada di lokasi itu hingga maksimum 1. Jika tidak, kecerahan setiap piksel akan sama dengan nilai paling gelap yang dihitung dalam waktu untuk lokasi yang menghasilkan hasil yang sangat buruk. Misalnya, jika satu titik menetapkan tingkat kecerahan 0,90 untuk piksel yang diberikan dan titik lain yang dihitung kemudian hampir tidak menyentuh piksel itu dan memiliki kecerahan 0,05, nilai akhir yang ditetapkan untuk piksel tersebut harus 0,95, bukan 0,05.
Untuk bentuk yang lebih canggih, algoritme dapat digeneralisasi sebagai render bentuk ke kisi pixel dengan resolusi lebih tinggi daripada permukaan tampilan target (biasanya kelipatan yang merupakan kekuatan 2 untuk mengurangi distorsi), kemudian menggunakan interpolasi bikubik untuk menentukan intensitas rata-rata setiap piksel nyata pada permukaan tampilan.

Pendekatan pemrosesan sinyal untuk anti-aliasing



Dalam pendekatan ini, gambar ideal dianggap sebagai sinyal .
 Gambar yang ditampilkan di layar diambil sebagai sampel, pada setiap posisi piksel ( x, y ), dari versi sinyal yang difilter. Idealnya, orang akan mengerti bagaimana otak manusia akan memproses sinyal asli, dan memberikan gambar di layar yang akan menghasilkan respons yang paling mirip oleh otak.
Alat analitik yang paling banyak diterima untuk masalah tersebut adalah transformasi Fourier ; ini menguraikan sinyal menjadi fungsi dasar dari frekuensi yang berbeda, yang dikenal sebagai komponen frekuensi, dan memberi kita amplitudo dari setiap komponen frekuensi dalam sinyal. Gelombangnya berbentuk:
 \ \cos(2j\pi x)\cos(2k\pi y)
di mana j dan k adalah bilangan bulat non-negatif yang berubah-ubah. Ada juga komponen frekuensi yang melibatkan fungsi sinus dalam satu atau kedua dimensi, tetapi untuk tujuan diskusi ini, kosinus akan cukup.
Angka-angka j dan k bersama-sama adalah frekuensi komponen: j adalah frekuensi dalam arah x , dan k adalah frekuensi dalam arah y .
Tujuan dari filter anti-aliasing adalah untuk sangat mengurangi frekuensi di atas batas tertentu, yang dikenal sebagai frekuensi Nyquist , sehingga sinyal akan secara akurat diwakili oleh sampelnya, atau hampir seperti itu, sesuai dengan teorema pengambilan sampel ; ada banyak pilihan berbeda dari algoritma terperinci, dengan fungsi transfer filter yang berbeda. Pengetahuan terkini tentang persepsi visual manusia tidak memadai, secara umum, untuk mengatakan pendekatan apa yang akan terlihat terbaik.

Pertimbangan dua dimensi




Diskusi sebelumnya mengasumsikan bahwa pengambilan sampel mesh persegi panjang adalah bagian dominan dari masalah.
 Filter biasanya dianggap optimal tidak simetris secara rotasi, seperti yang ditunjukkan pada gambar pertama ini; ini karena data sampel pada kisi persegi , tidak menggunakan gambar kontinu. Pola pengambilan sampel ini adalah pembenaran untuk melakukan pemrosesan sinyal di sepanjang setiap sumbu, seperti yang secara tradisional dilakukan pada data satu dimensi. Resampling Lanczos didasarkan pada konvolusi data dengan representasi diskrit dari fungsi sinc.
Jika resolusi tidak dibatasi oleh laju sampling persegi panjang baik dari sumber atau gambar target, maka seseorang idealnya harus menggunakan filter simetris rotasional atau fungsi interpolasi, seolah-olah data adalah fungsi dua dimensi dari kontinu x dan y. Fungsi sinc dari jari-jari memiliki ekor yang terlalu panjang untuk membuat filter yang baik (bahkan tidak dapat diintegrasikan dengan persegi ). Analog yang lebih sesuai dengan sinc satu dimensi adalah amplitudo cakram dua dimensi Airy , transformasi Fourier 2D dari wilayah melingkar dalam ruang frekuensi 2D, sebagai lawan dari wilayah kuadrat.
Gaussian plus fungsi diferensial
Orang mungkin mempertimbangkan Gaussian plus turunan kedua yang cukup untuk meratakan bagian atas (dalam domain frekuensi) atau mempertajamnya (dalam domain spasial), seperti yang ditunjukkan. Fungsi berdasarkan fungsi Gaussian adalah pilihan alami, karena konvolusi dengan Gaussian memberikan Gaussian lain apakah diterapkan pada x dan y atau ke jari-jari. Mirip dengan wavelet, salah satu propertinya adalah bahwa ia berada di tengah antara dilokalisasi dalam konfigurasi (x dan y) dan dalam representasi spektral (j dan k). Sebagai fungsi interpolasi, Gaussian sendiri tampaknya terlalu tersebar untuk mempertahankan detail maksimum yang mungkin, dan dengan demikian turunan kedua ditambahkan.
Sebagai contoh, ketika mencetak foto negatif dengan kemampuan pemrosesan yang banyak dan pada printer dengan pola heksagonal, tidak ada alasan untuk menggunakan interpolasi fungsi sinc. Interpolasi semacam itu akan memperlakukan garis diagonal secara berbeda dari garis horizontal dan vertikal, yang seperti bentuk aliasing yang lemah.

Praktis perkiraan waktu-nyata anti-aliasing



Hanya ada beberapa primitif yang digunakan pada tingkat terendah dalam mesin rendering waktu-nyata (baik perangkat lunak atau perangkat keras yang dipercepat).
 Ini termasuk "titik", "garis" dan "segitiga". Jika seseorang ingin menggambar primitif tersebut dalam warna putih dengan latar belakang hitam, dimungkinkan untuk merancang primitif tersebut untuk memiliki tepi fuzzy, mencapai semacam anti-aliasing. Namun, pendekatan ini memiliki kesulitan berurusan dengan primitif yang berdekatan (seperti segitiga yang berbagi keunggulan).
Untuk memperkirakan algoritma rata-rata yang seragam, seseorang dapat menggunakan buffer tambahan untuk data sub-piksel. Pendekatan awal (dan paling tidak membutuhkan banyak memori) menggunakan 16 bit tambahan per piksel, dalam kisi 4 × 4. Jika seseorang membuat primitif dalam urutan yang hati-hati, seperti front-to-back, dimungkinkan untuk membuat gambar yang masuk akal.
Karena ini mensyaratkan bahwa primitif dalam urutan tertentu, dan karenanya berinteraksi buruk dengan antarmuka pemrograman aplikasi seperti OpenGL , metode terbaru hanya memiliki dua atau lebih sub-piksel penuh per piksel, termasuk informasi warna penuh untuk setiap sub-piksel. Beberapa informasi dapat dibagi antara sub-piksel (seperti Z-buffer.)


Contoh gambar dengan aliasing pseudo-acak ekstrem


Karena fraktal memiliki detail tak terbatas dan tidak ada noise selain dari kesalahan pembulatan aritmatika, fraktal menggambarkan aliasing lebih jelas daripada foto atau data terukur lainnya. Waktu melarikan diri , yang dikonversi menjadi warna di pusat piksel yang tepat, menuju tak terhingga di batas himpunan, sehingga warna dari pusat di dekat batas tidak dapat diprediksi, karena alias. Contoh ini memiliki tepian sekitar setengah dari pikselnya, sehingga menunjukkan banyak alias. Gambar pertama diunggah pada laju sampling aslinya. (Karena sebagian besar perangkat lunak anti-alias modern, orang mungkin harus mengunduh versi ukuran penuh untuk melihat semua alias.) Gambar kedua dihitung pada lima kali laju sampling dan sampel-turun dengan anti-alias. Dengan asumsi bahwa seseorang akan benar-benar menyukai sesuatu seperti warna rata-rata di atas setiap piksel, yang ini semakin dekat. Jelas lebih teratur daripada yang pertama.
Untuk membandingkan gambar-gambar ini dengan benar, diperlukan melihatnya dalam skala penuh.
Kebetulan, dalam hal ini, ada informasi tambahan yang dapat digunakan. Dengan menghitung ulang dengan algoritme "penaksir jarak", titik diidentifikasi yang sangat dekat dengan tepi set, sehingga detail halus yang tidak biasa dipisahkan dari waktu melarikan diri yang berubah dengan cepat di dekat tepi set. Warna-warna yang berasal dari titik-titik yang dihitung ini telah diidentifikasi sebagai piksel yang tidak mewakili mereka. Set berubah lebih cepat di sana, sehingga sampel titik tunggal kurang mewakili keseluruhan piksel. Poin-poin itu diganti, pada gambar ketiga, dengan menyisipkan titik-titik di sekitar mereka. Ini mengurangi kebisingan gambar tetapi memiliki efek samping mencerahkan warna. Jadi gambar ini tidak persis sama yang akan diperoleh dengan satu set poin yang dihitung lebih besar. Untuk menunjukkan apa yang dibuang, poin yang ditolak, dicampur menjadi latar belakang abu-abu, ditunjukkan pada gambar keempat.
Akhirnya, "Turbin Budding" sangat teratur sehingga aliasing sistematis (Moiré) dapat dengan jelas terlihat di dekat "poros turbin" utama ketika dirampingkan dengan mengambil piksel terdekat. Aliasing pada gambar pertama tampak acak karena berasal dari semua level detail, di bawah ukuran piksel. Ketika aliasing level bawah ditekan, untuk membuat gambar ketiga dan kemudian sampel-down sekali lagi, tanpa anti-aliasing, untuk membuat gambar kelima, urutan skala gambar ketiga muncul sebagai aliasing sistematis di kelima. gambar.
Pengambilan sampel murni pada suatu gambar memiliki efek berikut (disarankan untuk melihat pada skala penuh):

anti-aliasing Super pengambilan sampel / adegan penuh


Super sampling anti-aliasing (SSAA) ,  juga disebut full-scene anti-aliasing (FSAA), digunakan untuk menghindari aliasing (atau " jaggies ") pada gambar layar penuh. SSAA adalah jenis anti-aliasing pertama yang tersedia dengan kartu video awal. Tetapi karena biaya komputasi yang luar biasa dan munculnya dukungan multisample anti-aliasing (MSAA) pada GPU, itu tidak lagi banyak digunakan dalam aplikasi waktu nyata. MSAA memberikan kualitas grafis yang sedikit lebih rendah, tetapi juga penghematan daya komputasi yang luar biasa.
Gambar yang dihasilkan dari SSAA mungkin tampak lebih lembut, dan juga harus tampak lebih realistis. Namun, sementara berguna untuk gambar seperti foto, pendekatan anti-aliasing sederhana (seperti super-sampling dan kemudian rata-rata) sebenarnya dapat memperburuk penampilan beberapa jenis garis seni atau diagram (membuat gambar tampak kabur), terutama di mana sebagian besar garis horisontal atau vertikal. Dalam kasus ini, langkah pemasangan grid sebelumnya mungkin berguna (lihat memberi petunjuk ).
Secara umum, super-sampling adalah teknik pengumpulan poin data pada resolusi yang lebih besar (biasanya dengan kekuatan dua) daripada resolusi data akhir. Poin-poin data ini kemudian digabungkan (sampel-turun) ke resolusi yang diinginkan, seringkali hanya dengan rata-rata sederhana. Poin data gabungan memiliki artefak aliasing yang kurang terlihat (atau pola moiré ).
Anti-aliasing adegan penuh dengan super-sampling biasanya berarti bahwa setiap frame penuh diberikan pada resolusi tampilan ganda, 2x lipat atau empat kali lipat, dan kemudian sampel-turun untuk mencocokkan resolusi layar. Jadi, 2x FSAA akan membuat 4 piksel super-sampel untuk setiap piksel tunggal dari setiap frame. Rendering pada resolusi yang lebih besar akan menghasilkan hasil yang lebih baik; namun, dibutuhkan lebih banyak daya prosesor, yang dapat menurunkan kinerja dan kecepatan frame. Kadang-kadang FSAA diimplementasikan dalam perangkat keras sedemikian rupa sehingga aplikasi grafis tidak menyadari gambar sedang super-sampel dan kemudian turun-sampel sebelum ditampilkan.

anti-aliasing berbasis objek


Sistem rendering grafis membuat gambar berdasarkan objek yang dibangun dari primitif poligon; efek aliasing pada gambar dapat dikurangi dengan menerapkan skema anti-aliasing hanya pada area gambar yang mewakili tepi siluet objek. Tepi siluet anti-aliased dengan menciptakan anti-aliasing primitif yang bervariasi dalam opacity. Primitif anti-aliasing ini bergabung dengan tepi siluet , dan membuat wilayah pada gambar di mana objek tampak menyatu dengan latar belakang. Metode ini memiliki beberapa keunggulan penting dibandingkan metode klasik berdasarkan buffer akumulasi klarifikasi diperlukan ] karena menghasilkan anti-aliasing adegan penuh hanya dalam dua lintasan dan tidak memerlukan penggunaan memori tambahan yang diperlukan oleh buffer akumulasi. Anti-aliasing berbasis objek pertama kali dikembangkan di Silicon Graphics untuk stasiun kerja Indy mereka.



kompresi anti-aliasing dan gamma


Gambar digital biasanya disimpan dalam format terkompresi gamma , tetapi sebagian besar filter anti-aliasing optik bersifat linier. Jadi, untuk mengambil sampel gambar dengan cara yang cocok dengan kekaburan optik, orang pertama-tama harus mengonversinya menjadi format linier, kemudian menerapkan filter anti-aliasing, dan akhirnya mengubahnya kembali ke format terkompresi gamma. [5] Menggunakan aritmatika linier pada gambar yang dikompresi gamma menghasilkan nilai yang sedikit berbeda dari filter ideal. Kesalahan ini lebih besar ketika berhadapan dengan area kontras tinggi, menyebabkan area kontras tinggi menjadi lebih redup: detail cerah (seperti kumis kucing) menjadi lebih tipis secara visual, dan detail gelap (seperti cabang-cabang pohon) menjadi lebih tebal, relatif terhadap anti optik secara optik. gambar alias. [6] Setiap piksel terdistorsi secara individual, artinya garis besar menjadi tidak mulus setelah anti-aliasing. Karena konversi ke dan dari format linier sangat memperlambat proses, dan karena perbedaannya biasanya tidak kentara, hampir semua perangkat lunak pengeditan gambar , termasuk Final Cut Pro , Adobe Photoshop dan GIMP , memproses gambar dalam domain yang dikompresi gamma.
Sebagian besar GPU modern mendukung penyimpanan tekstur dalam memori dalam format sRGB , dan dapat melakukan transformasi ke ruang linier dan kembali secara transparan, dengan dasarnya tidak ada kerugian dalam kinerja.

Tidak ada komentar:

Posting Komentar