Jak zrekonstruować tekst z obrazu przy użyciu tylko operacji morfologicznych?

16

Chcę jak najlepiej zrekonstruować tekst z poniższego obrazu. Problem polega na tym, że chcę to zrobić tylko za pomocą operacji morforycznych na obrazie

Próbowałem używać erozji, dylatacji, otwierania i zamykania, ale wynik nie jest zbyt dobry.

Czy to w ogóle możliwe?

wprowadź opis zdjęcia tutaj

Jackobsen
źródło
Dylatacja wydaje się oczywistym pierwszym krokiem do wygładzenia tych rozmytych krawędzi?
Paul R
Tak, myślę, że to pierwszy krok każdej kombinacji, którą wypróbowałem.
2
Myślę, że musisz bardziej zdefiniować swój problem. Na przykład, jeśli masz na myśli, w jaki sposób możesz uczynić go bardziej czytelnym, to prawdopodobnie wystarcza trochę dylatacji. Jeśli chcesz zrekonstruować dokładnie to, jak wyglądało przed jakimkolwiek procesem zniekształcenia, to nie jest to możliwe, ponieważ twój algorytm morfologiczny nie ma wiedzy o kształtach konkretnej użytej czcionki.
so12311
Aby uczynić go bardziej czytelnym, podrobiłem go za pomocą [0 1 0; 1 1 1; 0 1 0]. Szukam czegoś, co sprawi, że tekst będzie bardzo zbliżony do oryginalnego.
Jackobsen

Odpowiedzi:

6

Jeśli chcesz dodawać / odejmować itp. Obrazy przekształcone morfologicznie, możesz policzyć, ile pikseli sygnałowych znajduje się w pobliżu każdego piksela, i próg na podstawie tej liczby.

img = imread('http://i.stack.imgur.com/wicpc.png');

n = false(3);n(4) = 1;
s = false(3);s(6) = 1;
w = false(3);w(2) = 1;
e = false(3);e(8) = 1;

%# note that you could convolve with a cross instead
fourNeighbourCount = imerode(img,n) + imerode(img,s) + imerode(img,w) + imerode(img,3) + img;

wprowadź opis zdjęcia tutaj

%# require at least two neighbours
img = fourNeighbourCount > 1;

wprowadź opis zdjęcia tutaj

Jeśli następnie splot z maską 3x3 z otworem pośrodku, możesz uzyskać coś takiego:

wprowadź opis zdjęcia tutaj

Jonas
źródło
3

To dość interesujący problem do rozwiązania! Wypróbuj filtr mediany . Zobacz referencje tutaj i tutaj, aby uzyskać więcej informacji.

Chociaż nie podniosłem rąk, aby zasymulować twój problem, jest to sugestia. Moje przeczucie mówi, że może to dać wielką korzyść, ponieważ wiadomo, że przeciwdziała hałasowi typu sól i pieprz. W twoim przypadku obrazy mają dodatkowe białe kropki wokół granicy, które albo zostaną przekonwertowane na pełną biel, albo na pełną czerń, w zależności od tego, po której stronie alfabetu jest. Oto jak wygląda po filtrowaniu median:

wprowadź opis zdjęcia tutaj

Dipan Mehta
źródło
1

Jeśli z jakiegoś powodu jesteś ograniczony do operacji morfologicznych, możesz rozważyć użycie „schematu głosowania” zorientowanych operacji zamknięcia.

Jednym z problemów związanych z operacjami morfologicznymi jest to, że tak naprawdę nie uwzględniają one kierunkowości. W przypadku środkowego piksela taka okolica

1 0 0
1 1 0
0 1 1

tak naprawdę nie różni się od takiej dzielnicy

0 1 0
1 1 0
1 1 0

Może to powodować problemy, ponieważ dylatacja i erozja nie są ukierunkowane w sposób ukierunkowany, gdy może się to podobać. Jedną rzeczą, którą możesz zrobić, to znaleźć najbardziej odpowiednią ukierunkowaną stronniczo operację morfologiczną za pomocą jąder, takich jak te:

1 1 0   1 0 0   1 0 0
0 1 0   1 1 0   1 1 0
0 1 1   0 1 1   0 1 1 . . .

Byłoby lepiej w przypadku jąder 5 x 5, ale myślę, że pomysł jest wystarczająco jasny. Zasadniczo idea jądra do wykrywania narożników jest nieco rozciągnięta, tak że jest to jądro do wykrywania segmentów linii. Można go również użyć do znalezienia najlepiej dopasowanych krzywych:

0 0 0 1 1
0 0 1 1 0
0 1 1 0 0 
0 0 1 1 0
0 0 0 1 1

Oczywiście prowadzi to do ogromnej liczby jąder, ale jeśli podstawowy pomysł działa, to obiecuje, że istnieje sposób na zoptymalizowanie techniki, tak aby jądro najlepiej dopasowane znalazło się w jednym przejściu.

W każdym razie, jeśli używasz wielu jąder i pewnej logiki, każda operacja w (x, y) wymaga więcej obliczeń niż tradycyjny krok morfologiczny:

  1. Na każdym pikselu (x, y) zastosuj każdy z kilku operatorów morfologicznych. Dla każdego operatora obliczyć zarówno wynik operacji morfologicznej ORAZ stopień, w jakim dane wejściowe pasują do jądra. („Stopień” = liczba pasujących pikseli)
  2. Wybierz wynik morfologiczny dla jądra, który najbardziej odpowiada rzeczywistej konfiguracji pikseli włączenia / wyłączenia.

Rozmiar jądra musi być dopasowany do wielkości danych wejściowych. Zamiast używać większego jądra, możesz użyć jądra „rozprzestrzeniania”, aby zmniejszyć liczbę operacji. Poniższe jądro to tylko jądro 3 x 3 o promieniu większym niż 1.

1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1
Rethunk
źródło