problem z wykrywaniem krawędzi przy wykrywaniu tekstu na obrazach

Próbuję im P lement epshtein ' s paper(wykrywanie tekstu w scenach naturalnych za pomocą przekształcenia szerokości obrysu(2010)) na wykrywaniu tekstu w naturalnych obrazach. Pierwszym krokiem jest wykrywanie krawędzi.

Dostaję dodatkowe krawędzie w moim tekście. Jak mam je usunąć?

Oryginalny obrazek:

Tutaj wpisz opis obrazkaMoje wykrywanie krawędzi: Tutaj wpisz opis obrazka

W przykładzie można zobaczyć dodatkowe krawędzie w tekście 'WHY HURRY'

I wypróbowałem te kroki w Matlab:

% contrast enhancement
I_adjust = imadjust(I);

% dilation & erosion
se = strel(ones(3,3));
I_dilate = imdilate(I_adjust, se);
I_final = imerode(I_dilate, se);

% gaussian smoothing
h_mask = fspecial('gaussian');
I_final = imfilter(I_final,h_mask);
figure; imshow(I_final);

BW_canny = edge(I_final,'canny');
figure; imshow(BW_canny);

Problem #2:

Zgodnie z sugestią belisariusa, odkryłem, że filtr mean-shift działa całkiem dobrze dla segmentacji regionów tekstowych. Teraz mam do czynienia z innym problemem w implementacji Stroke Width transform (spójrz na pracę Epshteina).

Szerokość obrysu działa dobrze z znakami takimi jak " H " Y "nawet dla "S", ponieważ odpowiednie krawędzie są zwykle w stałej odległości, jeśli postępujemy w kierunku gradient.

Problem pojawia się w znakach typu 'W'. Dla jednej porcji lewej krawędzi 1-giej góry otrzymujemy prawą krawędź 2-giej góry jako jej krawędź. Natomiast za kolejną porcję otrzymujemy prawą krawędź pierwszego rzutu . Wprowadza to znaczną wariancję w szerokości obrysu regionu "W", co prowadzi do określenia tego jako obszaru nietekstowego zgodnie z paper.

Czy ktoś może zaproponować jakieś rozwiązanie?
Author: Community, 2011-10-15

2 answers

Użyj Mean Shift Filter przed wykryciem krawędzi. Przykład w Mathematica:

i = Import["http://img839.imageshack.us/img839/28/whyhurry.jpg"];
iM = MeanShiftFilter[i, 2, .15, MaxIterations -> 10]
EdgeDetect[iM]

Wyjścia:

Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

 10
Author: Dr. belisarius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:33:58

Spójrz na dokumentację Matlab dla edge i artykułu Wikipedii na temat algorytmu Canny.

Możesz zadzwonić edge(I, 'canny', thresh, sigma), Aby uzyskać większą kontrolę. Baw się z niskim i wysokim progiem krawędzi. Spróbowałbym najpierw obniżyć wysoki próg: ponieważ wewnętrzne krawędzie nie są połączone z krawędziami liter, wielkość gradientu musi przekraczać wysoki próg wewnątrz liter.

Można również zwiększyć sigma, aby bardziej rozmazać obraz przed wykryciem krawędzi. (Twoje gaussowskie rozmycie jest zbędne, ponieważ edge rozmywa obraz za Ciebie.)

 0
Author: japreiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-15 19:36:45