利用图像增强方法改进目标检测

一、前言

训练神经网络的一个重要部分是对输入进行预处理。通过仔细检查、清理和转换输入数据,可以获得许多性能增益。在这篇文章中,我们将考虑输入图像的对比度拉伸为主要的图像增强方法对Mask R-CNN网络识别物体的性能的影响。对比拉伸增强了物体的轮廓,强调了物体与背景的区别,理论上可以提高模型的学习能力。这有助于卷积层从图像中提取信息和特征。

二、图像增强——对比度拉伸

2.1 百分位对比度拉伸(也称直方图归一化

对比度拉伸可以通过简单地使用一个公式来实现,该公式可以放大像素值的差异。以彩色图像为例,必须按比例放大三个图像“通道”:红色通道(R),绿色通道(G)和蓝色通道(B)。一个常见的惯例是用一个范围为[0,255]的整数表示每个通道的每个像素,其中RGB值(0,0,0)等于黑色,(255,255,255)表示白色。

2.1.1 数学公式

比如,当我们处理400×400像素的图像片时,会产生三个400×400像素的通道。因此,总的来说,一个图像切片可以用一个400x400x3的矩阵表示,其值在0到255之间。在我们深入研究这些公式之前,最后需要说明一点。我们要把这个400x400x3矩阵分成3个400×400矩阵。然后我们将在每个颜色通道(R, G和B)上应用对比度拉伸,然后我们将把三个拉伸矩阵再次组合成一个400x400x3矩阵。

然后通过转换像素x,用如下公式进行拉伸:

 其中a表示我们想要缩放到的下界b表示上界。

我们没有使用对比度拉伸中的最小值和最大值作为下限和上限,而是分别使用2和98百分位值。采用这些百分位值的一个优点是,它对异常值更稳健;如果图像通道中只有一个像素为0,只有一个像素为255,则不会发生对比度拉伸。当我们使用2和98百分位值时,我们产生了更多的拉伸。但是我们应该注意的是,在这样拉伸之后,我们应该将2%以下的所有值四舍五入为0,将98%以上的所有值四舍五入为255。这直接说明了与最小值和最大值不同的拉伸的缺点;我们丢失了一些信息。

为了量化对比度拉伸的效果,我们引入了一个度量来表示图像n中一个通道k内的颜色扩散:σk,n。

这个标准差可以通过计算一个400×400矩阵的方差得到。如果我们在这个带有xi,j的400×400矩阵的第i行和第j列处指定一个像素x,我们得到:

其中x̄矩阵中的平均像素值,用

其中 I,J=400. 然后 σk,n = √σ2k,n.

在图1的上面两个图像切片中,可以看到2-98百分位对比度拉伸的定性效果。

 

图1:左上:原始图像切片(来源:谷歌Earth, Maxar Technologies)。右上:2-98百分位对比拉伸后的同一图像切片。在下面的两幅图像中,每个图像波段的每个图像切片的标准差(GBR)的分布和三个通道的标准差的平均值(橙色)

在下面的两个图中,我们绘制了我们的度规的直方图。对于每一个图像切片,我们都计算了三个图像通道的标准差。然后我们分别在三个通道上进行对比拉伸,得到了右边的图。由于我们想要监测在每个通道上分别应用对比度拉伸的效果,我们还通过取三个标准差的平均值(R,G和B,因此K=3)绘制了整个图像的直方图。

可以看出,每个图像的平均标准差的偏移代表了每个通道的偏移。此外,可以观察到标准偏差的显著增加。我们可以计算出所有图像切片的平均标准差。

 注意,图像中像素值的标准差增加了很多。一个图像切片(400 - 400像素)内所有像素值的平均标准差在对比度拉伸前为μσ = 26,拉伸后为μσ = 64。标准差的值也更趋于正态分布。每个通道都被拉伸成2和98百分位值(每个图像切片),但是可以看到每个通道的拉伸效果是相同的。

百分位对比度拉伸也被称为(直方图)归一化,因为我们将像素强度的范围归一化。

 

2.2 直方图均衡

下面我们将研究另一种对比拉伸方法,称为直方图均衡。除了比较模型性能之外,我们还将比较不同方法预处理速度差别。

2.2.1 数学公式

使用直方图均衡化,可以均匀地将所有像素强度分布在范围[0,255]上。我们没有像百分位对比度拉伸那样简单地将这些值分散开来,而是为每个像素强度选择新的值,使直方图变得均匀分布。为了做到这一点,我们正在寻找变换y=f(k),其中y是基于旧像素强度k的新像素强度。

我们将从概率的角度用像素强度来接近直方图。然后我们可以将强度为xi的所有像素N总结为随机x的绘图。我们可以将k的一个值的出现表示为概率:

其中I{xi=k}是一个指标函数:

 而离散累积分布函数(discrete cumulative distribution function,CDF)为

为了使y在范围[0,255]上均匀分布,我们将使用变换

我们证明了这种变换会得到如下的均匀分布。当我们引入pX(k)时,这个变换Y=f(X)会得到一个新的分布pY(k),这个分布可以用逆向CDF法推导出来

 两边对y求导得到

f-1(y)=k根据定义,我们得到

代入y=f(k)得到

它等于定义域[0,255]上均匀分布的概率密度函数。

 

2.3 对比度受限的自适应直方图均衡

但是,如果我们直接用直方图均衡方法,是能够看到它存在一些问题:

  1. 直方图均衡是全局的, 对图像局部区域存在过亮或者过暗时, 效果不是很好;
  2. 直方图均衡会增强背景噪声,(如下图示例);

 

为了解决上述2个问题, 就有2方面的解决方法: 一是解决全局性问题, 二是解决背景噪声增强问题.

  • 针对全局性问题: 有人提出了对图像分块的方法, 每块区域单独进行直方图均衡, 这样就可以利用局部信息来增强图像, 这样就可以解决全局性问题;
  • 针对背景噪声增强问题: 主要背景增强太过了, 因而有人提出了对对比度进行限制的方法, 这样就可以解决背景噪声增强问题;

将上述二者相结合就是 CLAHE 方法, 其全称为: Contrast Limited Adaptive Histogram Equalization.

2.3.1 CLAHE 算法流程

CLAHE 算法流程主要有以下几个步骤:

  1. 预处理, 如图像分块填充等;
  2. 对每个分块处理, 计算映射关系, 计算映射关系时使用了对比度限制;
  3. 使用插值方法得到最后的增强图像;

其处理流程可以用如下示意图表示:

2.3.2 算法实现

2.3.2.1 python实现

import cv2 as cv

img = cv.imread("C:\\Image_1.png", 0)
img = cv.resize(img, None, fx=0.5, fy=0.5)
# 创建CLAHE对象
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
# 限制对比度的自适应阈值均衡化
dst = clahe.apply(img)  #限制对比度自适应直方图均衡化(CLAHE)
# 使用全局直方图均衡化
equa = cv.equalizeHist(img) #全局直方图均衡化(HE)
# 分别显示原图,CLAHE,HE
cv.imshow("img", img)
cv.imshow("clahe", clahe)
cv.imshow("he", he)

2.3.2.2 C++实现

OpenCV中 CLAHE C++代码地址如下:

https://github.com/opencv/opencv/blob/4.x/modules/imgproc/src/clahe.cpp

#python code
#python中需要将不同的通道分离后做自适应白平衡,然后合并图片img=cv2.imread('xxx.jpg')
B, G, R = cv2.split(img)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(5,5))
clahe_B = clahe.apply(B)
clahe_G = clahe.apply(G)
clahe_R = clahe.apply(R)
CLAHE = cv2.merge((clahe_B, clahe_G, clahe_R))
plt.figure("CLAHE")
plt.title("CLAHE")
plt.imshow(CLAHE)
plt.show()

#C++ code
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv){    
    Mat src = imread("xxx.jpg", 0);    
    Mat dst;    
    cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE();    
    clahe->setClipLimit(2);    
    clahe->setTilesGridSize(cv::Size(8, 8));    
    clahe->apply(src, dst);    
    namedWindow("src", 0);    
    imshow("src", src);    
    namedWindow("dst", 0);    
    imshow("dst", dst);    
    waitKey(0);    
    return 0;}

参数建议:
clipLimit:对比度限制大小(推荐2~5,太大了噪声太多)
tileGridSize :方格大小,将图片按照大小进行分割,针对方格进行白平衡;

2.3.3 测试结果

从左往右以此为: 原图, HE, CLAHE, 从图中可以看到, CLAHE实现了对细节的增强且没有使得图像过度增强.

 

 

参考:

[1] https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE

[2] K. Zuiderveld: Contrast Limited Adaptive Histogram Equalization. In: P. Heckbert: Graphics Gems IV, Academic Press 1994 (http://www.docin.com/p-119164091.html)

[3] https://en.wikipedia.org/wiki/Adaptive_histogram_equalization

[4] 关于 CLAHE 的理解及实现

[5] Improving Object Detection with Contrast Stretching 

 

 

posted @ 2022-11-16 18:32  小金乌会发光-Z&M  阅读(677)  评论(0编辑  收藏  举报