Mam obraz w skali szarości na stronie z komiksem, który zawiera kilka dymków dialogowych (= dymki, itp.), Które są zamkniętymi obszarami z białym tłem i pełnymi czarnymi ramkami, które zawierają tekst wewnątrz, czyli coś takiego:Wykrywanie regionów bąbelków dialogowych w obrazach
Chcę wykryć te regiony i utworzyć maskę (binarny jest ok), który obejmie wszystkie wewnątrz regionów pęcherzyków dialogu, czyli coś jak:
Ten sam obraz, maski nakładane, aby być całkowicie jasne:
Więc moja podstawowa idea algorytmu było coś takiego:
- Detect, gdzie tekst jest - zakład na co najmniej jeden piksel w każdej bańce. Dylatuj te regiony nieco i zastosuj próg, aby uzyskać lepszy grunt startowy; Zrobiłem tę część:
Zastosowanie wypełnienie powodzi lub jakiś wykres przechodzenie, począwszy od każdego piksela białego wykrywany jako piksel wewnątrz -bubble w kroku 1, ale pracując nad początkowym obrazem, zalewając białe piksele (które powinny znajdować się wewnątrz bańki) i zatrzymując się na ciemnych pikselach (które mają być obramowaniem lub tekstem).
Użyj jakiejś operacji binary_closing, aby usunąć ciemne obszary (tj. Obszary odpowiadające tekstowi) wewnątrz bąbelków). Ta część działa dobrze.
Dotychczas kroki 1 i 3 prace, ale mam zmaga się z kroku 2. Obecnie pracuję z scikit-image, a ja nie widzę żadnych gotowych algorytmów, takich jak wypełnienie przeciwpowodziowej realizowanej tam. Oczywiście, mogę użyć czegoś trywialnego, takiego jak szerokość-pierwsze przejście, w zasadzie as suggested here, ale to naprawdę powolne, gdy zrobione w Pythonie. Podejrzewam, że skomplikowane morfologie, takie jak binary_erosion lub generate_binary_structure w ndimage lub obrazie scikit, ale mam trudności ze zrozumieniem całej tej terminologii morfologicznej iw zasadzie jak mogę zaimplementować takie niestandardowe wypełnienie powodziowe (tj. Zaczynając od obrazu kroku 1, pracując nad oryginalnym obraz i wyjście do oddzielnego obrazu wyjściowego).
Jestem otwarty na wszelkie propozycje, w tym te w OpenCV itp
Ponieważ te białe tło (wewnątrz bąbelków tekstu) sąsiadują ze sobą, czy próbowałeś podłączonych komponentów? –
Etykietowanie podłączonych komponentów jest tym, co chciałbym użyć * później *, tj. Na wynikowej masce, aby wyliczyć konkretne bąbelki. Nie widzę sensu używać go na oryginalnym obrazie. – GreyCat
Napełnianie zalewaniem i etykietowanie elementów łączonych jest bardzo ściśle związane z takimi obrazami. Jeśli krawędzie wokół bąbelków są zamknięte lub można je zamknąć, powinno to dać całkiem przyzwoite pierwsze oszacowanie. Zwłaszcza, że możesz zmierzyć właściwości takich regionów, np. jak kwadratowe, itp. –