Yol izlemede neden bir çadır filtresi kullanmalıyım?


12

99 satır C yolu izleyicisi Smallpt , oluşturmak istediği her piksel için 2x2 alt piksel ızgarası oluşturur ve bunları birleştirmek için bir çadır filtresi yapar.

Burada kodu açıklayan ilginç bir sunum var ve çadır filtresinden bahsediyor, ancak neden orada olduğunu açıklamıyor.

Herkes bu durumda bir kutu bulanıklığına göre neden bir çadır filtresinin tercih edileceğini açıklayabilir mi (sadece örneklerin ortalaması alınarak)?

Bikubik hermit enterpolasyonu gibi bir çadır filtresinden daha iyi bir şeyle gitmek daha kaliteli olur mu?

Yanıtlar:


13

İsteğe bağlı olarak örneklenmiş veriler için teorik ideal kenar yumuşatma filtresi samimi bir filtredir , çünkü Nyquist frekansından daha yüksek tüm frekansları mükemmel bir şekilde ortadan kaldırırken, daha düşük olanları yalnız bırakır. Bu nedenle, bir dereceye kadar, daha iyi kalitede görüntüler üretmek için iç filtreye daha yakından benzeyen kenar yumuşatma filtreleri bekleyebiliriz.

Çadır filtresi (üçgen filtre), sinc filtrenin merkezi zirvesine kesinlikle kutu filtresinden daha yakından benzemektedir:

sinc, üçgen ve kutu filtreleri

Bir bikubik filtre (örn. Mitchell-Netravali), ilk iki negatif lob da dahil olmak üzere, içkin şeklini daha kesin olarak yakalayabilir.

Filtre seçiminin gerçekliği, "mümkün olduğu kadar yaklaşık samimi" den biraz daha incedir, çünkü diğer adlandırma, aşırı bulanıklaştırma ve çalma gibi "ideal olmayan" kenar yumuşatma filtreleri tarafından oluşturulabilecek farklı türler vardır. Ayrıca, farklı filtreler daha fazla veya daha az hesaplama açısından pahalı olabilir. Yani bu, farklı eserleri birbirleriyle ve performansa karşı takas etmeye çalışmaktır. Farklı sahneler / görüntüler bir seçeneği tercih edebilir ve bu da kısmen estetik bir yargıdır.

Neden smallpt özel olarak bir çadır filtresi kullanıyorsa, performans (kısaca değerlendirmek için hızlı bir filtre) ve kısalık kombinasyonunu tahmin ediyorum - birkaç kod satırında yapılabilir, bir bikubik filtre daha fazlasını alır kodu.

Bu arada, smallpt aslında 2x2 alt piksel ızgarası kullanır ve her alt piksele bir çadır filtresi yerleştirir , ardından dört alt pikselin sonuçlarının ortalamasını alır. Yani genel etki, merakla, düz bir tepeye sahip bir piramit gibi görünen dört çadırın toplamıdır:

subpixel tent filtreler

Bunun kasıtlı olup olmadığından emin değilim, ya da sadece bu şekilde oldu. Tahminimce bu, piksel başına tek bir çadır filtresinin kullanılmasından (daha dar destek nedeniyle), ancak muhtemelen daha görünür takma addan daha keskin bir görüntü elde edilmesidir.


Teşekkür etmek için yardım edemem! Aslında bunu önce 4 tabaka ile tabakalı örnekleme olarak anlıyorum. Ve 9, 16 gibi "katmanların" sayısını özelleştirilebilir hale getiriyorum ... Şimdi, bunun bir "yamuk" filtre olduğunu biliyorum (diğer oluşturucularda çok yaygın değil). Ve benim "katmanlarım" sayısı sonsuz olma eğilimindeyken, filtre bir kutu filtresi haline gelir, zambakı boyadığım yer ... İlginç!
kaosink

3

Sadece Bilinear enterpolasyonu hakkındaki Wikipedia makalelerine baktım. Çadır filtresi bir çeşit Bilineer enterpolasyonudur. Bir Bilinear enterpolasyonu 2 boyutta enterpolasyon yapar. Önce lineer olarak bir boyutta, sonra diğerinde enterpolasyon yapar.

resim açıklamasını buraya girin

Bu resme baktığınızda, önce sütunda, sonra satırda bunu yapar.

Bunun renklerin ortalamasından daha iyi olmasının nedeni, noktalardan biri merkeze diğerinden daha yakınlaştığında, son renge daha fazla katkıda bulunmasıdır. Renklerin ortalamasıyla, bir nokta merkeze başka bir noktadan daha yakın olsa bile tüm noktalar eşit olarak katkıda bulunur.

4 noktanın tamamı merkezden eşit mesafede sabit konumlarda ise, tüm puanlarda tam olarak% 25 katkı elde edersiniz, bu ortalama ile aynıdır.

Bu, kenar yumuşatmayı yalnızca 4 kat daha yüksek çözünürlükte oluşturup aşağı örnekleyerek uyguladığınız anlamına gelir. 2 yol arasındaki çıktı, anladığım kadarıyla aynı olmalıdır.

Peki hangi filtreyi kullanmalısınız? Ne istediğinize ve durumunuza bağlıdır. Örnekleriniz için rastgele alt piksel konumları seçerseniz, Bilinear enterpolasyonu kullanmak daha iyi olabilir. Tüm noktalar sabitse ve sadece daha yüksek bir çözünürlükte görüntülerseniz, ortalama alma yararlı olabilir. Sonunda, bu normalde farketmediğiniz veya zar zor farkettiğiniz bazı alt piksel şeyler, bu yüzden AA varsa bir tür varsa, o zaman yeterince iyi. Ama bu sadece benim düşüncem ve muhtemelen 3D animasyonun ortalama izleyicisinin ya da bunun gibi bir şeyin görüşü.

Bikübik enterpolasyon size daha yumuşak bir görünüm verir. Bikübik: resim açıklamasını buraya girin

İki doğrusal: resim açıklamasını buraya girin

Hangisi daha iyi? Ne sevdiğine bağlı ve büyük bir fark olacağını sanmıyorum.

Kaynaklarım: https://en.wikipedia.org/wiki/Reconstruction_filter#Image_processing

https://en.wikipedia.org/wiki/Bilinear_interpolation

https://en.wikipedia.org/wiki/Bicubic_interpolation

(Görüntüler Vikipedi'den ve kamu malıdır)

Umarım bu yardımcı olur, ben sadece bu konuda profesyonel değilim, sadece bilgisayar grafiklerini seven biriyim. Bazı hatalar yapmış olabilirim. Eğer öyleyse, sadece söyle ve ben değiştireyim!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.