En esta tarea tenemos que detectar lo que son los bordes en una imagen, para lo cual se realiza lo siguiente:
- Primero convertimos la imagen a escala de grises
- Le aplicamos filtro
- Aplicamos convolución
- Aplicamos normalización
- Aplicamos binarización
La imagen original es:
Escala de grises: En esta parte se convierte la imagen en escala de grises.
Código
Imagen obtenida:
Le aplicamos filtro:
Para usar el filtro ya trabajamos con la imagén en escala de grises
- Seleccionamos los vecinos de cada uno de los pixeles
- Sumamos la escala de grises q le pertenece a cada pixel vecino
- Sacamos un promedio de la suma de lo anterior
- Y lo asignamos al pixel
Código:
Imagen obtenida
Para aplicar convolución utilizamos el operador de sobel, aplicamos el gradiente horizontal y vertical al mismo tiempo obteniendo la magnitud del gradiente, para más información sobre este tema.
Código
Imagen obtenida
Aplicamos normalización
Para aplicar normalización se hace de la siguiente manera:
De la imagen que nos arrojo la convolución seleccionamos el valor del pixel mas alto y mas bajo:
r = smaximo-minimo
prop = 255.0/r
p =int(floor((p-minimo)*prop))
El resultado lo aplicamos al pixel
Código:
Imagen obtenida
Aplicamos binarización
Le damos al programa un valor el cual ayudara a binarizar la imagen, por ejemplo valor=34
si el velor del pixel es mayor al valor 34 el pixel se hace blanco si es menor el pixel se hace negro.
Código:
Imagen obtenida
Tiempo que tardo en ejecutarse escala de grises = 1.02590990067 segundos
Tiempo que tardo en ejecutarse filtro = 2.71544289589 segundos
Tiempo que tardo en ejecutarse convolucion = 2.23032712936 segundos
Tiempo que tardo en ejecutarse normalizar = 2.07841897011 segundos
Tiempo que tardo en ejecutarse binzarizar = 0.44579911232 segundos
Muy bien, salvo que hay pequeños detalles de ortografía. 5 pts.
ResponderEliminar