【动手学计算机视觉】第二讲:图像预处理之图像增强

简介: 计算机视觉主要有两部分组成:特征提取模型训练其中第一条特征提取在计算机视觉中占据着至关重要的位置,尤其是在传统的计算机视觉算法中,更为明显,例如比较著名的HOG、DPM等目标识别模型,主要的研究经历都是在图像特征提取方面。图像增强能够有效的增强图像中有价值的信息,改善图像质量,能够满足一些特征分析的需求,因此,可以用于计算机视觉数据预处理中,能够有效的改善图像的质量,进而提升目标识别的精度。

计算机视觉主要有两部分组成:

  • 特征提取
  • 模型训练

其中第一条特征提取在计算机视觉中占据着至关重要的位置,尤其是在传统的计算机视觉算法中,更为明显,例如比较著名的HOG、DPM等目标识别模型,主要的研究经历都是在图像特征提取方面。图像增强能够有效的增强图像中有价值的信息,改善图像质量,能够满足一些特征分析的需求,因此,可以用于计算机视觉数据预处理中,能够有效的改善图像的质量,进而提升目标识别的精度。图像增强可以分为两类:

  • 频域法
  • 空间域法

首先,介绍一下频域法,顾名思义,频域法就是把图像从空域利用傅立叶、小波变换等算法把图像从空间域转化成频域,也就是把图像矩阵转化成二维信号,进而使用高通滤波或低通滤波器对信号进行过滤。采用低通滤波器(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。其次,介绍一下空域方法,空域方法用的比较多,空域方法主要包括以下几种常用的算法:

  • 直方图均衡化
  • 滤波

直方图均衡化

直方图均衡化的作用是图像增强,这种方法对于背景和前景都太亮或者太暗的图像非常有用。直方图是一种统计方法,根据对图像中每个像素值的概率进行统计,按照概率分布函数对图像的像素进行重新分配来达到图像拉伸的作用,将图像像素值均匀分布在最小和最大像素级之间。

23.jpg


具体原理和示例如下:原图像向新图像的映射为:


34.png


其中LLL为灰度级。

用直白的语言来描述:把像素按从小到大排序,统计每个像素的概率和累计概率,然后用灰度级乘以这个累计概率就是映射后新像素的像素值。

35.png


一幅图像像素分布如图,像素级为255,利用直方图对像素分布进行统计,示例如下:


36.png

滤波


基于滤波的算法主要包括以下几种:

  • 均值滤波
  • 中值滤波
  • 高斯滤波

这些方法主要用于图像平滑和去噪,在前一讲中已经阐述,感兴趣的可以看一下【动手学计算机视觉】第一讲:图像预处理之图像去噪


编程实践

1完整代码地址:
2https://github.com/jakpopc/aiLearnNotes/blob/master/computer_vision/image_enhancement.py
3requirement:matplotlib/opencv
本文主要介绍直方图均衡化图像增强算法,前一讲已经实现了滤波法,需要的可以看一下。

首先利用opencv读取图像并转化为灰度图,图像来自于voc2007:

1img = cv2.imread("../data/2007_000793.jpg")
2gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)


37.jpg

可以显示图像的灰度直方图:

1def histogram(gray):
2    hist = cv2.calcHist([gray], [0], None, [256], [0.0, 255.0])
3    plt.plot(range(len(hist)), hist)
4# opencv calcHist函数传入5个参数:
5# images:图像
6# channels:通道
7# mask:图像掩码,可以填写None
8# hisSize:灰度数目
9# ranges:回复分布区间

38.jpg


直方图均衡化,这里使用opencv提供的函数:

1dst = cv2.equalizeHist(gray)


39.jpg


均衡化后的图像为:


40.jpg


相关文章
|
5月前
|
机器学习/深度学习 计算机视觉 Python
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
77 0
|
5月前
|
机器学习/深度学习 自动驾驶 算法
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
84 1
|
7月前
|
算法 vr&ar 计算机视觉
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
|
7月前
|
存储 算法 程序员
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
|
7月前
|
存储 Serverless C语言
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
|
7月前
|
安全 数据挖掘 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
|
7月前
|
XML 算法 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(一)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理
|
9月前
|
机器学习/深度学习 编解码 决策智能
计算机视觉实战(七)图像金字塔与轮廓检测
计算机视觉实战(七)图像金字塔与轮廓检测
计算机视觉实战(七)图像金字塔与轮廓检测
|
9月前
|
机器学习/深度学习 决策智能 计算机视觉
计算机视觉实战(五)图像梯度计算
计算机视觉实战(五)图像梯度计算
|
9月前
|
机器学习/深度学习 决策智能 计算机视觉
计算机视觉实战(四)图像形态学操作
计算机视觉实战(四)图像形态学操作