上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)
图4-10 显示原图像及负图像
在上面的示例中,我们使用combine()函数将单个图像合并成单个多帧图像。
我们还可以通过加法来增加图像的亮度,通过乘法来调整对比度,以及通过求幂来应用伽马校正。运行以下程序代码,得到原图像及三种处理后的图像,如图4-11所示。
> img_comb1 <- combine( + img, + img + 0.3, + img * 2, + img ^ 0.5 + ) > display(img_comb1,method = 'raster',all=TRUE)
图4-11 增加图像亮度、对比度及伽马校正
我们可以使用标准矩阵的子集选取方式对图像进行裁剪。比如通过选取Image类的部分数据绘制猫咪的头像,如图4-12所示。
> img_crop <- img[800:1700, 100:950] > plot(img_crop)
图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所示。
图4-13 对图像进行阈值处理
> plot(img_thresh)