图像文本检测中的边缘检测问题

12
我正在尝试在自然图像中检测文本,使用pEpshtein的论文(使用笔画宽度变换检测自然场景中的文本(2010))。第一步是边缘检测。
我的文本内部出现了一些额外的边缘。我应该如何去除这些边缘?
原始图像: enter image description here 我的边缘检测结果: enter image description here 在这个例子中,你可以看到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的建议,我发现均值漂移滤波器在文本区域分割方面效果很好。现在我在实现笔画宽度变换(请参阅Epshtein的论文)时遇到了另一个问题。

笔画宽度对像'H''Y'这样的字符甚至对'S'都有效,因为相应的边缘通常在梯度方向上保持恒定距离。

问题出在像'W'这样的字符上。对于第一个上笔画的左侧的一部分,我们得到了它的第二个上笔画的右侧边缘作为其相应的边缘。而对于另一部分,则得到了第一个上笔画的右侧边缘。这导致了'W'区域的笔画宽度显著变化,从而根据论文将其称为非文本区域。

有人能提供任何解决方案吗?


你好,如果你已经完成了Matlab中的SWT代码,能否分享一下呢?你可以通过abidrahman2@gmail.com与我联系。 - Abid Rahman K
2个回答

10

在边缘检测之前使用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与OPs不同,您也可以发布没有MeanShiftFilterEdgeDetection进行比较。 - arekolek

0

查看Matlab文档中的edgeCanny算法的维基百科文章

您可以调用edge(I, 'canny', thresh, sigma)进行更多控制。尝试调整低和高边缘阈值。我建议先降低高阈值:由于内部边缘未连接到字母边缘,因此梯度幅度必须在字母内部超过高阈值。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接