2015-11-16 30 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',因为您的文本和背景的变化非常小(减少误报),由于小字符可能小于200像素(增加真正的正数),因此会减小'RegionAreaRange'的最小值,并且会增加'ThresholdDelta',因为你知道文本和背景之间形成了鲜明的对比(减少误报)。 – kmac

+0

@kmac,你应该让这个答案。 – Dima

+0

我没有测试它......我想如果它真的有效,我可以。 :) – kmac

回答

1

免责声明:未经任何测试。

请尝试减少MaxAreaVariation,因为您的文字&背景变化非常小(减少误报)。你应该能够把这个降低很多,因为它看起来像文本是数字生成的(如果它是一个文本的图片将不会工作)。

尝试减小RegionAreaRange的最小值,因为小字符可能小于200像素(增加真正的正数)。在200,你可能会过滤掉大部分文本。

尝试增加ThresholdDelta,因为您知道文字和背景之间存在鲜明的对比(减少误报)。这不会像MaxAreaVariation那样有效,但应该有所帮助。

+0

我玩了很多数字,但没有一个能够完美地检测文本区域。有没有比简单调整数字更好的方法? - 我已经更新了这个问题。 – Anthony

+0

你有关于你想要做什么的更多信息吗?文字/背景总是一样的颜色?文字总是在平坦的背景上? MSER是比您使用它更通用的工具。您可能会更好地掩盖精确的背景和文本像素值,而不是使用MSER。 – kmac

+0

我的目标是提取文本区域,然后将它们发送到ocr。我已经在opencv中有一个解决方案,它使用几个阈值步骤来获取文本区域。但是,它不适用于所有图像,因为它不是基于算法的,而是基于步骤的(即阈值,canny等)。文字总是比背景更亮。我遇到了另一个关于使用SWT的答案:http:// stackoverflow。问题/ 19960826 /如何使黑板文本出现更清晰使用matlab/19971599#19971599我认为会工作,但没有。我可以单独提出一个问题。 – Anthony