学习OpenCV-Python——图像增强

图像增强

图像增强可以分为两种:

  • 领域处理技术。对像素点及其周围的点进行处理,即使用卷积核。
  • 点处理技术。只对单个像素进行处理。

归一化

cv2.normalize(src, dst, alpha, beta, norm_type, dtype, mask) → dst

src: 原图像对象

dst: 经过转化后的图像对象

alpha: 归一化后灰度像素最小值,一般为0

beta: 归一化后灰度像素最大值,一般为255

norm_type: 归一化的类型,可以取以下值

(1) cv2.NORM_MINMAX: 数组的数值缩放到一个指定的范围,线性归一化,一般较常用
(2) cv2.NORM_INF:归一化数组的C-范数(绝对值的最大值)
(3) cv2.NORM_L1 : 归一化数组的L1-范数(绝对值的和)
(4) cv2.NORM_L2: 归一化数组的(欧几里德)L2-范数

类型转换

dst = cv2.convertScaleAbs(src)

将图像数据类型转化为uint8

点处理技术

线性变换

图像增强线性变换主要对图像的对比度亮度进行调整,线性变换公式如下:
y = a ∗ x + b y = a*x+b y=ax+b
参数 a 影响图像的对比度,参数 b 影响图像的亮度,具体分为可分为以下几种情况:

a>1: 增强图像的对比度,图像看起来更加清晰
a<1: 减小了图像的对比度, 图像看起来变模糊
a<0 and b=0:图像的亮区域变暗,暗区域变亮
a=1 and b≠0:图像整体的灰度值上移或者下移,也就是图像整体变亮或者变暗,不会改变图像的对比度,b>0时图像变亮,b<0时图像变暗
a=-1 and b=255:图像翻转

分段线性变换

公式
{ y = a 1 ∗ x + b x < x 1 y = a 2 ∗ x + b x 1 < x < x 2 y = a 1 ∗ x + b x 2 < x \begin{cases} y = a_1*x+b & x<x_1 \\ y = a_2*x+b & x_1<x<x_2 \\ y = a_1*x+b & x_2<x \end{cases} y=a1x+by=a2x+by=a1x+bx<x1x1<x<x2x2<x
即对处于某个感兴趣的区域的x,将其对比度系数a增大或减小,从而增大或减小这个区域的对比度。

对数变换

对数变换将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的;同时可以很好的压缩像素值变化较大的图像的动态范围,目的是突出我们需要的细节。

公式
y = c ∗ l o g ( 1 + x ) y =c* log(1+x) y=clog(1+x)

幂律变换/gamma变换

幂律变换主要用于图像的校正,对漂白的图片或者是过黑的图片进行修正,幂律变换的公式如下:
y = c ∗ x γ y = c*x^γ y=cxγ
根据 γ的大小,主要可分为以下两种情况:

γ > 1: 处理漂白的图片,进行灰度级压缩

γ < 1: 处理过黑的图片,对比度增强,使得细节看的更加清楚
学习OpenCV-Python——图像增强_第1张图片

图像直方图均衡化

图像直方图:反应图像强度分布的总体概念,宽泛的来说直方图给出了图像对比度、亮度和强度分布信息。

观察不同图像的直方图:
学习OpenCV-Python——图像增强_第2张图片

从上图中我们注意到: 在暗图像中,直方图的分布都集中在灰度级的低(暗)端; 亮图像直方图的分布集中在灰度级的高端;低对比度图像具有较窄的直方图,且都集中在灰度级的中部;而高对比度的图像直方图的分量覆盖了很宽的灰度范围,且像素分布也相对均匀,此时图片的效果也相对很不错。于是我们可以得出结论:若一幅图像的像素倾向于占据整个可能的灰度级并且分布均匀,则该图像有较高的对比度并且图像展示效果会相对好,于是便引出图像直方图均衡化,对图像会有很强的增强效果。

计算新的像素映射过程:
在这里插入图片描述

图像滤波

图像滤波包括空间域滤波和频率域滤波。

而空间域滤波包括:

1.平滑滤波

2.锐化滤波

平滑滤波

平滑滤波包括均值滤波,加权均值滤波,中值滤波,最值滤波,高斯滤波等。

#均值滤波
blur_img = cv2.blur(img, 5)
#中值滤波
blur_img = cv2.medianBlur(img, 5)
#高斯滤波
blur_img = cv2.gaussianBlur(img,5)

锐化滤波

锐化滤波比较常用的是拉普拉斯滤波。

点击查看原理

你可能感兴趣的:(opencv)