4.1.1 通道数与像素深度
    在介绍图像格式之前,首先介绍图像的通道数和像素深度这两个概念。在计算机中通常使用一组像素表示一个图像,像素的位置对应的就是图像的坐标。对于灰度图像,一个像素使用一个8位的数字就可以表示对应的黑白程度,这里的通道数就是1,像素深度就是8位。对于常见的彩色图像,就需要分别使用rgb三个8位数字表示一个像素的颜色,分别表示该像素对应的红绿蓝颜色程度,这里的通道数就是3,像素深度就是8位。有的彩色图像甚至需要3个24位的数字表示其彩色程度,这时的通道数就是3,像素深度就是24位。部分图像使用bgr的顺序表示颜色程度,与rgb相比只在排列顺序上有所不同。计算机中图像的表示方法如图4-1所示。
    深度学习平台在表示图像时也存在着差异:cwh格式中c代表通道维度,w表示宽,h表示高,一个典型的mnist图像,图像的形状为(1,28,28);whc格式中c代表通道维度,w表示宽,h表示高,一个典型的mnist图像,图像的形状为(28,28,1)。
    图4-1 计算机中图像的表示方法
    以opencv为例介绍图像的通道数和像素深度的概念,对应的代码路径为:
    https://github.com/duoergun0729/adversarial_examples/blob/master/code/4-demo.ipynb
    使用opencv读取图像,由于我们的开发环境是ipython,因此无法直接使用opencv展示图片,需要使用matplotlib帮助展现。opencv默认格式为bgr,因此需要转换成rgb格式后再展现。图4-2为猪的彩色图像。
    import cv2
    from matplotlib import pyplot as plt
    img=cv2.imread("../picture/pig.jpg")
    show_img = cv2.cvtcolor(img, cv2.color_bgr2rgb)
    plt.imshow(show_img)
    plt.show()
    打印原始图像,形状为(300,300,3)
    print(img.shape)
    (300, 300, 3)
    图4-2 猪的图像(彩色图像)
    通过设置cv2.color_bgr2gray参数,把图像转换成灰度图像来展示,灰度图像见图4-3。
    img=cv2.imread("../picture/pig.jpg")
    show_img=cv2.cvtcolor(img, cv2.color_bgr2gray)
    plt.imshow(show_img,cmap=plt.cm.gray)
    plt.show()
    图4-3 猪的图像(灰度图像)
    打印原始图像,形状为(300,300),通道数为1。
    print(img.shape)
    (300, 300)
    还有一类特殊的图像,只有黑色和白色,称为二值图,像素深度是1位(见图4-4)。
    img=cv2.imread("../picture/pig.jpg")
    show_img=cv2.cvtcolor(img, cv2.color_bgr2gray)
    ret, thresh = cv2.threshold(show_img, 220, 255,cv2.thresh_binary)
    plt.imshow(thresh,cmap=plt.cm.gray)
    plt.show()
    图4-4 猪的图像(二值图像)
    其中核心函数是cv2.threshold,通过它可以把超过阈值的像素点设置为新值,对应的函数原型为:
    cv2.threshold(src, x, y, methods)
    其中各个参数的含义如下:
    ? src指原图像,该原图像为灰度图。
    ? x指用来对像素值进行分类的阈值。
    ? y指当像素值高于阈值时应该被赋予的新的像素值。
    ? methods指不同的阈值方法,这些方法包括:cv2.thresh_binary、cv2.thresh_binary_inv、cv2.thresh_trunc、cv2.thresh_tozero、cv2.thresh_tozero_inv。

章节目录

智能系统与技术丛书·AI安全之对抗样本入门所有内容均来自互联网,一曲书屋只为原作者兜哥的小说进行宣传。欢迎各位书友支持兜哥并收藏智能系统与技术丛书·AI安全之对抗样本入门最新章节