【问题标题】:edge detection issue on Text detection in images图像中文本检测的边缘检测问题
【发布时间】:2011-12-08 06:00:48
【问题描述】:

我正在尝试 implement Epshtein's paper(Detecting text in natural scene with stroke width transform(2010)) 用于自然图像中的文本检测。 第一步是边缘检测。

我的文本中出现了一些额外的边缘。我应该如何删除这些?

原图:

我的边缘检测:

在示例中,您可以在 text '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 的建议,我发现均值偏移过滤器在文本区域分割中效果很好。现在我在Stroke Width transform的实现中遇到了另一个问题(看Epshtein的论文)。

Stroke Width 适用于像 'H''Y' 这样的字符,即使对于 'S' 也是如此,因为如果我们沿渐变方向前进,相应的边缘通常距离恒定。

问题出现在像“W”这样的字符中。对于第一次上冲的左边缘的一部分,我们得到第二次上冲的右边缘作为它的对应边缘。而对于另一部分,我们得到第一次上行的右边缘。这在“W”区域的笔画宽度上引入了显着差异,导致根据论文将其称为非文本区域。

任何人都可以提出任何解决方案吗?

【问题讨论】:

  • 你好,如果你完成了,可以分享一下matlab中SWT的代码吗?您可以通过 abidrahman2@gmail.com 与我联系

标签: image-processing ocr image-segmentation


【解决方案1】:

在边缘检测之前使用Mean Shift Filter。 Mathematica 中的示例:

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

输出:

【讨论】:

  • 由于 Mathematica 中的 EdgeDetection 与 OP 不同,您也可以发布 EdgeDetection 而不使用 MeanShiftFilter 进行比较。
【解决方案2】:

查看Matlab documentationedgethe Wikipedia article on the Canny algorithm.

您可以致电edge(I, 'canny', thresh, sigma) 以获得更多控制权。玩弄低边缘和高边缘阈值。我会先尝试降低高阈值:由于内部边缘未连接到字母边缘,因此梯度幅度必须超过字母内部的高阈值。

您还可以在边缘检测之前增加sigma 以使图像更加模糊。 (您的高斯模糊是多余的,因为edge 为您模糊了图像。)

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多