¿Alguien puede describir cómo puedo implementar SWT en python usando opencv o simplecv?Implementación de transformación de ancho de trazo (SWT) (Python)
Respuesta
Ok, así que aquí va:
El vínculo que tiene detalles sobre la aplicación con el enlace de código de descarga en la parte inferior: SWT
En aras de la exhaustividad, también mencionar que SWT o accidente cerebrovascular Ancho Transform se ideado por Epshtein y otros en 2010 y ha resultado ser uno de los métodos de detección de texto más exitosos hasta la fecha. No utiliza aprendizaje automático o pruebas elaboradas. Básicamente después de la detección de bordes Canny en la imagen de entrada, calcula el grosor de cada trazo que compone los objetos en la imagen. Como el texto tiene trazos uniformemente gruesos, esta puede ser una característica de identificación sólida.
La implementación dada en el enlace utiliza C++, OpenCV y la biblioteca Boost que utilizan para los recorridos de gráfico conectados, etc. después de calcular el paso SWT. Personalmente lo probé en Ubuntu y funciona bastante bien (y de manera eficiente), aunque la precisión no es exacta.
Muchas gracias, de nuevo – pylover
he implementado algo similar a la distancia transformar SWT basada describe en 'DETECCIÓN DE TEXTO robusto en imágenes naturales con las regiones Extremal LA MÁXIMA ESTABLE EDGE-MEJORADA 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, pero una aproximación aproximada que sirvió para mi propósito. Pensé que debería compartirlo para que alguien lo encuentre ú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
Los máximos locales de la Transformación de distancia producirán el ancho de la mitad de la carrera. Esa es una buena observación, aunque algunos documentos en 2011-2012 usaron esto exactamente en combinación con detectores regionales como MSER. – AruniRC
@AruniRC El papel en el enlace proporcionado proporciona detalles sobre este método. En realidad, esta mitad de ancho de carrera no es mi observación. Realmente lo siento si mi escritura hace que parezca que es mío. Todo el crédito de esto debería ir a los autores de este documento. – dhanushka
Oh, no quise decir eso de ninguna manera. Solo una observación. Y lo siento, es mi culpa por no haber visto el enlace impreso del ICIP anteriormente. De hecho, usar la transformación de distancia para obtener el ancho medio es mucho más fácil y elegante en términos de implementación. Personalmente, había usado un operador laplaciano para obtener los extremos locales de dist. trans. imagen, pero tu forma de dilatar es más limpia. – AruniRC
- 1. Cómo hacer que el ancho de trazo sea inmune a la matriz de transformación actual
- 2. Stroke Ancho Transform (SWT) aplicación (Java, C# ...)
- 3. Ancho de trazo fijo en SVG
- 4. ancho/alto después de la transformación
- 5. Python - lista de transformación
- 6. Implementación de la transformación operacional (no javascript)
- 7. Android: trazo en una forma crear un margen del ancho de trazo
- 8. Una implementación más avanzada de tabla/hoja de cálculo SWT
- 9. Filtrado y transformación de listas de Python
- 10. ¿Implementación real de la transformación del eje medial?
- 11. Implementación de Python de Parsec?
- 12. Cómo establecer un ancho de trazo: 1 solo en ciertos lados de las formas SVG?
- 13. Esquema de la curva de bezier cúbica trazo
- 14. Obtenga la transformación de escalado de CGAffineTransform
- 15. Python: Mejor implementación de diccionario
- 16. implementación Python de avro lento?
- 17. Transformación de imágenes en OpenCV
- 18. ¿Existe una implementación de nube de etiquetas estándar o de código abierto para SWT?
- 19. Línea de trazo de trazo SVG/CSS con dos colores: ¿es posible?
- 20. implementación de cola de trabajos para python
- 21. Implementación de Python de Jenkins Hash?
- 22. Implementación de Python del algoritmo de Viterbi
- 23. Variables de transformación Web.config
- 24. Algoritmo de transformación afín
- 25. Transformación de imagen Java
- 26. Disminución del ancho de banda en Python
- 27. Crear trazo de texto para UILabel iphone
- 28. Transparencia de un trazo lleno en HTML5
- 29. Implementación del patrón de repositorio en Python?
- 30. Implementación de Python del algoritmo OPTICS (Clustering)
si está buscando una implementación en papel, puede agregar un enlace a ese documento, o al menos proporcionar un enlace a lo que es SWT. –
puede ser útil: http://stackoverflow.com/questions/4837124/stroke-width-transform-swt-implementation-java-c –
ya los vi, pero el enlace estaba roto, y no hay ningún código o código psudo disponible . – pylover