El kernel de bordes horizontales puede quedar como
img_new_horizontal = nd.convolve(img_gray,kernel.T)
Con el kernel original que definimos en la clase
Redes convolucionales y su importancia
La importancia del computer vision
¿Qué herramientas usaremos para redes neuronales convolucionales?
¿Qué son las redes convolucionales?
Mi primera red neuronal convolucional
Creando nuestra primera red convolucional
Entrenando nuestra primera red convolucional
Manejo de imágenes
Consejos para el manejo de imágenes
Manejo de imágenes con Python
Fundamentos de redes neuronales convolucionales
Kernel en redes neuronales
El kernel en acción
Padding y Strides
Capa de pooling
Arquitectura de redes convolucionales
Quiz: Fundamentos de redes neuronales convolucionales
Resolviendo un problema de clasificación
Clasificación con redes neuronales convolucionales
Creación de red convolucional para clasificación
Entrenamiento de un modelo de clasificación con redes convolucionales
Optimización de red neuronal convolucional
Data augmentation
Aplicando data augmentation
Callbacks: early stopping y checkpoints
Batch normalization
Optimización de modelo de clasificación
Entrenamiento de nuestro modelo de clasificación optimizado
Quiz: Optimización de red neuronal convolucional
Resolviendo una competencia de Kaggle
Clasificando entre perros y gatos
Entrenamiento del modelo de clasificación de perros y gatos
Resumen y siguientes pasos
Siguientes pasos con redes neuronales convolucionales
Comparte tu proyecto de clasificación con redes convolucionales y certifícate
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 14
Preguntas 1
El kernel de bordes horizontales puede quedar como
img_new_horizontal = nd.convolve(img_gray,kernel.T)
Con el kernel original que definimos en la clase
Por si se preguntaban qué pasa con un Kernel = 0’s
Algunos ejemplos de los kernel
kernel = np.array([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]])
kernel = np.array([[ 1, 0, 1],
[ 0, 0, 0],
[ 1, 0, 1]])
kernel = np.array([[ 0, 0, 0],
[ 0, -1, 0],
[ 0, 0, 0]])
Jugando y creando nuevos kernel
Kernel para bordes verticales:
kernel1 = np.array([[-1,-1,-1],
[0,0,0],
[1,1,1]])
Lo convertí en función para ir probando varios kernels más fácil.
def test_kernels(img: np.ndarray, kernel: np.ndarray):
img_new = nd.convolve(img_gray, kernel)
fig, axes = plt.subplots(1,2, figsize=(15,10))
axes[0].imshow(img, cmap=plt.cm.gray)
axes[0].set_title('Original')
axes[0].axis('off')
axes[1].imshow(img_new, cmap=plt.cm.gray)
axes[1].set_title('New')
axes[1].axis('off')
test_kernels(img_gray, kernel)
# test con matriz identidad
test_kernels(img_gray, [[1,0,0],[0,1,0],[0,0,1]])
Ustedes sabían que si usan este kernel pueden trasladar la imagen? 😆
s = 55 # kernel's size
kernel= np.zeros((s, s))
kernel[s-1][s//2] = 1
<#kernel, para bordes verticales
kernel = np.array([[-1, 0, 1],
[-1, 0, 1],
[-1, 0, 1]])
#utilizo la traspuesta de kernel
img_new = nd.convolve(img_gray, kernel.T)
fig, axes = plt.subplots(1,2, figsize=(15,10))
axes[0].imshow(img_gray ,cmap=plt.cm.gray)
axes[0].set_title('Original')
axes[0].axis('off')
axes[1].imshow(img_new ,cmap=plt.cm.gray)
axes[1].set_title('Convolucion')
axes[1].axis('off')
import cv2
cv2.imwrite('kernel.png',img_new)>
Probando el kernel para bordes horizontales
Código:
kernel_2 = np.array([[1,1,1],
[0,0,0],
[-1,-1,-1]])
img_2 = nd.convolve(img_gray, kernel_2)
fig, axes = plt.subplots(1,2, figsize = (15,10))
axes[0].imshow(img_gray, cmap=plt.cm.gray)
axes[0].set_title('Original')
axes[0].axis('off')
axes[1].imshow(img_2, cmap=plt.cm.gray)
axes[1].set_title('Convolution')
axes[1].axis('off')
Así puse lo que en mi intuición es un filtro para líneas diagonales hacia abajo:
Luego este fue el resultado:
Les comparto mi notebook:
https://colab.research.google.com/drive/1C76h7EpwVSLqDkPHN83RdV6Wqeg9ps0o?usp=sharing
Kernel para mostrar lineas horizontales
kernel = np.array([[-1, -2, -1],
[0, 0, 0],
[1,2, 1]])
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.