Matlab 基于MSER的图像文本检测

Matlab 基于MSER的图像文本检测,matlab,image-processing,computer-vision,matlab-cvst,mser,Matlab,Image Processing,Computer Vision,Matlab Cvst,Mser,我试图按照本教程使用Matlab检测图像中的文本 作为第一步,本教程使用detectMSERFeatures检测图像中的文本区域。但是,当我在图像上使用此步骤时,不会检测到文本区域 以下是我正在使用的代码片段: colorImage = imread('demo.png'); I = rgb2gray(colorImage); % Detect MSER regions. [mserRegions] = detectMSERFeatures(I, ... 'RegionAreaRange

我试图按照本教程使用Matlab检测图像中的文本

作为第一步,本教程使用
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);

免责声明:完全未经测试

尝试减少
MaxAreaVariation
,因为您的文本和背景几乎没有变化(减少误报)。你应该能够把它调低很多,因为它看起来像是数字生成的文本(如果它是文本的图片,就不能工作)

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


尝试增加
ThresholdDelta
,因为您知道文本和背景之间存在明显的对比(减少误报)。这在过滤方面不如
MaxAreaVariation
有效,但应该会有所帮助。

尝试减少“MaxAreaVariation”,因为您的文本和背景变化很小(减少误报),减少“RegionAreaRange”的最小值,因为小字符可能小于200像素(增加真阳性),并增加“阈值增量”,因为你知道文本和背景之间存在明显的对比(减少假阳性)。@kmac,你应该回答这个问题。我根本没有测试它……如果它真的有效,我想我可以。:)我玩了很多数字,但似乎没有一个能完美地检测到文本区域。有没有比简单地调整数字更好的方法我已经更新了问题。你有更多关于你想做什么的信息吗?文本/背景是否总是相同的颜色?文本是否始终位于平坦的背景上?MSER是一个比您使用它更通用的工具。你最好屏蔽确切的背景和文本像素值,而不是使用MSER。我的目标是提取文本区域,然后将它们发送到ocr。我在opencv中已经有了一个解决方案,它使用了几个阈值步骤来获取文本区域。但是,它并不能对所有图像都有效,因为它不是基于算法的,而是基于步骤的(即阈值、canny等)。文本将始终比背景亮。我在SO上遇到了另一个使用SWT的答案:我认为这会起作用,但不会。我可以问一个单独的问题。因此,你应该能够立即过滤掉上面例子中填写的字母(o、a、b等),确保该功能是亮对暗。您可能必须处理一些误报,无论采用何种方法(可能从OCR中删除那些分数较低且与其他检测到的字符不相邻的字符)。尝试使用
regionarrange
,类似于[8 1000],并在
MaxAreaVariation
ThresholdDelta
的限制之前更容易接受。如果这不起作用,祝SWT好运。