集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

业界新闻

当前位置:首页 > >业界新闻 > >

人工智能AI培训_图像数据预处理实验

发布时间: 2019-08-19 13:42:03

  人工智能AI培训_图像数据预处理实验

  1.实验简介
  图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性、较大限度地简化数据,从而改进特征提取、图像分割、匹配和识别的可靠性。

  本实验使用OpenCV图像处理库实现基本的图像预处理操作。包括图像的颜色空间转换、坐标变化、灰度变化、直方图变化和图像滤波。

人工智能AI培训

  2.实验目的
  本实验将理论教材中介绍的图像预处理技术通过Python语言的OpenCV图像处理库实现。通过本实验学员将了解如何使用OpenCV进行图像预处理。通过实际图像数据的变化,加深对图像预处理技术的感知,本实验将指导学员理解和掌握如何使用Python语言进行图像预处理开发的方法和技巧。
  3.实验环境说明

  本实验建议安装3.6以上版本的Python环境,并且需要安装OpenCV,numpy,matplotlib第三方库。

  4.实验步骤
  4.1.基本操作
  注意:所有实验1.4中代码所读取的图片,学员可选用自己电脑本地的图片读取;图片路径为自己本地的实际路径。
  步骤 1图像的读取和显示​

  import cv2
  # 读取一副图像 第一个参数是图像路径
  # 第二个参数代表读取方式,1表示3通道彩色,0表示单通道灰度
  im = cv2.imread(r"lena512color.tiff",1)
  # 在"test"窗口中显示图像im
  cv2.imshow("test",im)
  # 等待用户按键反馈
  cv2.waitKey()
  # 销毁所有创建的窗口
  cv2.destroyAllWindows()
​  步骤 2显示数据类型和图像尺寸
  # 打印图像数据的数据结构类型
  print(type(im))
  # 打印图像的尺寸
  print(im.shape)
  步骤 3图像的保存
  # 将图像保存到指定路径
  cv2.imwrite('lena.jpg',im)
​  4.2.颜色空间转换
  步骤 1彩色图像灰度化
  import cv2
  im = cv2.imread(r"lena.jpg")
  cv2.imshow("BGR",im)
  # 使用cvtColor进行颜色空间变化 cv2.COLOR_BGR2GRAY 代表BGR to gray
  img_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
  cv2.imshow("Gray",img_gray)
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 2更换三通道顺序BGR为RGB
  import cv2
  im = cv2.imread(r"lena.jpg")
  cv2.imshow("BGR",im)
  # 使用cvtColor进行颜色空间变化 cv2.COLOR_BGR2RGB 代表BGR to RGB
  im_rgb = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
  # 当图像数据为3通道时,imshow函数认为数据是BGR的
  # 使用imshow显示RGB数据,会发现图片显示颜色畸变
  cv2.imshow("RGB",im_rgb)
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 3BGR和HSV颜色空间转换
  import cv2
  im = cv2.imread(r"lena.jpg")
  cv2.imshow("BGR",im)
  # 使用cvtColor进行颜色空间变化 cv2.COLOR_BGR2HSV 代表BGR to HSV
  im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
  # 当图像数据为3通道时,imshow函数认为数据是BGR的
  # 使用imshow显示HSV数据,会将HSV分量强行当做BGR进行显示
  cv2.imshow("HSV",im_hsv)
  cv2.waitKey()
  cv2.destroyAllWindows()
  4.3.坐标变化
  步骤 1平移
  import numpy as np
  import cv2
  # 定义平移translate函数
  def translate(img, x, y):
  # 获取图像尺寸
  (h, w) = img.shape[:2]
  # 定义平移矩阵
  M = np.float32([[1, 0, x], [0, 1, y]])
  # 使用OpenCV仿射变换函数实现平移操作
  shifted = cv2.warpAffine(img, M, (w, h))
  # 返回转换后的图像
  return shifted
  # 加载图像并显示
  im = cv2.imread('lena.jpg')
  cv2.imshow("Orig", im)
  # 对原图做平移操作
  # 下移50像素
  shifted = translate(im, 0, 50)
  cv2.imshow("Shift1", shifted)
  # 左移100像素
  shifted = translate(im, -100, 0)
  cv2.imshow("Shift2", shifted)
  # 右移50,下移100像素
  shifted = translate(im, 50, 100)
  cv2.imshow("Shift3", shifted)
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 2旋转
  import numpy as np
  import cv2
  # 定义旋转rotate函数
  def rotate(img, angle, center=None, scale=1.0):
  # 获取图像尺寸
  (h, w) = img.shape[:2]
  # 旋转中心的缺失值为图像中心
  if center is None:
  center = (w / 2, h / 2)
  # 调用计算旋转矩阵函数
  M = cv2.getRotationMatrix2D(center, angle, scale)
  # 使用OpenCV仿射变换函数实现旋转操作
  rotated = cv2.warpAffine(img, M, (w, h))
  # 返回旋转后的图像
  return rotated
  im = cv2.imread('lena.jpg')
  cv2.imshow("Orig", im)
  # 对原图做旋转操作
  # 逆时针45度
  rotated = rotate(im, 45)
  cv2.imshow("Rotate1", rotated)
  # 顺时针20度
  rotated = rotate(im, -20)
  cv2.imshow("Rotate2", rotated)
  # 逆时针90度
  rotated = rotate(im, 90)
  cv2.imshow("Rotate3", rotated)
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 3镜像
  import numpy as np
  import cv2
  im = cv2.imread('lena.jpg')
  cv2.imshow("orig", im)
  # 进行水平镜像
  im_flip0 = cv2.flip(im, 0)
  cv2.imshow("flip vertical ", im_flip0)
  # 进行垂直镜像
  im_flip1 = cv2.flip(im, 1)
  cv2.imshow("flip horizontal ", im_flip1)
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 4缩放
  import numpy as np
  import cv2
  im = cv2.imread('lena.jpg')
  cv2.imshow("orig", im)
  # 获取图像尺寸
  (h, w) = im.shape[:2]
  # 缩放的目标尺寸
  dst_size = (200,300)
  # 最邻近插值
  method = cv2.INTER_NEAREST
  # 进行缩放
  resized = cv2.resize(im, dst_size, interpolation = method)
  cv2.imshow("resized1", resized)
  # 缩放的目标尺寸
  dst_size = (800,600)
  # 双线性插值
  method = cv2.INTER_LINEAR
  # 进行缩放
  resized = cv2.resize(im, dst_size, interpolation = method)
  cv2.imshow("resized2", resized)
  cv2.waitKey()
  cv2.destroyAllWindows()
  4.4.灰度变化
  步骤 1灰度变化。反转,灰度拉伸,灰度压缩
  import numpy as np
  import cv2
  from matplotlib import pyplot as plt
  # 定义线性灰度变化函数
  # k>1时 实现灰度数值的拉伸
  # 0<k<1时 实现灰度数值的压缩
  # k=-1 b=255 实现灰度反转
  def linear_trans(img, k, b=0):
  # 计算灰度线性变化的映射表
  trans_list = [(np.float32(x)*k+b) for x in range(256)]
  # 将列表转换为np.array
  trans_table =np.array(trans_list)
  # 将超过[0,255]灰度范围的数值进行调整,并指定数据类型为uint8
  trans_table[trans_table>255] = 255
  trans_table[trans_table<0] = 0
  trans_table = np.round(trans_table).astype(np.uint8)
  # 使用OpenCV的look up table函数修改图像的灰度值
  return cv2.LUT(img, trans_table)
  im = cv2.imread('lena.jpg',0)
  cv2.imshow('org', im)
  # 反转
  im_inversion = linear_trans(im, -1, 255)
  cv2.imshow('inversion', im_inversion)
  # 灰度拉伸
  im_stretch = linear_trans(im, 1.2)
  cv2.imshow('graystretch', im_stretch)
  # 灰度压缩
  im_compress = linear_trans(im, 0.8)
  cv2.imshow('graycompress', im_compress)
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 2伽马变化
  import numpy as np
  import cv2
  from matplotlib import pyplot as plt
  # 定义伽马变化函数
  def gamma_trans(img, gamma):
  # 先归一化到1,做伽马计算,再还原到[0,255]
  gamma_list = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]
  # 将列表转换为np.array,并指定数据类型为uint8
  gamma_table = np.round(np.array(gamma_list)).astype(np.uint8)
  # 使用OpenCV的look up table函数修改图像的灰度值
  return cv2.LUT(img, gamma_table)
  im = cv2.imread('lena.jpg',0)
  cv2.imshow('org', im)
  # 使用伽马值为0.5的变化,实现对暗部的拉升,亮部的压缩
  im_gama05 = gamma_trans(im, 0.5)
  cv2.imshow('gama0.5', im_gama05)
  # 使用伽马值为2的变化,实现对亮部的拉升,暗部的压缩
  im_gama2 = gamma_trans(im, 2)
  cv2.imshow('gama2', im_gama2)
  cv2.waitKey()
  cv2.destroyAllWindows()
  4.5.直方图
  步骤 1直方图的显示
  import cv2
  from matplotlib import pyplot as plt
  # 读取并显示图像
  im = cv2.imread("lena.jpg",0)
  cv2.imshow('org', im)
  # 绘制灰度图像的直方图
  plt.hist(im.ravel(), 256, [0,256])
  plt.show()
  # 等待用户按键反馈
  cv2.waitKey()
  cv2.destroyAllWindows()
  步骤 2直方图均衡化
  import cv2
  from matplotlib import pyplot as plt
  im = cv2.imread("lena.jpg",0)
  cv2.imshow('org', im)
  # 调用OpenCV的直方图均衡化API
  im_equ1 = cv2.equalizeHist(im)
  cv2.imshow('equal', im_equ1)
  # 显示原始图像的直方图
  plt.subplot(2,1,1)
  plt.hist(im.ravel(), 256, [0,256],label='org')
  plt.legend()
  # 显示均衡化图像的直方图
  plt.subplot(2,1,2)
  plt.hist(im_equ1.ravel(), 256, [0,256],label='equalize')
  plt.legend()
  plt.show()
  # 等待用户按键反馈后销毁窗口
  cv2.waitKey()
  cv2.destroyAllWindows()
  4.6.滤波
  步骤 1中值滤波
  import cv2
  import numpy as np
  im = cv2.imread('lena.jpg')
  cv2.imshow('org',im)
  # 调用OpenCV的中值模糊API
  im_medianblur = cv2.medianBlur(im, 5)
  cv2.imshow('median_blur',im_medianblur)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  步骤 2均值滤波
  # 方法一:直接调用OpenCV的API
  import cv2
  import numpy as np
  im = cv2.imread('lena.jpg')
  cv2.imshow('org',im)
  # 调用OpenCV的均值模糊API
  im_meanblur1 = cv2.blur(im, (3, 3))
  cv2.imshow('mean_blur_1',im_meanblur1)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  # 方法二:使用均值算子和filter2D 自定义滤波操作
  import cv2
  import numpy as np
  im = cv2.imread('lena.jpg')
  cv2.imshow('org',im)
  # 均值算子
  mean_blur = np.ones([3, 3], np.float32)/9
  # 使用filter2D进行滤波操作
  im_meanblur2 = cv2.filter2D(im,-1,mean_blur)
  cv2.imshow('mean_blur_2',im_meanblur2)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  步骤 3高斯滤波
  # 方法一:直接调用OpenCV的API
  import cv2
  import numpy as np
  im = cv2.imread('lena.jpg')
  cv2.imshow('org',im)
  # 调用OpenCV的高斯模糊API
  im_gaussianblur1 = cv2.GaussianBlur(im, (5, 5), 0)
  cv2.imshow('gaussian_blur_1',im_gaussianblur1)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  # 方法二:使用高斯算子和filter2D 自定义滤波操作
  import cv2
  import numpy as np
  im = cv2.imread('lena.jpg')
  cv2.imshow('org',im)
  # 高斯算子
  gaussian_blur = np.array([
  [1,4,7,4,1],
  [4,16,26,16,4],
  [7,26,41,26,7],
  [4,16,26,16,4],
  [1,4,7,4,1]], np.float32)/273
  # 使用filter2D进行滤波操作
  im_gaussianblur2 = cv2.filter2D(im,-1,gaussian_blur)
  cv2.imshow('gaussian_blur_2',im_gaussianblur2)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  步骤 4锐化
  import cv2
  import numpy as np
  im = cv2.imread('lena.jpg')
  cv2.imshow('org',im)
  # 锐化算子
  sharpen_1 = np.array([
  [-1,-1,-1],
  [-1,9,-1],
  [-1,-1,-1]])
  # 使用filter2D进行滤波操作
  im_sharpen1 = cv2.filter2D(im,-1,sharpen_1)
  cv2.imshow('sharpen_1',im_sharpen1)
  # 锐化算子2
  sharpen_2 = np.array([
  [0,-1,0],
  [-1,8,-1],
  [0,1,0]])/4.0
  # 使用filter2D进行滤波操作
  im_sharpen2 = cv2.filter2D(im,-1,sharpen_2)
  cv2.imshow('sharpen_2',im_sharpen2)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
​  5.实验小结
  本章主要介绍了应用基于Python语言的OpenCV图像处理库进行图像预处理实验的具体操作。使用OpenCV图像处理库实现了图像的颜色空间转换、坐标变化、灰度变化、直方图变化和图像滤波。加深对图像预处理技术的感知,为使用图像预处理技术提供了实际的操作指导。

上一篇: 大数据培训_为什么Spark比MapReduce快100X

下一篇: H5培训_H5导航制作

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!