Izoluj niewyraźną część sfałszowanego obrazu

10

Mam zdjęcie zrobione aparatem telefonu komórkowego z ostrością na jego części, powiedzmy twarz lub cokolwiek innego. Chcę wiedzieć - w przybliżeniu - gdzie jest skupiony obszar. Na przykład obwiednia wokół wybranego obszaru. przykład: Oryginalny Po wykryciu

Humam Helfawi
źródło

Odpowiedzi:

7

Zasadniczo jest to problem z segmentacją obrazu ( http://en.wikipedia.org/wiki/Image_segmentation ), w którym próbowałbyś izolować skupione obszary na nieostrych obszarach obrazu.

Soczewki optyczne i tak są równoważne filtrom dolnoprzepustowym, a efektem filtra dolnoprzepustowego na sygnał jest wygładzenie go przez ograniczenie zawartości wyższej częstotliwości.

W cyfrowym przetwarzaniu obrazu niskie częstotliwości odpowiadają dużym obiektom (forma ogólna), a wyższe częstotliwości odpowiadają małym obiektom (szczegóły).

Dlatego, aby wyizolować obszar zogniskowany, możesz szukać obszarów o wyższym standardowym odchyleniu w stosunku do rozmytych obszarów, które byłyby przy niższym standardowym odchyleniu z powodu wygładzania obiektywu nieostrego.

Aby rozróżnić regiony „zamazane” od „niewyraźnych”, możesz ustawić „okno” wymiarów M.×N. i przesuń go po swoim obrazie.

W każdej pozycji okna oblicz wariancję wartości „łatki” tak, jakby były one jednowymiarowym wektorem M.×N.wartości. Spowoduje to powstanie kolejnego „obrazu” (lub bardziej ogólnie dwuwymiarowej tablicy) przedstawiającego odmianę odchylenia standardowego w każdym miejscu obrazu. Następnie możesz zebrać wszystkie te wartości i uzyskać ich histogram. Histogram wykaże rozkład multimodalny (więcej informacji można znaleźć na stronie http://en.wikipedia.org/wiki/Multimodal_distribution ).

W przypadku obrazu w poście histogram może wykazywać dwa tryby. Jedna odpowiada stosunkowo wysokim wartościom odchylenia standardowego (obszar skupiony), a druga odpowiada stosunkowo niskim wartościom odchylenia standardowego (obszary rozmyte).

Następnie możesz ustawić próg, na przykład tylko między dwoma trybami, aby ustalić kryterium między regionami zogniskowanymi i nieostre, a następnie wybrać wszystkie „łatki” (lub obszary okna MxN), których odchylenie standardowe jest wyższe niż próg. (Aby uzyskać więcej informacji, zobacz: http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )

To wyodrębni dla ciebie skupione części obrazu.

Mam nadzieję że to pomoże.

A_A
źródło
Zrobię głęboką lekturę dla twojej odpowiedzi i wrócę z odpowiedzią, Wielkie dzięki
Humam Helfawi
Dziękuję bardzo, świetna i szczegółowa odpowiedź, zamierzam udostępnić implementację, jeśli uzyskam dobre wyniki przy użyciu opencv, jeszcze raz dziękuję
Humam Helfawi
Nawiasem mówiąc, czy szary reprezentant obrazu jest wystarczający, czy też muszę przetwarzać każdy kanał?
Humam Helfawi
Cieszę się, że okazało się to pomocne. Praca w skali szarości działałaby dobrze dla rozróżnienia między rozmytymi i skupionymi obszarami, ale włączenie dodatkowych informacji o kolorze może pomóc w przepisaniu bardziej złożonych obszarów (na przykład, śledzić obszar twarzy na portrecie lub izolować tylko kwiat na zdjęciu w Twój post).
A_A
Pytanie zostało zredagowane z powrotem do oryginalnej formy po dyskusji na stronie: meta.dsp.stackexchange.com/questions/1337/… @ vast-academician Proszę dodać komentarz jako osobną odpowiedź. Główna część została zachowana na stronie: pastebin.com/kjCC1wM6
A_A
5

Oto łatwiejsze podejście, które nie wymaga analizy okna przesuwnego.

  • Konwertuj obraz na skalę szarości (nie jest to wymagane, ale dla zachowania przejrzystości założę, że masz tylko jeden kanał)

  • Oblicz gradient w obu kierunkach

  • Oblicz wielkość (lub po prostu wyrównaj gradient)

  • Zsumuj oba obrazy gradientowe w obu kierunkach

Jak już powiedziano, zogniskowana część obrazu będzie miała wyższe częstotliwości niż nieostry obszar. Po podsumowaniu otrzymasz dwie projekcje, w których występuje duża zmienność (wyższe wartości) w tej części, w której skupiony obiekt jest umieszczony wzdłuż tego kierunku. Możesz teraz wykonać następujące czynności:

  • Określ punkt początkowy i końcowy tych wyższych wartości. Możesz użyć prostego progu (np. 0,7 * maksymalna_wartość) lub wygładzić profile, wziąć drugą pochodną i sprawdzić tam najwyższe wartości.

  • Pozycje Start / Stop z poprzedniego kroku podają pozycje pikseli w obu kierunkach, w których należy umieścić prostokąt wskazujący obszar ostrości.

M529
źródło