直方图相关及应用

直方图相关及应用

1)直方图均衡化

直方图均衡化是灰度变换的一个重要应用, 它是通过拉伸像素强度分布范围来增强图像对比度的一种方法, 广泛应用于图

像增强处理中。
在这里插入图片描述
直方图均衡化—cv2.equalizeHist()
在这里插入图片描述

⚫src: 输入原图像, Mat类对象即可, 需为8位单通道图像
⚫dst: 均衡化后结果图像, 需和原图一样的尺寸和类型

import cv2
import numpy as np
img = cv2 .imread('02 .png' , 0)
equ = cv2.equalizeHist (img)
res = np.hstack((img,egu)) #将2张图片合并一起
cv2 .imshow('res',res)
cv2 .imshow( 'result',equ)
cv2 .imwrite ('1 .bmp ' ,equ)
cv2 .waitKey (0)
cv2.destroyAllwindows ()

在这里插入图片描述
在这里插入图片描述

1-1 CLAHE自适应直方图均衡化

当直方图并不集中在某一区域时,使用直方图均衡化会丢失信息,效果不好

为了解决这个问题,我们需要使用自适应的直方图均衡化。这种情况下整幅图像会被分成很多小块,这些小块被称为“tiles"(在 OpenCV 中 tiles 的大小默认是 8x8 ),然后再对每一个小块分别进行直方图均衡化( 跟前面类似 )所以在每一个的区域中,直方图会集中在某一个小的区域中( 除非有噪声干扰 。如果有噪声的话,噪声会被放大。为了避免这种情况的出现要使用对比度限制。对于每个小块来说,如果直方图中的 bin 超过对比度的上限的话,就把其中的像素点均匀分散到其他 bins 中,然后在进行直方图均衡化。最后,为了去除每一个小块之间"人造的”( 由于算法造成)边界,再使用双线性差值,对小块进行缝合。
在这里插入图片描述
在这里插入图片描述

2)直方图对比

直方图对比就是根据一定的标准来比较两幅图像的直方图的相似度, 近而确定图像的相似度, opencv提供对比直方图相

似度的函数为: cv2.compareHist()
在这里插入图片描述
⚫ H1: 需要比较的直方图1
⚫ H2: 需要比较的直方图2

⚫ method: 直方图对比的方法, 有如下四种:

◆cv2.HISTCMP_CORREL, —相关性方法(值越大匹配度越高)

◆cv2.HISTCMP_CHISQR, —卡方测量法(值越小匹配度越高)

◆cv2.HISTCMP_INTERSECT, —直方图相交法(值越大匹配度越高)

◆cv2.HISTCMP_BHATTACHARYYA , —Bhattacharyya测量法(小)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3)反向投影

反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式, 简单来说, 所谓反向投影就是首先计算某

一特征的直方图模型,然后使用模型去寻找图像中存在该特征的方法。

例如, 你有一个肤色直方图 ( Hue-Saturation 直方图 ),你可以用它来寻找图像中的肤色区域, 具体原理:

假设你已经通过下图得到一个肤色直方图(Hue-Saturation),旁边的直方图就是 模型直方图 ( 代表手掌的皮肤色调).你可

以通过掩码操作来抓取手掌所在区域的直方图:
在这里插入图片描述

我们要做的就是使用 模型直方图 (代表手掌的皮肤色调) 来检测测试图像中的皮肤区域。以下是检测的步骤:
①对测试图像中的每个像素 (p(I,j)),获取色调数据并找到该色调(hij, si, )在直方图中的bin的位置。
②查询 模型直方图 中对应的bin - - 并读取该bin的数值。
③将此数值储存在新的图像中(BackProjection)。你也可以先归一化 模型直方图 ,这样测试图像的输出就可以在屏幕显示了。
④通过对测试图像中的每个像素采用以上步骤, 我们得到了下面的 BackProjection 结果图:
在这里插入图片描述
⑤使用统计学的语言, BackProjection 中储存的数值代表了测试图像中该像素属于皮肤区域的 概率 。比如以上图为例, 亮起的区域是皮肤区域的概率更大(事实确实如此),而更暗的区域则表示更低的概率(注意手掌内部和边缘的阴影影响了检测的精度)。

反向投影的作用:
反向投影应用在输入图像(大)中查找与特定图像(模板图像), 最匹配的点或者区域, 也就是定位模板图像出现
在输入图像的位置。

计算反向投影—cv2.calcBackProject()
在这里插入图片描述
⚫images: 输入数组或数组集, 需要为相同深度和尺寸
⚫nimages: 输入数组个数, 也就是图像数量
⚫channels: 需要统计的通道索引
⚫hist: 输入的直方图
⚫backProject: 目标反向投影阵列, 需为单通道, 并且和image[0]有相同大小和深度
⚫ranges: 表示每一维度数组的每一维的边界阵列(取值范围)
⚫uniform: 直方图是否均匀标识, 默认值true

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40911806/article/details/130052576