opencv直方图均衡化
过度曝光或背光图像可用于通过直方图均衡增加局部或整体对比度。
具体思路是在一张图像中找到最亮和最暗的像素值,并将它们映射为纯黑和纯白,然后将其他像素值按照一定的映射关系映射到纯黑和纯白之间的值算法。另一种方法是找到图像中像素的平均值作为中间灰度值,然后扩大范围以达到最充分的可显示值。
直方图可以大致了解图像的亮度分布。它是一个图形,x 轴上有像素值(在 0 到 255 之间,并不总是),y 轴上有图像对应的像素数。它是理解图像的另一种方式。通过观察图像的直方图,可以直观地了解图像的对比度、亮度和亮度分布。今天几乎所有的成像工具都提供了直方图的特征。
可以看到图像及其直方图。(这个直方图是用灰度图像而不是彩色图像构建的。)
直方图左侧显示图像中较暗像素的数量,而右侧显示较亮像素。从直方图中可以看出,暗区的像素数比亮区的多,中间调的个数(中位数约127)要少得多。
OpenCV 提供了 cv.calcHist() 函数来获取直方图。
cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
-
images:这是 uint8 或 float32 类型的源图像。它应该用方括号括起来,即“[img]”。
-
channels:它们也用方括号括起来。这是我们计算直方图的通道的索引。例如,如果输入灰度图像,其值为 0。对于彩色图像,您可以使用 0、1 或 2 分别计算蓝色、绿色或红色通道直方图。
-
mask:图像掩码。要查找整个图像的直方图,将其指定为“无”。但是如果要找到图像特定区域的直方图,就必须为它创建一个遮罩,并将其用作遮罩。
-
histSize:这是我们的 BINS 的数量。您必须使用方括号来表示。在整个范围内,我们通过了 256。
-
范围:强度值的范围,通常为 [0.256]
Numpy 为一维数组的直方图统计提供了 np.histogram() 方法。参数列表如下所示:
Histogram(a,bins=10,range=None,normed=False,weights=None)
-
a:要计数的数组
-
bins:指定统计区间的个数,即分数等于统计范围。
-
range:这是一个 2 元组,表示统计范围的最大值和最小值。默认值为None,表示范围由数据范围决定,即(a.min(), a.max))。
-
normed:当归一化参数为False时,函数返回数组a中每个区间的数据量,否则对数字进行归一化,使其等于每个区间的概率密度。
-
weights:weights 参数类似于 bincount()
有两个返回值,
-
hist:hist和前面的计算一样,每个区间的统计结果。
-
bins:包含每个统计 bin 起点的数组。当范围为 [0.256] 时,单元格包含 257。由于 Numpy 将单元格计算为 0-0.99、1-1.99 等,因此最后一个为 255-255.99。为了证明这一点,他们还在盒子的末尾添加了 256。但是我们不需要 256。最多 255 就足够了。
线性图像过滤:移动平均 - 卷积、边缘检测、相关
深度学习的框架。卷积神经网络。神经网络的主要层(Liner Layer、Padding、Stride、Conv)前向传播、反向传播。教学中的可视化。 Softmax,Sigmoid 函数。损失函数交叉熵 LogLoss,机器学习中的 MSE 度量。