2012-01-18

Filtr prostokątny

Chyba najprostszy filtr o ile go tak można nazwać. Uśrednia wartości próbek w obszarze splotu. Jego promień to 0.5. Co oznacza, że przy przekształcaniu obrazu 1:1 pod uwagę zostanie wzięta wartość tylko jednego piksela. W dziedzinie częstotliwości odpowiada mu funkcja sinc o widmie rozciągającym się do nieskończoności. Filtr taki generuje silny aliasing. Wykresem jest linia prosta o wartości 1 od -0.5 do 0.5. Pole powierzchni to 1. Filtr ten w żaden sposób nie wygładza pomniejszonego lub powiększonego obrazu. Przy pomniejszaniu pod uwagę brany jest pojedynczy piksel obrazu wynikowego. Przy powiększaniu brany jest jeden piksel obrazu źródłowego.

Przykładowy kod filtru w C#:

public class BoxFilter : Filter
{
    public override double Ray
    {
        get
        {
            return 0.5;
        }
    }
 
    public override double Evaluate(double a_value)
    {
        a_value = Math.Abs(a_value);

        if (a_value >= 0.5)
            return 0;
        if (a_value < -0.5) 
            return 0;

        return 1;
    }
}

Box w przeciwieństwie do innych filtrów nie ma na brzegach wartości zerowych. Stąd by uniknąć by promień przy samplowaniu 1x1 (szczególnie Jitter) nie był uwzględniany w dwóch sąsiednich pikselach punkt z jednego brzegu uwzględniamy, z drugiego nie. Lewy brzeg jest domknięty, prawy nie. Taki sposób domknięcia bardziej naturalnie współgra z zaokrąglaniem liczb. Dla samplowania Grid domknięcie przedziałów nie ma znaczenia bo zawsze pobieramy wartość ze środków.

Brak komentarzy:

Prześlij komentarz