8.直方图

目录

1  原理

2  代码实现 calcHist()

2.1  绘制灰度图像的直方图

2.2  绘制彩色图像的直方图

2.3  掩膜操作

2.3.1  创建掩膜

2.3.2  图像结合掩膜 bitwise_and()

2.3.3  绘制掩膜后的直方图与非掩膜的直方图

2.4  直方图均衡化

2.4.1  原理

2.4.2  代码实现 equalizeHist()

2.4.3  自适应直方图均衡化 createCLAHE()与apple()


1  原理

我们统计图像中的每个像素点的值,然后把每个值绘制成直方图

  • images 被统计的图像
  • channels 被统计的图像通道,可以只为B,G,R其中一个通道
  • mask 掩膜的意思是提取图像的一部分
  • histSize 直方图横坐标的取值范围,全部是0-255,也就是[256],我可以把横坐标改小,比如[200]
  • ranges 像素取值范围,一般为[0:256],也可以改小,比如[0:200]

一般来讲最后的两个参数是不变的

2  代码实现 calcHist()

下面我们看一下该怎么用

2.1  绘制灰度图像的直方图

导入库后,读取灰度图像,使用hist,然后我们看一下shape

  • 此处要注意calcHist的参数需要在参数外加一层中括号,不然会报错

这个shape表示我x方向有256个可以取的值(0-255),纵向有一个可以取的值,像素点对应的个数

然后我们使用plt给直方图画出来

  • 注意一点,plt默认通道为R,G,B,cv2默认通道为B,G,R

2.2  绘制彩色图像的直方图

上面这个图是灰度的,我们再将其变成彩色的,我们把b,g,r三个通道放到一张图中

2.3  掩膜操作

上面的两张图我们都没有使用掩膜,下面我们先创建一个掩膜

2.3.1  创建掩膜

首先我们获取图片的大小,然后创建一个图像大小的全0矩阵,然后我们将x方向100-300,y方向100-400矩阵中的值设置为255

  • np.uint8是无符号8位整形

掩膜就是两部分组成的,黑色部分与白色部分

2.3.2  图像结合掩膜 bitwise_and()

这里是进行的与操作,可以保留白色区域的图像

bitwise_and前两个参数的情况是这样的,我们是下图的情况一,代表两个图像数组且大小相同,最终的值就为img

上图转自 https://blog.csdn.net/LaoYuanPython/article/details/109148867

2.3.3  绘制掩膜后的直方图与非掩膜的直方图

红色的是掩膜后的,蓝色是非掩膜的

2.4  直方图均衡化

2.4.1  原理

我们现在获取左侧狗的直方图,发现像素多在中间几个像素上

我们现在像增大两侧的像素点的个数,使直方图更加均衡

下面我们举个例子

  • 左侧是不均衡的图像,右侧是我们均衡后的图像
  • 首先统计像素值有哪写,左侧的图中一共四种像素值50,128,200,255
  • 之后统计每个像素的个数
  • 之后统计概率0.25 = 4/(4+3+5+4),0.1875=3/(4+3+5+4)这样算
  • 累计概率是该值之前的所有概率加和,50前面没有其他值累计概率等于概率,128的概率0.4375 = 0.25 + 0.1875
  • 根据函数映射后的灰度值,这个是使用累计概率*取值范围,比如50这一行为0.25 * (255-0) = 63.75,再比如128这一行为0.4375 * (255-0) = 111.5625
  • 取整

  • 原来灰度值为50的,现在变为64
  • 128的现在为112
  • 原来为200的,现在为191
  • 255变为255

2.4.2  代码实现 equalizeHist()

我们使用之前猫的图片,那个就不是很均衡,整体偏亮

  • 均衡前

  • 均衡后

我们现在把均衡后图片搞过来看一下

2.4.3  自适应直方图均衡化 createCLAHE()与apply()

这个方法是指,把一张大图分为若干块,对每块进行均衡化,然后合并到一起

我们把直接均衡化和自适应均衡化放在一起,左边是非自适应,右边是自适应

  • createCLANE是将图像分块,之后处理边缘像素,然后均衡像素点,这个就涉及到另一个算法了之后有机会会讲,clipLimit是对比度限制的阈值,tileGridSize是直方图均衡化的网格大小,我们现在是每8*8像素一块
  • apply是将createCLAHE应用到img上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值