read - Implementación de transformación de ancho de trazo(SWT)(Python)
python text recognition (2)
Implementé algo similar a la transformación por distancia SWT basada en '' DETECCIÓN DE TEXTO ROBUSTO EN IMÁGENES NATURALES CON REGIONES EXTREMALES MÁXIMAMENTE ESTABLES MEJORADAS POR EDUCACIÓN por Huizhong Chen, Sam S. Tsai, Georg Schroth, David M. Chen, Radek Grzeszczuk, Bernd Girod '' .
No es lo mismo que se describe en el documento, sino una aproximación aproximada que sirvió a mi propósito. Pensé que debería compartirlo para que alguien pueda encontrarlo útil (y señalar cualquier error / mejora). Se implementa en C ++ y utiliza 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
¿Alguien puede describir cómo puedo implementar SWT en Python usando opencv o simplecv?
Ok así que aquí va:
El enlace que contiene detalles sobre la implementación con el enlace de descarga de código en la parte inferior: sites.google.com/site/roboticssaurav/strokewidthnokia
En aras de la exhaustividad, también mencionó que SWT o Stroke Width Transform fue ideado por Epshtein y otros en 2010 y se ha convertido en uno de los métodos de detección de texto más exitosos hasta la fecha. No utiliza aprendizaje automático ni pruebas elaboradas. Básicamente, después de la detección de borde Canny en la imagen de entrada, calcula el grosor de cada trazo que forma los objetos en la imagen. Como el texto tiene trazos uniformemente gruesos, esto puede ser una característica de identificación robusta.
La implementación dada en el enlace utiliza C ++, OpenCV y la biblioteca Boost que utilizan para los recorridos de gráficos conectados, etc., una vez que se calcula el paso SWT. Personalmente lo he probado en Ubuntu y funciona bastante bien (y de manera eficiente), aunque la precisión no es exacta.