Проблема обнаружения краев при обнаружении текста в изображениях

Я пытаюсь im p lement Эпштейн-бумага (Обнаружение текста в естественных сценах с преобразованием ширины штриха (2010)) при обнаружении текста в естественных изображениях. Первый шаг - обнаружение края.

Я получаю дополнительные края внутри своего текста. Как удалить их?

Исходное изображение:

enter image description here Мое обнаружение края: enter image description here

В этом примере вы можете увидеть дополнительные ребра в тексте "WHY HURRY"

Я пробовал эти шаги в 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);

Проблема № 2:

В соответствии с предложением belisarius я обнаружил, что фильтр с сильным сдвигом работает достаточно хорошо для сегментации текстового региона. Теперь я столкнулся с другой проблемой при реализации преобразования ширины штриха (посмотрите на бумагу Эпштейна).

Ширина штриха хорошо работает с символами типа "H''Y" даже для "S", потому что соответствующие ребра обычно находятся на постоянном расстоянии, если мы будем двигаться в направлении градиента.

Проблема возникает в таких символах, как "W". Для одной части левого края 1-го восходящего хода мы получаем правый край 2-го upstoke как его корреспондирующий край. В то время как для другой части мы получаем правый край 1-го восходящего хода. Это знаменует значительную дисперсию ширины штриха области W, что приводит к тому, что это называется нетекстовой областью в соответствии с бумагой.

Может ли кто-нибудь предложить какое-либо решение?

Ответ 1

Используйте Mean Shift Filter перед обнаружением края. Пример в Mathematica:

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

Выходы:

enter image description hereenter image description here

Ответ 2

Взгляните на документацию Matlab для edge и Статья Википедии о алгоритме Canny.

Вы можете вызвать edge(I, 'canny', thresh, sigma) для большего контроля. Играйте с порогами с низким и высоким фронтом. Сначала я попытался бы опустить верхний порог: поскольку внутренние края не связаны с краями букв, величина градиента должна превышать высокий порог внутри букв.

Вы также можете увеличить sigma, чтобы больше размыть изображение перед обнаружением края. (Ваше гауссовское размытие избыточно, потому что edge размывает изображение для вас.)