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

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.