Muszę przeskalować obraz ze współczynnikiem poziomie i pionie ( , < ).s y s x s y 1
Chcę użyć skończonego filtra dolnoprzepustowego przed próbkowaniem w dół.
Jak powinienem określić parametry filtra dolnoprzepustowego ( i Gaussian ), aby uzyskać go jako funkcję i ?σ s x s y
Szczególnie interesuje mnie przypadek, w którym .
image-processing
gaussian
Ben-Uri
źródło
źródło
Odpowiedzi:
Musisz pomyśleć o zmianie częstotliwości Nyquista między obydwoma obrazami. Jeśli częstotliwość Nyquista oryginalnego obrazu wynosi N, obraz o zmniejszonej próbce będzie miał niższą częstotliwość Nyquist, xN, gdzie x jest związany ze stosunkiem rozmiarów między końcowym obrazem a początkowym. Trzeba będzie usunąć te częstotliwości przestrzenne, które są wyższe niż xN na oryginalnym obrazie przed próbkowaniem go w dół.
Spektrum mocy Gaussa w przestrzeni obrazu jest również Gaussa w przestrzeni częstotliwości. Jeśli przez chwilę zignorujemy drugi wymiar, Gaussa w przestrzeni obrazu jest zdefiniowany jako exp (-x ^ 2 / s ^ 2), gdzie x reprezentuje twoje piksele. Jest to mapowane do przestrzeni częstotliwości jako exp (-w ^ 2 * s ^ 2), gdzie w jest częstotliwością. Parametr (y) sigma pokazuje, że szeroki Gaussian w przestrzeni obrazu odpowiada wąskiemu Gaussowi w przestrzeni częstotliwości.
Chciałbyś wybrać parametr sigma, który daje bardzo niską wartość w przestrzeni częstotliwości przy częstotliwości, która odpowiada częstotliwości Nyquista obrazu próbkowanego w dół.
źródło
źródło
Jeśli robisz duże zmniejszenie (np. 2x, 3x, 4x), możesz wykonać uśrednianie pikseli, aby uzyskać dobre wygładzanie krawędzi. Właśnie dlatego anty-aliasing wykorzystuje wiele dodatkowych procesorów / GPU, aby gry wyglądały ostrzej.
Ponieważ przechodzisz z obrazu 1000x1000 do obrazu 707x707 (tylko przykład współczynnika skali) masz rację, że aliasing może być problemem.
Na szczęście jest to problem, na który wpadło już wiele osób i wykonało sporo pracy, aby je rozwiązać. W wielu przypadkach dwukierunkowa interpolacja jest właściwą drogą. Oto kilka przykładów tego, jak wyglądają różne metody interpolacji:
http://www.compuphase.com/graphic/scale.htm
Zmiana rozmiaru OpenCV ma kilka wbudowanych metod:
http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html#cv-resize
Jeśli korzystałeś już z kilku metod interpolacji i nie działają one dobrze, opublikuj przykładowy obraz źródłowy i przykładowy obraz pokazujący niedobór. Będziemy tego potrzebować, aby zdiagnozować problem i spróbować znaleźć dobre rozwiązanie.
źródło
Naprawdę nie mam dla ciebie dobrej odpowiedzi, ale oto dwie opcje, które możesz wypróbować:
źródło
źródło