用于计算机视觉的 PyTorch 功能转换
在这篇文章中,我们将讨论 10 个PyTorch函数转换,最常用于使用PyTorch进行计算机视觉和图像处理。 PyTorch提供了torchvision库来执行不同类型的计算机视觉相关任务。可以从torchvision.transforms.functional模块访问功能转换。函数变换提供了对变换的更多控制,因为它不包含随机数生成器作为参数。我们可以在函数转换中指定/生成所有参数。
大多数功能变换都接受 PIL 图像和张量图像。张量图像是形状为 (C, H, W) 的张量,其中 C 是通道数,H 和 W 是图像的高度和宽度。在详细介绍每个转换之前,让我们首先导入所需的库/包/模块并读取图像:
Python3
import torchvision.transforms.functional as F
import torch
from PIL import Image
image = Image.open('nature.jpg')
Python3
output = F.adjust_brightness(image, brightness_factor=3.0)
output.show()
Python3
output = F.adjust_contrast(image,contrast_factor=4.2)
output.show()
Python3
output = F.adjust_hue(image,hue_factor=-0.3)
output.show()
Python3
output = F.adjust_saturation(image,saturation_factor=7.0)
output.show()
Python3
output = F.adjust_sharpness(image,sharpness_factor=5.0)
output.show()
Python3
output = F.gaussian_blur(image, kernel_size = (11,13), sigma = None)
output.show()
Python3
img_tensor = F.pil_to_tensor(pil_image)
Python3
pil_img = F.to_pil_image(img_tesnor)
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()
Python3
output = F.invert(image)
output.show()
我们将torchvision.transforms.functional模块导入为 F。在下面讨论的所有功能转换中,我们使用 F 而不是使用torchvision.transforms.functional 。我们将下图读取为 PIL 图像。我们使用下面的图像作为所有变换的输入图像。
现在让我们详细讨论函数变换。请注意,如果输入是 PIL 图像,则输出也是 PIL 图像,对于 Tensor 图像也是如此。
1. 调整亮度()函数:
此功能变换调整图像的亮度。它接受 PIL 图像和张量图像。它返回经过亮度调整的 PIL(或张量)图像。我们将brightness_factor作为参数传递给它。亮度因子是任何非负浮点数。看看输出如何随着不同的brightness_factor变化——
- 亮度因子= 0,黑色输出图像。
- Brightness_factor = 1,原始图像。
- 0 < brightness_factor < 1,输出图像较暗。
- Brightness_factor > 1,输出图像更亮。
例子:
在下面的代码片段中,我们使用brightness_factor 为3.0 调整了图像的亮度。
Python3
output = F.adjust_brightness(image, brightness_factor=3.0)
output.show()
输出:
2.adjust_contrast()函数:浮点数
我们可以使用函数变换adjust_contrast来改变图像的对比度。它接受 PIL 图像和张量图像并返回对比度调整的 PIL(或张量图像)。我们将contrast_factor作为参数传递给它。 contrast_factor是任何非负浮点数。看看这个变换的输出是怎样的——
- 如果 contrast_factor = 0,则为实心灰色图像。
- 如果 contrast_factor = 1,则为原始图像,
- 要降低对比度,请使用 0 < contrast_factor < 1。
- 要增加对比度,请使用 contrast_factor > 1。
例子:
在代码片段中,我们使用 contrast_factor 将图像的对比度更改为 4.2。看看输出。请注意,如果输入是 PIL 图像,则输出也是 PIL 图像,对于张量图像也是如此。
Python3
output = F.adjust_contrast(image,contrast_factor=4.2)
output.show()
输出:
3.adjust_hue()函数:
可以使用adjust_hue变换调整图像的色调。与上述转换相同,它也接受 PIL 图像和张量图像。
为了调整色调,首先将图像转换为HSV (色调、饱和度、值)颜色空间。通过将图像转换为 HSV 来调整图像色调,并在色调通道 (H) 中进行更改。然后将图像转换回原始图像。
此转换的重要参数是hue_factor 。它的范围值为 [-0.5, 0.5]。 0.5 和 -0.5 分别在正方向和负方向上与 HSV 颜色空间中的色调通道完全相反。因此,hue_factor=-0.5 和 hue_factor=0.5 都给出了具有互补色的图像,而 hue_factor=0 给出了原始图像。
例子:
在截取的代码中,我们将带有 hue_factor 的图像对比度更改为 -0.3。
Python3
output = F.adjust_hue(image,hue_factor=-0.3)
output.show()
输出:
4.adjust_saturation()函数:
另一个重要的函数转换是adjust_saturation 。为了增强图像的饱和度,我们可以使用这种变换。接受 PIL 图像和张量图像。饱和因子作为参数传递。饱和因子是一个浮点值。
例子:
在截取的代码中,我们使用saturation_factor = 7.0 增强了输入图像的饱和度。
Python3
output = F.adjust_saturation(image,saturation_factor=7.0)
output.show()
输出:
5. adjust_sharpness()函数:
此转换调整图像的清晰度。它适用于 PIL 和张量图像。输入参数sharpness_factor是一个非负浮点值。如果sharpness_factor为零,则返回模糊图像。 1的sharpness_factor值给出了原始图像。
例子:
使用下面的代码片段,我们将清晰度提高了 5.0 倍。
Python3
output = F.adjust_sharpness(image,sharpness_factor=5.0)
output.show()
输出:
6. gaussian_blur()函数:
高斯模糊用于模糊或平滑图像。它减少了图像中的噪点。为了在 PyTorch 中模糊图像,我们可以应用函数变换gaussian_blur。它接受kernel_size和sigma以及输入图像作为参数。 kernel_size是高斯核大小。它是一个正整数和奇数的序列,例如 (kx, ky) 或平方核的单个整数(正数和奇数)。 sigma是一个可选参数,是高斯核标准差。
例子:
使用下面的代码片段,您可以平滑或模糊图像。您可以对 kernel_size 和 sigma 进行必要的更改以实现所需的模糊。
Python3
output = F.gaussian_blur(image, kernel_size = (11,13), sigma = None)
output.show()
7. pil_to_tensor()函数:
我们可以使用这种变换将 PIL 图像转换为张量。它将 PIL 图像转换为与输入图像具有相同 dtype 的张量。
Python3
img_tensor = F.pil_to_tensor(pil_image)
8. to_pil_image()函数:
我们可以使用to_pil_image转换将张量或 ndarray 转换为 PIL 图像。
Python3
pil_img = F.to_pil_image(img_tesnor)
9. normalize()函数:
另一个重要的函数变换是归一化的。它只接受张量图像和浮动 dtype 作为输入。所以我们需要将 PIL 图像转换为张量图像并将其转换为浮点数。我们已经看到了如何将 PIL 图像转换为张量以及将张量转换为 PIL 图像。
例子:
我们用均值和标准对图像进行归一化。我们计算了输入图像的均值和标准差。您可以使用 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()
输出:
10. 反转()函数:
我们可以使用函数transform invert 反转输入图像的颜色。
Python3
output = F.invert(image)
output.show()