删除|图像数据的特征工程( 二 )


我们有一些标准包(第2-3行) 。 Glob用于处理文件路径(第5行) 。 我们也有一些包用于处理图像(第7-8行) 。
import numpy as np
import matplotlib.pyplot as plt

import glob

from PIL import Image
import cv2
我们这里将使用用于为自动驾驶汽车提供方向路径的图像 。 你可以在Kaggle上找到这些例子 。 用下面的代码加载其中一个图像 。 首先加载所有图像的文件路径(第2-3行) 。 然后加载(第8行)并在第一个路径上显示图像(第9行) 。 可以在图1中看到这个图像 。
#Load image paths
read_path = \"../../data/direction/\"
img_paths = glob.glob(read_path + \"*.jpg\")

fig = plt.figure(figsize=(1010))

#Display image
img = Image.open(img_paths[0
)
plt.imshow(img)

Cropping
裁剪图像以去除不需要的外部区域 , 目的是只删除图像中不需要进行预测的部分 。 对于自动驾驶汽车可以从背景中移除像素 。
加载一张图像(第2行) 。 然后将这张图像转换为一个数组(第5行) 。 这个数组的尺寸为224 x 224 x 3 。 图像的高度和宽度为224像素 , 每个像素都有一个R G B通道 。 为了裁剪图像 , 我们只选择y轴上位置25以上的像素(第8行) 。 结果如图2所示 。
#Load image
img = Image.open(img_paths[609
)

#Covert to array
img = np.array(img)

#Simple crop
crop_img = img[25:


如果需要保持纵横比 。 可以通过将不需要的像素变为黑色(第3行代码)来实现类似的结果 。

通过裁剪 , 我们删除了不必要的像素 , 这样可以避免模型对训练数据的过度拟合 。 例如 , 背景中的椅子可能出现在所有左转处 。 该模型有可能将这些与左转预测联系起来 。
上面的图片 , 还可以进一步处理 , 比如可以在不删除任何轨道的情况下裁剪图像的左侧 。 但是在下图中我们要删除重要的轨道部分 。
crop_img = np.array(img)
crop_img[:25
= [000

crop_img[::40
= [000


为什么这样做呢?这又回到了特性工程需要在生产环境中进行的问题上 。 你不知道什么图像将在什么时间显示给模型 。 这意味着需要对所有图像应用相同的裁剪功能 , 需要确保它永远不会删除图像的重要部分 , 但这是不可能的 , 所以我们才需要模拟这样的情况 。
Grayscale
gray_img = cv2.cvtColor(imgcv2.COLOR_RGB2GRAY)

灰度化是通过捕捉图像中的颜色强度来实现的 。 它通过取RGB通道的加权平均值来实现这一点 。 我们使用这个公式:
Y = 0.299* r + 0.587* g + 0.114* b
如果我们使用所有的RGB通道 , 它将由150528个值(224*224*3)组成 。 对于灰度图像 , 我们现在只有50176个值(224*224) 。 更简单的输入意味着需要更少的数据和更简单的模型 。
RGB channels
RGB通道中 , 一个通道可能更重要 。 我们可以不进行灰度化 , 而是直接只使用该通道 。 例如下面 , 我们选择R(第6行)、G(第7行)和B(第8行)通道 。 每个生成的数组的尺寸都是224 x 224 。 您可以在图6中看到相应的图像 。
#Load image
img = Image.open(img_paths[700
)
img = np.array(img)

#Get rgb channels
r_img = img[: : 0

g_img = img[: : 1

b_img = img[: : 2


这里还可以使用channel_filter函数 。 通道参数(c)的值为0、1或2 , 这取决于你想要哪个通道 。 但是有一点 , 不同的python包将以不同的顺序加载通道 。 这里我们使用的PIL是RGB 。 如果使用cv2.imread()加载图像 , 通道将按BGR顺序排序 。
def channel_filter(imgc=0):
   \"\"\"Returns given channel from image pixels\"\"\"
   img = np.array(img)
   c_img = img[: : c


   return c_img