任何人都可以描述我如何使用OpenCV的或simplecv在Python中实现SWT?
Answer 1:
好了,所以这里有云:
这对在底部的代码下载链接的实现细节的链接: SWT
为了完整起见,还提的是SWT或笔划宽度变换由EPSHTEIN等人于2010年制定,并已被证明是最成功的文本检测方法直到日期之一。 它不使用机器学习或复杂的测试。 在输入图像上Canny边缘检测后基本上,它计算出在图像中弥补对象的每个笔划的厚度。 作为文本具有厚度均匀的笔划,这可以是一个强大的识别特征。
在链路中给出的实现方案是采用C ++,OpenCV的和升压他们使用所连接的图遍历等SWT步骤被计算后库。 我个人已经测试了Ubuntu和它的工作原理相当不错(和有效),但精度不准确的。
Answer 2:
我实现了类似于“ 稳健文本检测自然图像由汇众陈,山姆S.仔,乔治·施罗特,大卫·M·陈,拉狄克Grzeszczuk,贝恩德·吉罗德 与边缘增强后的最大稳定极值区域 ”所描述的距离变换基于SWT的东西。
如纸,但一个粗略的估计是担任我的目的描述它是不一样的。 认为我应该分享,让别人可能会觉得它有用的(并指出任何错误/改进)。 它是用C ++实现,并使用了OpenCV。
// bw8u : we want to calculate the SWT of this. NOTE: Its background pixels are 0 and forground pixels are 1 (not 255!)
Mat bw32f, swt32f, kernel;
double min, max;
int strokeRadius;
bw8u.convertTo(bw32f, CV_32F); // format conversion for multiplication
distanceTransform(bw8u, swt32f, CV_DIST_L2, 5); // distance transform
minMaxLoc(swt32f, NULL, &max); // find max
strokeRadius = (int)ceil(max); // half the max stroke width
kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 3x3 kernel used to select 8-connected neighbors
for (int j = 0; j < strokeRadius; j++)
{
dilate(swt32f, swt32f, kernel); // assign the max in 3x3 neighborhood to each center pixel
swt32f = swt32f.mul(bw32f); // apply mask to restore original shape and to avoid unnecessary max propogation
}
// swt32f : resulting SWT image
文章来源: Stroke Width Transform (SWT) implementation (Python)