Rozmycie pudełka

Rozmycie pudełkowe (znane również jako filtr liniowy pudełkowy) to filtr liniowy domeny przestrzennej, w którym każdy piksel w obrazie wynikowym ma wartość równą średniej wartości sąsiednich pikseli w obrazie wejściowym. Jest to rodzaj filtra dolnoprzepustowego („rozmywającego”). Rozmycie prostokątne 3 na 3 („promień 1”) można zapisać jako macierz

Ze względu na swoją właściwość stosowania równych wag można go zaimplementować przy użyciu znacznie prostszego algorytmu akumulacji, który jest znacznie szybszy niż przy użyciu algorytmu przesuwanego okna.

Rozmycia pudełkowe są często używane do aproksymacji rozmycia gaussowskiego . Zgodnie z centralnym twierdzeniem granicznym , wielokrotne stosowanie rozmycia pudełkowego przybliży rozmycie gaussowskie.

W dziedzinie częstotliwości rozmycie prostokątne ma zera i składowe ujemne. Oznacza to, że fala sinusoidalna o okresie równym rozmiarowi pudełka zostanie całkowicie rozmyta, a fale o długości krótszej niż rozmiar pudełka mogą zostać odwrócone w fazie, co widać, gdy dwa koła bokeh stykają się, tworząc jasny punkt, w którym na oryginalnym obrazie byłaby ciemna plama między dwoma jasnymi plamami.

Rozszerzenia

  • Gwosdek i in. ma rozszerzone pole rozmycia, aby przyjąć ułamkowy promień: krawędzie filtra 1-D są rozszerzone o ułamek. Umożliwia nieco lepsze przybliżenie gaussowskie dzięki wyeliminowaniu błędu zaokrąglania liczb całkowitych.
  • Mario Klingemann ma „rozmycie stosu”, które próbuje lepiej naśladować wygląd Gaussa w jednym przejściu, układając ciężarki: Trójkątna odpowiedź impulsowa, którą tworzy, rozkłada się na dwie rundy rozmycia pudełka.
  • Skumulowany obraz integralny autorstwa Bhatii i in. bierze średnią ważoną kilku rozmyć ramek, aby dopasować krzywą odpowiedzi gaussowskiej.

Realizacja

Poniższy pseudokod implementuje rozmycie pola 3x3.




 Rozmycie ramki (obraz)  {  ustaw nowy Obraz na obraz;  Dla x /*wiersz*/, y/*kolumna*/ na nowym obrazie wykonaj:  {  // Jądro nie pasuje!  Jeśli x < 1 lub y < 1 lub x + 1 == szerokość lub y + 1 == wysokość, to:  Kontynuuj;  // Ustaw P na średnią z 9 pikseli:  XXX  XPX  XXX  // Oblicz średnią.  Suma = obraz[x - 1, y + 1] + // Lewy górny  obraz [x + 0, y + 1] + // Górny środkowy  obraz [x + 1, y + 1] + // Prawy górny  obraz [x - 1, y + 0] + // Środkowy lewy  obraz [x + 0, y + 0] + // Bieżący  obraz w pikselach [x + 1, y + 0] + // Środkowy prawy  obraz [x - 1, y - 1] + // Lewy dolny  obraz [x + 0, y - 1] + // Środkowy dolny  obraz [x + 1, y - 1]; // Prawy dolny róg   newImage[x, y] = Suma / 9;  }  Zwróć nowy obraz;  } 

Przykład nie obsługuje krawędzi obrazu, które nie zmieściłyby się w jądrze, dzięki czemu obszary te pozostają nierozmyte. W praktyce problem ten lepiej rozwiązuje:

  • Wprowadzenie kanału alfa reprezentującego brak kolorów;
  • Rozszerzanie granicy poprzez wypełnianie wartości uszeregowanych według jakości:
    • Wypełnij odbicie lustrzane na granicy
    • Wypełnij stałym kolorem rozciągającym się od ostatniego piksela
    • Podkładka w stałym kolorze

r i N pikseli można zastosować szereg optymalizacji :

  1. Rozmycie pudełkowe jest filtrem rozdzielnym , więc potrzebne będą tylko dwa przejścia 1D o średniej wartości 2 r + 1 pikseli, jeden w poziomie i jeden w pionie, dla każdego piksela. Obniża to złożoność z O( Nr 2 ) do O( Nr ) . W terminologii cyfrowego przetwarzania sygnałów każde przejście jest średniej ruchomej .
  2. Akumulacja. Zamiast odrzucać sumę dla każdego piksela, algorytm ponownie wykorzystuje poprzednią sumę i aktualizuje ją, odejmując stary piksel i dodając nowy piksel w zakresie rozmycia. W podobny sposób można użyć tabeli z sumą powierzchni . Zmniejsza to złożoność z O( Nr ) do O( N ) .
  3. Podczas stosowania w wielu przejściach w celu przybliżenia rozmycia gaussowskiego konstrukcja kaskadowego integratora i filtra grzebieniowego umożliwia wykonanie równoważnej operacji w jednym przejściu.

Zobacz też