12

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

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

原图:

在此处输入图像描述 我的边缘检测: 在此处输入图像描述

在示例中,您可以在文本“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 变换时遇到了另一个问题(请看 Epshtein 的论文)。

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

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

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

4

2 回答 2

10

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

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

输出:

在此处输入图像描述在此处输入图像描述

于 2011-10-15T19:01:18.227 回答
0

查看有关 Canny 算法的Matlab文档edgeWikipedia 文章。

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

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

于 2011-10-15T19:36:45.550 回答