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
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.
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:
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.)





Tidak ada komentar:
Posting Komentar