Keras深度学习:入门、实战与进阶
上QQ阅读APP看书,第一时间看更新

4.1.4 图像处理

作为数值数组,可以使用R的任何算术运算符方便地操作图像。例如,我们可以通过减法(用数组的最大值减去图像数据)生成负图像。运行以下程序代码,得到原图像及负图像,如图4-10所示。

> img_neg <- max(img) - img
> img_comb <- combine(img,img_neg)
> display(img_comb,method = 'raster',all = TRUE)
108-1

图4-10 显示原图像及负图像

在上面的示例中,我们使用combine()函数将单个图像合并成单个多帧图像。

我们还可以通过加法来增加图像的亮度,通过乘法来调整对比度,以及通过求幂来应用伽马校正。运行以下程序代码,得到原图像及三种处理后的图像,如图4-11所示。

> img_comb1 <- combine(
+   img,
+   img + 0.3,
+   img * 2,
+   img ^ 0.5
+ )
> display(img_comb1,method = 'raster',all=TRUE)
108-2

图4-11 增加图像亮度、对比度及伽马校正

我们可以使用标准矩阵的子集选取方式对图像进行裁剪。比如通过选取Image类的部分数据绘制猫咪的头像,如图4-12所示。

> img_crop <- img[800:1700, 100:950]
> plot(img_crop)
109-1

图4-12 对图像进行裁剪

我们也可以对图像进行阈值处理,阈值操作返回Image具有二进制像素值的对象,此时用于存储此类图像的数据类型为逻辑型(TRUE/FALSE)。

我们对img_crop对象的像素值进行是否大于0.5的判断,得到img_thresh对象的数据类型如下所示:

> img_thresh <- img_crop > 0.5
> img_thresh
Image
    colorMode    : Grayscale
    storage.mode : logical
    dim          : 901 851
    frames.total : 1
    frames.render: 1

imageData(object)[1:5,1:6]
        [,1] [,2] [,3] [,4] [,5] [,6]
[1,] TRUE TRUE TRUE TRUE TRUE TRUE
[2,] TRUE TRUE TRUE TRUE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE TRUE TRUE
[4,] TRUE TRUE TRUE TRUE TRUE TRUE
[5,] TRUE TRUE TRUE TRUE TRUE TRUE

使用plot()函数查看经过阈值处理后的图像,如图4-13所示。

109-2

图4-13 对图像进行阈值处理

> plot(img_thresh)