Bilinear filtreleme - Bilinear filtering

Bir uzaklaştırdınız bir küçük porsiyon bitmap kullanarak, en yakın komşu filtreleme (solda) , iki-doğrusal filtreleme (ortada) ve bikübik filtreleme (sağda) .

Çift Doğrusal filtreleme a, doku filtreleme yumuşatmak için kullanılan yöntem, dokular olduklarından daha büyük veya daha küçük görüntülendiğinde.

Ekran üzerinde dokulu şekil çizilirken saklanmadan olarak çoğu zaman, doku herhangi bir bozulma olmadan tam olarak gösterilmez. Bu nedenle, çoğu piksel "arasındaki" dir dokusu üzerinde bir nokta kullanmaya gerek sona erecek teksel - texel varsayarak noktalarıdır (aksine, diyelim ki, kareler) - orta (veya sol üst köşesinde, veya başka bir yerde, aynı sürece tutarlı olduğu gibi) kendi "hücreler" nin, önemli değil. Çift Doğrusal filtreleme işlemini gerçekleştirmek için aşağıdaki noktaları kullanan iki-doğrusal interpolasyon (genellikle, pikselin orta ya da üst sol) piksel temsil noktaya en yakın dört texel arasındadır.

Formül

matematiksel bağlamda, iki-doğrusal interpolasyon şeklinde olan bir fonksiyon f (x, y) bulma sorunudur

doyurucu

Hesaplamak için olağan ve genellikle hesaplama en ucuz yolu iki işlevi hesaplamak için, örneğin iki defa kullanılan lineer interpolasyon yoluyla ve doyurucu

ve sonra, (düzlemdir Bu fonksiyonları birleştiren için bir işlevi) tatmin

Bilgisayar grafik olarak, iki-doğrusal filtreleme genellikle doku kaplama sırasında bir doku üzerinde gerçekleştirilir, veya yeniden boyutlandırma sırasında bir bitmap'in. Her iki durumda da, kaynak veri (bitmap veya doku), iki boyutlu bir değerler dizisi olarak görülebilir tam renkli veri durumunda bu, veya birkaç (genellikle üç). İki-doğrusal filtreleme kullanılan veri noktaları renk Enterpolasyonlanacak olan yeri çevreleyen 2x2 noktalarıdır.

Ayrıca, bir fonksiyonun gerçek katsayıları hesaplamak zorunda değildir ; işlem değeri yeterlidir.

X denecek kıyaslanmasını büyük tamsayı ve ondalık kısmı olacaktır . Ardından , ve . Biz , , , . İnterpolasyonu için kullanılmaktadır veri noktaları doku / bitmap alınır ve atanır , , ve .

, İki veri noktası vardır çıkararak ikinci verimler önceki

Çünkü doğrusaldır, türevi sürekli ve eşittir

Çünkü ,

ve benzer şekilde,

Çünkü biz son noktalarını hesaplayan ve ikinci enterpolasyon adım için gerekli.

İkinci adım hesaplamak için biz, ara değerlerinin hesaplanması için kullanılan çok aşağıdaki formül ile gerçekleştirilebilir ki:

ölçekleme durumunda, y yeniden olçeklendirilmiş görüntünün aynı hat içinde sabit kalan ve ara sonuçlar saklanması ve bir sonraki piksel hesaplanması için bunları yeniden önemli tasarruflara yol açabilir. Benzer tasarruf tek boyutlu filtreleme iki geçiş olarak ifade edilebilir ki bu, yani filtreleme tüm "iki" çeşitleri ile elde edilebilir.

doku kaplama durumunda, sabit bir x veya y şimdiye kadar karşılaştığım nadiren eğer, ve bugünün (2000+) grafik donanım son derece paralelleştiriliyor çünkü zaten hiçbir zaman tasarrufu olmayacaktı.

iki-doğrusal interpolasyon formül yazma bir başka yoldur

Basit kod

Bu kod doku kare (son derece yaygın bir durum) hayır olduğunu varsayar mipmap kullanımda ve verilerin yalnızca bir kanal (Bu. Nadirdir Neredeyse tüm dokular bu nedenle sahip renkte olan olduğu kırmızı, yeşil ve mavi kanal, ve bir çok nedenle üç ya da dört y hesaplamaları, her bir kanal için bir adet) yapmak gerekir, bir alfa saydamlık kanalı vardır. UV koordinat konumu texel merkezinde yer almaktadır. Örneğin, {(0.25,0.25), (0.75,0.25), (0.25,0.75), (0.75,0.75)} 2x2 doku için değerlerdir.

 double getBilinearFilteredPixelColor(Texture tex, double u, double v) {
   u = u * tex.size - 0.5;
   v = v * tex.size - 0.5;
   int x = floor(u);
   int y = floor(v);
   double u_ratio = u - x;
   double v_ratio = v - y;
   double u_opposite = 1 - u_ratio;
   double v_opposite = 1 - v_ratio;
   double result = (tex[x][y]   * u_opposite  + tex[x+1][y]   * u_ratio) * v_opposite + 
                   (tex[x][y+1] * u_opposite  + tex[x+1][y+1] * u_ratio) * v_ratio;
   return result;
 }

Sınırlamalar

Yani, doku, her yönde 256 piksel ise, doku yapabilir 128 altına veya 512 piksel üzerinde ölçekleme - doku ölçekleme yarısı altında veya doku çift özgün boyutu üzerinde gelene kadar Bilinear filtreleme oldukça doğru çünkü eksik piksel veya çok fazla pürüzsüzlük, kötü görünüyor. Genellikle, oyun veya diğer 3-D oluşturma uygulamalarda, mipmap daha iyi performans için doku ölçekli bir sürümünü sağlamak için kullanılır; Bununla birlikte, iki-doğrusal filtreleme kullanarak perspektif olarak doku, iki farklı boyutlu Eşleşme arasındaki geçiş çok ani olabilir. Trilinear filtreleme , biraz daha karmaşık olsa da, yumuşak boyunca bu geçiş yapabilir. 2-D-Görüntü, boyutlandırma dünyasında, bikübik interpolasyon genellikle oluşturduğu netlik illüzyonu ve üstün bir anti-aliasing özellikleri için tercih edilir; ancak, çoğu bicubics bulanık ve Zil eserler bir kombinasyonu vasıtasıyla oluşmaktadır. Eklediği tek kübik olan bir Hermite filtre, ne bulanıklaştırma ne de zil, değil lineer interpolasyon daha iyi kenar yumuşatma yapar, ama yine de biraz daha keskin olduğunu.

Bir texel filtrelenmiş bir doku eksik nasıl hızlı bir gösteri için buraya kutuların merkezlerinden sayılarla iç içe (kırmızı ve siyah) 8 texel çapında doku gelen kutularının merkezlerini temsil eden numarası listesi, var (mavi), bir 3-texel çapında alt örneklemeli dokudan. kırmızı sayılar içindeki 3-texel dokusunu hesaplanmasında kullanılacak olmaz texel temsil eder.

0.0625, 0,1667 , 0,1875, 0.3125 , 0.4375, 0.5000 , 0.5625, 0,6875 , 0.8125, 0.8333 , 0.9375

Özel durumlar

Dokular, genel olarak değil, sonsuz ve bazen bir o doku elemanı koordinatlarının ızgara dışında yer alan bir koordinat piksel ile biter. Bu işlemek için birkaç yol vardır:

  • Arka arkaya geçen texel da hemen ilk önce gelir ve bir sütunda son texel da hemen önce yukarıdaki gelir, böylece doku sarın. Bu doku kiremitli ediliyor iyi çalışır.
  • doku dışındaki alanı hepsi tek bir renk yapın. Bu sağlam zemin üzerine döşenecek veya şeffaf olacak şekilde tasarlanmış bir doku için kullanım olabilir.
  • sonsuza üzerinden kenar texel tekrarlayın. doku tekrarlanması tasarlanmış değilse bu iyi çalışır.

Ayrıca bakınız