En esta publicación, analizaremos las diez transformaciones funcionales de PyTorch más utilizadas en la visión artificial y el procesamiento de imágenes mediante PyTorch . PyTorch proporciona la biblioteca de torchvision para realizar diferentes tipos de tareas relacionadas con la visión artificial. Se puede acceder a las transformaciones funcionales desde el módulo torchvision.transforms.funcional . Una transformación funcional da más control de la transformación ya que no contiene un generador de números aleatorios como parámetro. Podemos especificar/generar todos los parámetros en transformaciones funcionales.
La mayoría de las transformaciones funcionales aceptan imágenes PIL e imágenes de tensor. Una imagen de tensor es un tensor con forma (C, H, W), donde C es el número de canales, H y W son la altura y el ancho de la imagen. Antes de entrar en detalles de cada una de las transformaciones, primero importemos la biblioteca/paquete/módulo requerido y leamos la imagen:
Python3
import torchvision.transforms.functional as F import torch from PIL import Image image = Image.open('nature.jpg')
Importamos el módulo torchvision.transforms.funcional como F. En todas las transformaciones funcionales que se analizan a continuación, usamos F en lugar de torchvision.transforms.funcional . Leemos la imagen de abajo como una imagen PIL. Usamos la imagen de abajo como la imagen de entrada para todas las transformaciones.
Ahora analicemos las transformaciones de función en detalle. Tenga en cuenta que si la entrada es una imagen PIL, la salida también es una imagen PIL y lo mismo para la imagen Tensor.
1. función de ajuste_brillo():
Esta transformación funcional ajusta el brillo de una imagen. Acepta tanto la imagen PIL como la imagen Tensor. Devuelve una imagen PIL (o Tensor) con ajuste de brillo. Le pasamos bright_factor como parámetro. El factor_brillo es cualquier número de punto flotante no negativo. Vea cómo cambia la salida con diferentes bright_factor –
- bright_factor = 0, imagen de salida en negro.
- bright_factor = 1, la imagen original.
- 0 < brightness_factor r <1, una imagen de salida más oscura.
- bright_factor > 1, una imagen de salida más brillante.
Ejemplo:
En el fragmento de código a continuación, ajustamos el brillo de la imagen con bright_factor como 3.0.
Python3
output = F.adjust_brightness(image, brightness_factor=3.0) output.show()
Producción:
2. función de ajuste de contraste(): punto flotante
Podemos usar la transformación funcional adjust_contrast para cambiar el contraste de la imagen. Acepta tanto la imagen PIL como la imagen Tensor y devuelve una imagen PIL (o imagen Tensor) con ajuste de contraste. Le pasamos contrast_factor como parámetro. El contrast_factor es cualquier número de punto flotante no negativo. Vea cómo se ve la salida de esta transformación:
- Imagen gris sólido si contrast_factor = 0.
- La imagen original si contrast_factor = 1,
- Para reducir el contraste, use 0 < contrast_factor < 1.
- Para aumentar el contraste, use contrast_factor > 1.
Ejemplo:
En el fragmento de código, cambiamos el contraste de la imagen con contrast_factor como 4.2. Echa un vistazo a la salida. Tenga en cuenta que si la entrada es una imagen PIL, la salida también es una imagen PIL y lo mismo para la imagen Tensor.
Python3
output = F.adjust_contrast(image,contrast_factor=4.2) output.show()
Producción:
3. función de ajuste_hue():
El tono de una imagen se puede ajustar usando la transformación de ajuste_hue . Como lo mismo en las transformaciones anteriores, también acepta tanto la imagen PIL como la imagen Tensor.
Para ajustar el tono, la imagen primero se convierte al espacio de color HSV (tono, saturación, valor). El tono de la imagen se ajusta convirtiendo la imagen a HSV y los cambios se realizan en el canal de tono (H). Luego, la imagen se convierte de nuevo a la imagen original.
El parámetro importante para esta transformación es hue_factor . Su valor de rango es [-0.5, 0.5]. 0,5 y -0,5 dan todo lo contrario del canal de tono en el espacio de color HSV en dirección positiva y negativa respectivamente. Por lo tanto, tanto hue_factor=-0.5 como hue_factor=0.5 dan una imagen con colores complementarios mientras que hue_factor=0 da la imagen original.
Ejemplo:
En el código cortado, cambiamos el contraste de la imagen con hue_factor como -0.3.
Python3
output = F.adjust_hue(image,hue_factor=-0.3) output.show()
Producción:
4. función de ajuste_saturación():
Otra transformación funcional importante es ajuste_saturación . Para mejorar la saturación de una imagen podemos usar esta transformación. Acepta tanto la imagen PIL como la imagen Tensor. El saturation_factor se pasa como parámetro. El factor_saturación es un valor de punto flotante.
Ejemplo:
En el código cortado, mejoramos la saturación de la imagen de entrada con saturation_factor = 7.0.
Python3
output = F.adjust_saturation(image,saturation_factor=7.0) output.show()
Producción:
5. Función de ajuste de nitidez():
Esta transformación ajusta la nitidez de la imagen. Funciona para imágenes PIL y Tensor. El parámetro de entrada sharpness_factor es un valor de punto flotante no negativo. Si sharpness_factor es cero, se devuelve la imagen borrosa. El valor sharpness_factor de 1 da la imagen original.
Ejemplo:
Con el siguiente fragmento de código, aumentamos la nitidez en un factor de 5,0.
Python3
output = F.adjust_sharpness(image,sharpness_factor=5.0) output.show()
Producción:
6. Función gaussian_blur():
El desenfoque gaussiano se utiliza para desenfocar o suavizar la imagen. Reduce el ruido en la imagen. Para desenfocar una imagen en PyTorch podemos aplicar la transformación funcional gaussian_blur. Acepta kernel_size y sigma junto con la imagen de entrada como parámetros. kernel_size es el tamaño de kernel gaussiano. Es una secuencia de enteros positivos e impares como (kx, ky) o un solo entero (positivo e impar) para núcleos cuadrados. sigma , un parámetro opcional, es la desviación estándar del núcleo gaussiano.
Ejemplo:
Usando el fragmento de código a continuación, puede suavizar o difuminar la imagen. Puede realizar los cambios necesarios en kernel_size y sigma para el desenfoque requerido.
Python3
output = F.gaussian_blur(image, kernel_size = (11,13), sigma = None) output.show()
7. Función pil_to_tensor():
Podemos convertir una imagen PIL en un tensor usando esta transformación. Convierte la imagen PIL en un tensor con el mismo tipo de d que la imagen de entrada.
Python3
img_tensor = F.pil_to_tensor(pil_image)
8. función to_pil_image():
Podemos convertir un tensor o un ndarray en una imagen PIL usando la transformación to_pil_image .
Python3
pil_img = F.to_pil_image(img_tesnor)
9. función normalizar():
Otra transformación funcional importante es la normalizada. Acepta solo las imágenes de tensor y flota dtype como entrada. Entonces, necesitamos convertir una imagen PIL en una imagen Tensor y lanzarla para que flote. Ya hemos visto cómo convertir una imagen PIL en un tensor y un tensor en una imagen PIL.
Ejemplo:
Normalizamos la imagen con mean y std. Calculamos la media y el estándar de la imagen de entrada. Puede usar la media y la estándar del conjunto de datos de ImageNet.
Python3
img_tensor = F.pil_to_tensor(image) img_tensor = img_tensor.type(torch.float) mean, std = img_tensor.mean(), img_tensor.std() img = F.normalize(img_tensor, mean=mean, std=std) output = F.to_pil_image(img) output.show()
Producción:
10. función invertir():
Podemos invertir el color de una imagen de entrada usando la función transform invert .
Python3
output = F.invert(image) output.show()
Publicación traducida automáticamente
Artículo escrito por shahidedu7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA