Closed domingomery closed 4 years ago
¡Hola!, quería consultar qué librería recomendaría para la extracción de características en la Tarea 01.
Gracias!
Hola Vicente, puedes usar solo funciones de procesamiento de imagenes (input = imagen, output = imagen). No esta permitido usar librerias de extraccion de caracteristicas, la ideas es que estas funciones las implementes tú mismo. Saludos. Domingo
@domingomery entonces se podrían usar las funciones de la librería scikit-image
que permiten: transformar a escala de grises, identificar las letras y luego calcular cosas como area, perímetro, centroide, etc.. ?
@domingomery entonces se podrían usar las funciones de la librería
scikit-image
que permiten: transformar a escala de grises, identificar las letras y luego calcular cosas como area, perímetro, centroide, etc.. ?
se puede usar sólo funciones en las que el input es una imagen y el output es una imagen, no se puede usar librerías que calculen características.
Hola! Con respecto librerías y funciones que se pueden ocupar, tengo una duda con la detección de cada carácter. La idea sería poder extraer una imagen para cada letra y mi duda es si esta separación se puede hacer con una librería o nosotros tenemos que buscar la forma de separarla viendo separaciones entre arrays o cosas del estilo (en el fondo si esta parte es parte del procesamiento).
Gracias!
se puede usar librerías de segmentación para separar cada uno de los caracteres
¿Qué librerías de segmentación recomienda para python?
¿Qué librerías de segmentación recomienda para python?
se puede usar por ejemplo scikit-image, pero insisto sólo funciones en las que el input es una imagen y el output es una imagen, no se puede usar de esta librería que calculen características
En ese caso se puede usar funciones que calculen bordes, pero solo usarlas para recortar las imagenes ?
En ese caso se puede usar funciones que calculen bordes, pero solo usarlas para recortar las imagenes ?
puedes usarlas si las funciones que calculan bordes entregan como output una imagen.
1.- ¿Podemos nosotros manualmente dividir las imagenes en varias sub-imagenes que ingresen al programa (por ejemplo, A_1.png A_2.png, S_1.png...), o es parte del algoritmo que éste detecte la ubicación de las letras?
2.- ¿Una función que toma un archivo de imagen y lo pasa a la representación matricial de la imagen (es decir, la matriz con escala de grises) se considera como un algoritmo de input imagen - output imagen?
1.- ¿Podemos nosotros manualmente dividir las imagenes en varias sub-imagenes que ingresen al programa (por ejemplo, A_1.png A_2.png, S_1.png...), o es parte del algoritmo que éste detecte la ubicación de las letras?
Sí, se puede
2.- ¿Una función que toma un archivo de imagen y lo pasa a la representación matricial de la imagen (es decir, la matriz con escala de grises) se considera como un algoritmo de input imagen - output imagen?
Sí, se puede una función de este tipo.
Hola! Pregunta rápida, ¿podemos usar todo lo visto en clases hasta la fecha de entrega de la tarea para resolverla? Por ejemplo los Momentos de Hu o los Descriptores de Fourier.
Gracias.
Hola!
Saludos!
Hola! Pregunta rápida, ¿podemos usar todo lo visto en clases hasta la fecha de entrega de la tarea para resolverla? Por ejemplo los Momentos de Hu o los Descriptores de Fourier.
Gracias.
si, pueden usar todo lo visto en clase, pero el código para extraer características deben hacerlo ustedes, ya que no está permitido el uso de librerías para extraer características.
- Por temas del enunciado asumo que no podemos hacer uso de la función regionprops() para extracción de algunas características.
así es, no está permitido el uso de librerías para extraer características.
- En caso de que aplique lo anterior, tiene algún consejo sobre cómo programar la extracción de estas características (no aparecen ecuaciones de modelamiento en el PPT y en los foros que he visitado suelen recurrir a regionprops() u otras funciones predefinidas). Asumo que tampoco es válido usar PAT02_GeoEllipses.m pues se recurre a una función Bfx que asumo debe ser de la toolbox del curso.
Esto es parte de procesamiento de imágenes, puedes usar funciones que saquen el borde de la figura, luego estos puntos aproximarlos a una curva (elipse por ejemplo) usando mínimos cuadrados (hay detalles en mi libro de cómo sacar las características de una elipse en la sección 5.2.2 página 155). Puedes inventarte tú también características que funcionen para este problema específico.
- ¿Cómo aconseja la estimación de la linea/plano de decisión? ¿Debería ser 'al ojo' o la idea es utilizar algún método más riguroso como knn, mínimos cuadrados, etc?
Al ver los histogramas de características que separen bien, un umbral debería ser suficiente (lo puedes determinar de forma manual). También podrías usar los métodos que mencionas si los implementas tú mismo, no está permitido el uso de librerías para clasificación.
- ¿La 'suavidad' de los histogramas está condicionada a la cantidad de datos o es posible hacer que queden 'bien parecidos'? En comparación con las gráficas casi gaussianas del documento de referencia, logro unas gráficas que, si bien separan algunas clases, se ven bastante erráticas (usé histogram(x) y plot(x)). ¿Conoce alguna forma de 'embellecer' un poco la visualización de los datos?
El histograma puede suavizarse si lo tratas como una señal de 1D y la filtras (usando un filtro pasa bajos). Muchas veces no es necesario suavizar el histograma y el umbral con el histograma original funciona bien.
Saludos!
Para ti también:)
Hola profesor,
Entiendo que no podemos ocupar librerías para extraer características. Pero quería ocupar connectedComponentsWithStats de OpenCV para el preprocesamiento de los datos, para poder separar cada caracter y trabajar en el etiquetado, en vez de tener que hacerlo a mano. ¿Asumo que eso se puede?
Saludos!
Hola profesor,
Entiendo que no podemos ocupar librerías para extraer características. Pero quería ocupar connectedComponentsWithStats de OpenCV para el preprocesamiento de los datos, para poder separar cada caracter y trabajar en el etiquetado, en vez de tener que hacerlo a mano. ¿Asumo que eso se puede?
Saludos!
Hola Alain, no conozco el detalle de la función de OpenCV que mencionas, sin embargo, debes usar el mismo criterio: si el input es imagen y el output es imagen entonces se puede usar. Obviamente, si el output es imagen + características y usas sólo la imagen (y no las características) se puede.
Repito, lo que no está permitido es usar las características que compute una función de una librería.
Hola!
En la clase 3, Usted mostró un código donde iba indicando qué carácter era un 1, qué carácter era un 2, ... ¿Está permitido hacer lo mismo en la Tarea o el código no puede pedir como input letra (en la parte de Training)?
Saludos!
Hola!
En la clase 3, Usted mostró un código donde iba indicando qué carácter era un 1, qué carácter era un 2, ... ¿Está permitido hacer lo mismo en la Tarea o el código no puede pedir como input letra (en la parte de Training)?
Saludos!
Hola Daniel,
espero haberte entendido:
1) para la tarea debes pensar en una solución modular, en que uno de los módulos sea una función que reciba como input una imagen que es un solo carácter y entregue como salida si es una A, S, D, F, o G.
2) Para la evaluación de la tarea el ayudante no va hacer la pega de la supervisión en el Training, (esto es, él no va a decir qué carácter pertenece cada imagen, como yo hice en el ejemplo con los 1, 2, 3). Para esto te pediría que la supervisión esté previamente hecha, es decir, guarda en un vector el input de la supervisión tal cual como si se ingresara por teclado.
No sé si me he explicado bien, de lo contrario lo aclaro el jueves en la clase. Saludos. Domingo
Hola profesor, una pregunta, si ya tengo los parametros que separarán cada letra, puedo utilizar K-NN para decidir la clasificacion ? o debe ser un plano exacto?
Hola profesor, una pregunta, si ya tengo los parametros que separarán cada letra, puedo utilizar K-NN para decidir la clasificacion ? o debe ser un plano exacto?
Hola Francisca, puedes usar KNN si lo implementas tú misma. La implementación es simple.
Repito, no se pueden usar librerías de clasificación. En esta actividad, salvo lo de procesamiento de imágenes, la extracción y la clasificación la deben implementar ustedes mismos.
Saludos
Eso pregunto, puedo usar KNN programandolo yo?
El mié., 25 mar. 2020 8:16, Domingo Mery notifications@github.com escribió:
Hola profesor, una pregunta, si ya tengo los parametros que separarán cada letra, puedo utilizar K-NN para decidir la clasificacion ? o debe ser un plano exacto?
Hola Francisca, puedes usar KNN si lo implementas tú misma. La implementación es simple.
Repito, no se pueden usar librerías de clasificación. En esta actividad, salvo lo de procesamiento de imágenes, la extracción y la clasificación la deben implementar ustedes mismos.
Saludos
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/7#issuecomment-603783196, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGJMCABIZRND5NFVQGHBFWLRJHRXVANCNFSM4LEMLQYQ .
Eso pregunto, puedo usar KNN programandolo yo?
Sí, eso se puede hacer, como te decía, puedes usar KNN si lo implementas tú misma. La implementación es simple. Saludos
Hola profesor,
Ya he creado código para hacer el cálculo de características (Flusser y Hu, más las básicas) y he estado estudiando los histogramas para hacer las mejores separaciones posibles. Sin embargo, estoy llegando al punto en que es difícil encontrar mejores separaciones. Dado esto, para obtener una cota superior al rendimiento que puedo llegar con mis características es posible usar sklearn para entrenar un árbol de decisión? Entiendo que dijo que no se podían ocupar librerías para la clasificación, pero la quiero ocupar para poner una cota superior al método manual que estoy haciendo y para no persistir hasta el infinito por ganancias menores. Luego no participaría con la clasificación del árbol sino con las separaciones que ya encontré.
Saludos!
Hola profesor,
Ya he creado código para hacer el cálculo de características (Flusser y Hu, más las básicas) y he estado estudiando los histogramas para hacer las mejores separaciones posibles. Sin embargo, estoy llegando al punto en que es difícil encontrar mejores separaciones. Dado esto, para obtener una cota superior al rendimiento que puedo llegar con mis características es posible usar sklearn para entrenar un árbol de decisión? Entiendo que dijo que no se podían ocupar librerías para la clasificación, pero la quiero ocupar para poner una cota superior al método manual que estoy haciendo y para no persistir hasta el infinito por ganancias menores. Luego no participaría con la clasificación del árbol sino con las separaciones que ya encontré.
Saludos!
Hola Alain, puedes usarlo como referencia para lo que indicas, pero de ninguna manera para basar tu solución en el árbol de decisión propuesto por sklearn. Saludos
Hola profesor,
Se puede entregar la tarea completa en un jupyter notebook de python 3, con todo explicado bajo el código, dejando una sección para lo que se pide en el informe, o necesariamente tenemos que entregar un informe en pdf y el código aparte?
Hola Diego, el codigo puede ser jupyter notebook, pero el informe debe ser un pdf de una pagina como se señala en el enunciado. Saludos
On Fri, Mar 27, 2020 at 7:05 PM Diego Echeverría notifications@github.com wrote:
Hola profesor,
Se puede entregar la tarea completa en un jupyter notebook de python 3, con todo explicado bajo el código, dejando una sección para lo que se pide en el informe, o necesariamente tenemos que entregar un informe en pdf y el código aparte?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/7#issuecomment-605334560, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAD3BSVNNUTRTNXPBB7RIYLRJUPKFANCNFSM4LEMLQYQ .
Hola profesor,
Estaría permitido utilizar la función de matlab bwboundaries()
? Esta entrega no entrega una imagen como tal, pero más arriba te vi mencionar:
Esto es parte de procesamiento de imágenes, puedes usar funciones que saquen el borde de la figura, luego estos puntos...
Entonces me entró la duda.
Saludos
Hola profesor,
Estaría permitido utilizar la función de matlab
bwboundaries()
? Esta entrega no entrega una imagen como tal, pero más arriba te vi mencionar:Esto es parte de procesamiento de imágenes, puedes usar funciones que saquen el borde de la figura, luego estos puntos...
No se puede usar bwboundaries porque el output no es una imagen (sino que las coordenadas de los pixeles de los bordes ordenados). En mi comentario anterior, con sacar bordes, me refiero a usar una función cuyo output sea una imagen binaria que muestre los bordes. En Matlab esta función se llama 'edge' o bien 'bwperim'.
Saludos
Hola, ¿Hay límites respecto al tiempo que tarde en correr el programa? Iterar por toda la foto son unos 12 segundos en mi pc, hice algo para reducirlo pero igual después queda en 1 o 2 segundos por pasada, más o menos :c
Gracias :D
Hola, ¿Hay límites respecto al tiempo que tarde en correr el programa? Iterar por toda la foto son unos 12 segundos en mi pc, hice algo para reducirlo pero igual después queda en 1 o 2 segundos por pasada, más o menos :c
En principio no hay límite de tiempo, pero les pido piedad con los ayudantes :)
Menos de 5 segundos por imagen me parece que está bien
Saludos
c2v importado - 0.24335718154907227 s
matplotlib importado - 0.3498411178588867 s
numpy importado - 0.0 s
utils (módulo propio) importado - 0.0009119510650634766 s
imagen leída - 0.0709238052368164 s
Recorrer imagen - 2.34562349319458 s
Recorrer imagen por cuadrantes - 5.512441635131836 s
No es por maldad, pero estos son los tiempos que tardan algunas de las operaciones que tengo que hacer. Esos 2.3 segundos de recorrer la imagen es por recorrerla 1 sola vez :c
Ojo que lo único que hago en esos tiempos de prueba en recorrer la imagen normal y por cuadrantes es acceder al pixel, nada más (img[row, col]
).
Sube tanto cuando la recorro por cuadrantes porque no hay cómo hacer que la caché me ayude para eso :/
como decia en el comentario anterior, no hay limite en el tiempo... solo espero que sea algo razonable para que los ayudantes puedan corregir 90 tareas. Gracias
Se puede usar el método
.load()
de claseImage
dePIL
, que retorna una instancia de la clasePixelAccess
, tambien de PIL, que permite acceder a cada pixel de la imagen, o debo hacer la separación de pixeles a mano iterando sobre la imagen?
Sí, esta función que lee una imagen, con la cual tienes acceso a cada uno de sus pixeles se puede usar. Saludos para ti también
Hola profe! Tengo tres preguntas.
Para calcular los descriptores de fourier se necesita obtener las coordenadas de los pixeles del borde del objeto (característica de la imagen obtenida por funciones hechas por nosotros mismos), y luego aplicar la transformada discreta de fourier a los números complejos resultantes. Dado que la FFT no es una función que extrae características de imagenes (su input no es una imagen) y tan solo realiza operaciones matemáticas, ¿podemos utilizar las FFTs implementadas en librerías?¿La de numpy por ejemplo?
¿Cual es el input que debe recibir el programa para que los ayudantes lo prueben? Por lo que veo el input debe de ser una combinación de las siguientes opciones:
Gracias de antemano.
Profe otra pregunta,
La función connectedComponentsWithStats de OpenCV mencionada mas arriba retorna, entre otras cosas, un numpy array del mismo tamaño que la imagen en donde cada pixel tiene valor cero si en la imágen original ese pixel tenía el valor de cero, y el valor del id de la componente a la que pertenece en el caso contrario. Esto se puede interpretar como una imágen en donde cada componente tiene un todo de gris distinto de las demas y tiene el mismo todo de gris para toda la componente. ¿Podemos usar esta información que ofrece dicha función si ignoramos las características que ofrece?
Gracias.
Hola buenas tardes, la matriz de confusión se debe hacer con las imagenes de testing? o las de training?
Hola profesor, ¿se puede utilizar la función find() de matlab en una imagen? Según yo no entrega características de la imagen.
Hola buenas tardes, la matriz de confusión se debe hacer con las imagenes de testing? o las de training?
en el informe se debe reportar la matriz de confusión del testing solamente, la del training también la puedes reportar, pero en esta tarea no es obligatorio, porque hay personas que están diseñando el sistema de reconocimiento sin hacer un entrenamiento.
Hola profesor, ¿se puede utilizar la función find() de matlab en una imagen? Según yo no entrega características de la imagen.
sí, se puede usar find de Matlab.
Profe otra pregunta,
La función connectedComponentsWithStats de OpenCV mencionada mas arriba retorna, entre otras cosas, un numpy array del mismo tamaño que la imagen en donde cada pixel tiene valor cero si en la imágen original ese pixel tenía el valor de cero, y el valor del id de la componente a la que pertenece en el caso contrario. Esto se puede interpretar como una imágen en donde cada componente tiene un todo de gris distinto de las demas y tiene el mismo todo de gris para toda la componente. ¿Podemos usar esta información que ofrece dicha función si ignoramos las características que ofrece?
Gracias.
ok, si el output es una imagen esta bien, se puede usar.
- Para calcular los descriptores de fourier se necesita obtener las coordenadas de los pixeles del borde del objeto (característica de la imagen obtenida por funciones hechas por nosotros mismos), y luego aplicar la transformada discreta de fourier a los números complejos resultantes. Dado que la FFT no es una función que extrae características de imagenes (su input no es una imagen) y tan solo realiza operaciones matemáticas, ¿podemos utilizar las FFTs implementadas en librerías?¿La de numpy por ejemplo?
se puede usar FFT.
- ¿Cual es el input que debe recibir el programa para que los ayudantes lo prueben? Por lo que veo el input debe de ser una combinación de las siguientes opciones:
Se espera que desarrollen una función que tenga como input una imagen con un solo carácter, y como output un numero 1, 2, 3, 4, o 5, si es A, S, D, F, G o H respectivamente.
- ¿Cual es el output que se espera de nuestro programa? Imagino que dada una imagen con una letra debemos dar un label propuesto y para una imagen con muchas letras basta con una lista de dichos labels, pero, ¿debemos imprimirlos por consola? ¿retornar la estructura de datos mediante una función? ¿alguna otra preferencia?
ver respuesta anterior
Profesor, para asegurarme, ¿mi programa tiene que recibir de input una imagen con una letra o una imagen con al menos una letra (pueden ser más, ahí se tendría una función previa para segmentar las letras y luego llamaría por cada letra a la función que clasifica)?
Hola profe! Dado que estamos realizando aprendizaje supervisado, ¿puedo utilizar un json
para guardar e informar a qué caracter corresponde cada letra en las imágenes de entrenamiento?
Si el clasificador tiene 100% de precisión, no sería útil poner la matriz de confusión, ¿cierto?
Hola! ¿Las imágenes de las letras con las que probarán el programa se asume que tendrán el fondo negro en un 100% (0 en la escala de grises), tal como en las imágenes entregadas en el repositorio? ¿O podrían tener un fondo NO completamente negro?
¿Si es lo segundo entonces qué valores de escala de grises debería considerar como el fondo al momento de realizar la segmentación (al ojo encuentro que 30 hacia abajo se ve como fondo negro)?
Profesor, para asegurarme, ¿mi programa tiene que recibir de input una imagen con una letra o una imagen con al menos una letra (pueden ser más, ahí se tendría una función previa para segmentar las letras y luego llamaría por cada letra a la función que clasifica)?
ver especificacion de codigo en el enunciado de la tarea.
Si el clasificador tiene 100% de precisión, no sería útil poner la matriz de confusión, ¿cierto?
igual debes reportar la matriz de confusion.
Hola profe! Dado que estamos realizando aprendizaje supervisado, ¿puedo utilizar un
json
para guardar e informar a qué caracter corresponde cada letra en las imágenes de entrenamiento?
se puede, pero por favor indica todo correctamente para que la correccion de tu tarea sea facil
Hola! ¿Las imágenes de las letras con las que probarán el programa se asume que tendrán el fondo negro en un 100% (0 en la escala de grises), tal como en las imágenes entregadas en el repositorio? ¿O podrían tener un fondo NO completamente negro?
¿Si es lo segundo entonces qué valores de escala de grises debería considerar como el fondo al momento de realizar la segmentación (al ojo encuentro que 30 hacia abajo se ve como fondo negro)?
las imagenes son binarias, fondo = 0, letra = 1
Por favor hacer comentarios aquí. Respondo todas las preguntas siempre y cuando no las haya aclarado en clases o no estén escritas en el enunciado de la Tarea. Saludos. Domingo