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:
Moje wykrywanie krawędzi:
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?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:
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.
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.)
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