BlurResolve
    Napraw O nas Jak to działa Prywatność Kwestie prywatności
    Powrót do strony głównej

    Jak to działa

    Więcej szczegółów na temat problemu i tego, jak narzędzie naprawia Twój obraz.

    Zrozumienie źródła problemu

    Zacznijmy od sytuacji, gdy wszystko jest w porządku. Wtedy każdy „punkt źródła światła” jest skupiany przez soczewkę w jednym punkcie czujnika aparatu w Twoim urządzeniu. Poniższy obraz przedstawia taką sytuację. Po prawej stronie obrazu znajduje się czarny ekran z pojedynczym ostrym punktem światła.

    Source of light Lens Camerasensor Image "in-focus"point of light Robienie zdjęcia w przypadku „pełnej ostrości”

    Sprawdźmy teraz, co dzieje się w przypadku braku ostrości. Wtedy soczewka aparatu znajduje się w złej pozycji i wpadające światło zamiast w jednym punkcie rozprasza się wokół głównego punktu. Po prawej stronie obrazu widać czarny ekran z rozmytą poświatą. Zamiast jednego punktu otrzymujemy tę samą ilość światła rozproszoną wokół.

    Source of light Lens Camerasensor Image out of focusfor point source of light Robienie zdjęcia w przypadku „braku ostrości”

    Podobny problem występuje, gdy obraz jest zniekształcony przez ruch – ruch obiektów lub poruszenie aparatem podczas robienia zdjęcia. Zamiast pojedynczego punktu skupienia otrzymujemy linię światła.

    Przegląd procesu dekonwolucji

    Dobra wiadomość jest taka, że istnieją metody zdolne do odtworzenia „ostrego” obrazu z jego nieostrej wersji. Jedną z takich metod jest dekonwolucja Richardsona–Lucy. Jest to algorytm iteracyjny, który wykorzystuje Funkcję Rozproszenia Punktu (PSF) do przywracania oryginalnej wersji obrazu. Czym jest PSF? Funkcja ta mówi o tym, jak każdy piksel jest zniekształcony. Jeśli spojrzysz na poprzedni punkt, byłby to „obraz z czarnym tłem” z powyższych ilustracji.

    Dekonwolucja to proces w pętli sprzężenia zwrotnego, który „zgaduje” oryginalny obraz, a następnie udoskonala to odgadnięcie w wielu krokach:

    • 1. Wstępne oszacowanie: Zacznij od zgrubnego przybliżenia oryginalnego obrazu (często jest to po prostu sam rozmyty obraz lub płaskie szare pole).
    • 2. Projekcja w przód: Weź aktualne oszacowanie i „ponownie je rozmyj” przy użyciu znanej funkcji PSF. Symuluje to, jak obraz powinien wyglądać, gdyby obecne oszacowanie było poprawne.
    • 3. Porównanie: Porównaj tę ponownie rozmytą wersję z faktycznie zaobserwowanym (rozmytym) obrazem, dzieląc jeden przez drugi. Tworzy to „współczynnik korekcji” dla każdego piksela.
    • 4. Projekcja wsteczna: Zastosuj ten współczynnik korekcji z powrotem do obecnego oszacowania. Zasadniczo mówi to: „W obszarach, gdzie ponownie rozmyty obraz był zbyt ciemny w porównaniu z rzeczywistym, zwiększ jasność oszacowania; tam, gdzie był zbyt jasny – zmniejsz ją”.
    • 5. Powtórzenie: Użyj tego zaktualizowanego oszacowania jako punktu wyjścia do następnej rundy. Każda iteracja zazwyczaj sprawia, że obraz staje się ostrzejszy i przywraca więcej szczegółów.

    Dowiedz się więcej

    Szacowanie rozmiaru rozmycia dla punktu startowego

    Dość ważnym krokiem jest wstępne oszacowanie funkcji PSF. Dobre oszacowanie przyspiesza cały proces. Jak to się odbywa tutaj? Cóż, użyłem tego samego sposobu, który służy do „wykrywania”, czy obraz jest rozmyty lub nieostry: obliczanie odchylenia standardowego z transformacji Laplace'a obrazu.

    W pierwszym kroku wykonywana jest dyskretna transformacja Laplace'a. Generuje to „czarno-biały” obraz z zaznaczonymi wszystkimi krawędziami. Jeśli obraz jest ostry, istnieje wiele krawędzi między obszarami bez krawędzi. W przypadku rozmytych obrazów ostre krawędzie niemal nie występują – widać raczej płynne przejście z jednego koloru do drugiego.

    Następnie piksele „czarno-białego” obrazu są traktowane jako zbiór danych i obliczane jest odchylenie standardowe. Daje to jedną liczbę mówiącą o tym, jak jednolity jest obraz. Jeśli wartość jest wysoka – oznacza to, że obraz ma wiele ostrych zmian. W przypadku, gdy jest niska, obraz jest dość jednolity i raczej „rozmyty”. Ta sama metoda jest używana przez wiele programów wykrywających, czy obraz jest ostry, czy rozmyty.

    Ostatnim krokiem jest wygenerowanie funkcji PSF dopasowanej do wartości z odchylenia standardowego. Było to nieco trudne i wymagało eksperymentów. Ostatecznie wygląda na to, że do konkretnych wartości odchylenia standardowego przypisane są odpowiednie funkcje PSF. Jedna ważna uwaga: Wygenerowane funkcje PSF mają kształt Gaussa – jeden punkt o maksymalnej jasności powoli wygasający do czerni. Tak przygotowany PSF dobrze sprawdza się jako punkt wyjścia dla algorytmu.

    Dowiedz się więcej

    Kilka uwag technicznych

    • Użycie GPU – wiele obliczeń obrazu jest dość kosztownych, ale wykorzystują one podobne operacje dla wielu pikseli. Można to łatwo przyspieszyć za pomocą procesora graficznego (GPU) urządzenia. Dostęp do niego odbywa się poprzez technologię WebGL wbudowaną w przeglądarkę, co dzieje się automatycznie dzięki bibliotece gpu.js.
    • Odczytywanie i zapisywanie obrazu odbywa się automatycznie przez JS Canvas API.
    • Uwaga: Po załadowaniu aplikacja może działać offline. Kiedy więc załadujesz stronę główną z obszarem do upuszczania zdjęć, możesz z niej korzystać nawet bez połączenia z internetem. Spróbuj przetwarzać obrazy w trybie offline ;). Cała strona/aplikacja nie jest jeszcze w pełni offline, ale planuję to wdrożyć.