2015-11-16 7 views
1

Я пытаюсь выполнить этот урок http://www.mathworks.com/help/vision/examples/automatically-detect-and-recognize-text-in-natural-images.html для обнаружения текста в изображении с использованием Matlab.Обнаружение текста в изображении с использованием MSER

В качестве первого шага учебник использует detectMSERFeatures для обнаружения текстовых областей изображения. Однако, когда я использую этот шаг на своем изображении, текстовые области не обнаруживаются.

Вот фрагмент кода, я использую:

colorImage = imread('demo.png'); 
I = rgb2gray(colorImage); 
% Detect MSER regions. 
[mserRegions] = detectMSERFeatures(I, ... 
    'RegionAreaRange',[200 8000],'ThresholdDelta',4); 
figure 
imshow(I) 
hold on 
plot(mserRegions, 'showPixelList', true,'showEllipses',false) 
title('MSER regions') 
hold off 

А вот исходное изображение

и вот изображение после первого шага

[[введите описание изображения здесь! ] [2]] [2]

Обновление

Я играл с параметрами, но никто, кажется, не обнаружил текстовую область. Есть ли лучший способ сделать это, чем настроить цифры? Тонкая настройка параметров не будет работать для широкого спектра изображений, которые у меня могут быть.

Некоторые параметры, которые я пробовал и их результаты:

[mserRegions] = detectMSERFeatures(I, ... 
    'RegionAreaRange',[30 100],'ThresholdDelta',12); 



[mserRegions] = detectMSERFeatures(I, ... 
    'RegionAreaRange',[30 600],'ThresholdDelta',12); 
+1

Попробуйте уменьшить «MaxAreaVariation», так как ваш текст и фон имеют очень мало вариаций (уменьшают ложные срабатывания), уменьшая минимальное значение для «RegionAreaRange», поскольку маленькие символы могут быть меньше 200 пикселей (увеличивать истинные положительные значения) и увеличивать «ThresholdDelta», поскольку вы знаете, что существует резкий контраст между текстом и фоном (уменьшите ложные срабатывания). – kmac

+0

@kmac, вы должны ответить на этот вопрос. – Dima

+0

Я не тестировал его вообще ... Наверное, я могу, если он действительно работает. :) – kmac

ответ

1

Отказ от ответственности: полностью тестировалась.

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

Попробуйте уменьшить минимальное значение для RegionAreaRange, так как маленькие символы могут быть меньше 200 пикселей (увеличивайте истинные значения). В 200, вы, вероятно, фильтруете большую часть вашего текста.

Попробуйте увеличить ThresholdDelta, так как вы знаете, что существует резкий контраст между текстом и фоном (уменьшите ложные срабатывания). Это будет не так эффективно, как MaxAreaVariation для фильтрации, но должно немного помочь.

+0

Я играл с большим количеством чисел, но никто, кажется, не обнаружил текстовую область. Есть ли лучший способ сделать это, чем просто настроить номера? - Я обновил вопрос. – Anthony

+0

У вас есть дополнительная информация о том, что вы пытаетесь сделать? Является ли текст/фон всегда одного цвета? Всегда ли текст на плоском фоне? MSER - это более общий инструмент, чем то, для чего вы его используете. Возможно, вам лучше маскировать точные значения фона и текстового пикселя, а не использовать MSER. – kmac

+0

Моя цель - извлечь текстовые области, а затем отправить их на ocr. У меня уже есть решение в opencv, которое использует несколько шагов порога для получения текстовых областей. Однако он не работает на всех изображениях, поскольку он не основан на алгоритме, а скорее основан на шагах (т. Е. Порог, canny и т. Д.). Текст всегда будет ярче фона. Я столкнулся с другим ответом на SO, который использовал SWT: http: // stackoverflow.com/questions/19960826/how-to-make-the-blackboard-text-seem-clearer-using-matlab/19971599 # 19971599, который, как я думал, будет работать, но не работает. Я могу задать для него отдельный вопрос. – Anthony