您的位置:首页 > 游戏 > 手游 > 网络销售主要做些什么_如何开发一个聊天软件_搜索引擎是软件还是网站_网络广告策划的步骤

网络销售主要做些什么_如何开发一个聊天软件_搜索引擎是软件还是网站_网络广告策划的步骤

2025/4/22 1:55:08 来源:https://blog.csdn.net/jdjhcn/article/details/147077372  浏览:    关键词:网络销售主要做些什么_如何开发一个聊天软件_搜索引擎是软件还是网站_网络广告策划的步骤
网络销售主要做些什么_如何开发一个聊天软件_搜索引擎是软件还是网站_网络广告策划的步骤

目录

一、直方图

 1、计算并显示直方图

2、使用matplotlib方法绘制直方图(不划分小的子区间)

3、使用opencv的方法绘制直方图 (划分16个小的子亮度区间)

4、绘制彩色图像的直方图,将各个通道的直方图值都画出来

二、直方图均衡化

(1)绘制原图的直方图

 (2)绘制经过直方图均衡化后的图片的直方图

(3)自适应直方图均衡化(局部直方图处理)

三、直方图均衡化的应用

1. 增强图像对比度

2. 提升图像视觉效果

3. 统一图像灰度分布

4. 适用于低对比度图像

总结


一、直方图

直方图:是图像中像素强度分布的图形表达方式,统计各个强度像素值的个数。

直方图的作用:例如视频中。通过标记帧和帧之间显著的边缘和颜色的统计变化,来检测视频中场景的变换。

灰度值在0 - 255范围之间总共 256 个值,可以将我们的范围划分为子部分(称为bins),例如我们可以将这些像素亮度值划分为16个区间值,【0,15】、【16,31】,这两个就是两个亮度区间,它表示会统计亮度值在0到15的所有像素点的个数。

 1、计算并显示直方图

cv2.calcHist(images,channels,mask,histSize,ranges)  计算图像的直方图,用于表示图像中像素灰度级别的分布情况.
images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]

channels: 表示传入的图像通道数。如果输入图像是灰度图它的值就是 [0]。
          如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。

mask: 掩模图像。统计整幅图像的直方图就把它为None。但是如果你想统计图像某一部分的直方图,你就制作一个掩模图像并使用它。

histSize:BINS的数目。也需用中括号括来   (分成多少个区间)
  BINS :上面的直方图显示了每个像素值的像素数,即从0到255。即您需要256个值才能显示上述直方图。
      但是请考虑一下,如果您不需要单独查找所有像素值的像素数,而是在像素值间隔内查找像素数,
      例如,您需要找到介于 0 到 15 之间的像素数,然后是 16 到 31、32到47...、240 到 255。
      您只需要 16 个值来表示直方图。
因此,只需将整个直方图拆分为 16 个子部分,每个子部分的值就是其中所有像素计数的总和。
这每个子部分都称为"BIN"。在第一种情况下,条柱数为256(每个像素一个),而在第二种情况下,它只有16。BINS 在 OpenCV 文档中由术语histSize表示。

ranges: 像素值范围常为 [0 256]

2、使用matplotlib方法绘制直方图(不划分小的子区间)

 这里使用了 numpy 的 ravel 函数,将多维数组拉成一维数组。

img =cv2.imread('../data/310.jpg',cv2.IMREAD_GRAYSCALE)# 转成一维
a=img.ravel()# 使用 matplotlib 的 hist 函数绘制直方图。
plt.hist(a,bins=256)
plt.show()# 参数解释:
# - a:一维数组,即图像的像素值组成的数组。
# - bins=256:指定直方图的条数,即灰度级的数量。

效果:可以看出下面结果中有0~256的亮度值的统计情况 

 

3、使用opencv的方法绘制直方图 (划分16个小的子亮度区间)

#这里的calcHist参数在上面有介绍,这里是对img图片做直方图统计,采用灰度图,即零通道,未设置掩膜,划分为16个区间,亮度值统计[0,256]的值
phone_hist = cv2.calcHist([img],[0],None,[16],[0,256])
plt.plot(phone_hist)#使用calcHist的值绘制曲线图
plt.show()

效果,统计的值为每个亮度区间内属于该亮度值的像素点个数

4、绘制彩色图像的直方图,将各个通道的直方图值都画出来

img=cv2.imread('zl.jpg')
color=('b','g','r')    #设置绘制的折线图每条线的颜色
for i,col in enumerate(color):    #依次遍历三个颜色通道histr=cv2.calcHist([img],[i],None,[256],[0,256])    #依次计算每个通道的直方图值plt.plot(histr,color=col)    #绘制折线图
plt.show()

效果:分别统计了不同颜色通道下的直方图

二、直方图均衡化

直方图均衡化:直方图均衡化是一种图像增强技术,它可以通过增加图像的对比度和亮度来改善图像的质量。直方图均衡化通过将图像的像素值分布均匀化来实现这一目标。
在Python OpenCV中,可以使用cv2.equalizeHist()函数来实现直方图均衡化。该函数将输入图像转换为灰度图像,并将其像素值分布均匀化,从而增强图像的对比度和亮度。下面是将不均衡的直方图均衡化之后的结果。

(1)绘制原图的直方图

woman = cv2.imread('ja.jpg',cv2.IMREAD_GRAYSCALE)
# # # phone_hist = cv2.calcHist([phone],[0],None,[256],[0,256])
plt.hist(woman.ravel(), bins=256)#numpy中的ravel将数组多维度拉成一维数组
plt.show()

 可以看出图像的亮度值集中在50左右

 

 (2)绘制经过直方图均衡化后的图片的直方图

phone_equalize = cv2.equalizeHist(woman)
plt.hist(phone_equalize.ravel(), bins=256)#numpy中的ravel将数组多维度拉成一维数组
plt.show()

与原图对比,直方图均衡化是对全局做均衡化,这使亮度值很大的像素点增多了,表现在图像上就是图像整体变亮。 

 

(3)自适应直方图均衡化(局部直方图处理)

普通直方图均衡化(HE)通过全局灰度变换增强对比度,但对噪声敏感且可能过度放大局部噪声(如暗部噪声)。自适应直方图均衡化(AHE) 将图像划分为多个子块(tiles),对每个子块独立进行直方图均衡化,从而实现局部对比度增强,避免全局均衡化的缺陷。

改进版:限制对比度的自适应直方图均衡化(CLAHE, Contrast-Limited AHE):在 AHE 基础上,通过设定灰度值裁剪阈值(clip limit),防止子块内噪声或纹理被过度增强,是实际应用中更常用的方法。

主要优点

  • 局部对比度增强:针对不同区域的局部特征调整对比度,适合光照不均或局部细节丰富的图像(如医学影像、卫星图像)。
  • 抑制噪声放大:通过裁剪阈值(clip limit)限制子块内直方图的峰值,避免噪声或纹理被过度增强。
  • 保留细节与自然感:相比全局均衡化,CLAHE 在增强局部细节的同时,减少过增强导致的伪影(如棋盘效应)。

函数:cv2.createCLAHE([, clipLimit[, tileGridSize]]) 

参数说明:
clipLimit:设定子块内直方图均衡化时的灰度值裁剪阈值,单位为 “像素数 / 面积”(即每个灰度级允许的最大像素数密度)。可选项,默认值 8
titleGridSize:设定子块的大小(行数 × 列数),单位为像素。可选项,默认值 (8,8)。
  • titleGridSize取值影响
    • 较小尺寸(如 4x4):局部细节增强更精细,但计算量增加,可能引入棋盘效应(需通过插值缓解)。
    • 较大尺寸(如 16x16):局部处理更粗糙,适合全局对比度增强需求,减少分块边界的影响。

创建一个自适应直方图对像,并将上面的woman这张图像传入

clahe = cv2.createCLAHE(clipLimit=1, tileGridSize=(16,16))#通过类创建了一个局部均衡化对象
phone_clahe = clahe.apply(woman)
plt.hist(phone_clahe.ravel(), bins=256)#numpy中的ravel将数组多维度拉成一维数组
plt.show()

自适应直方图均衡化则是划分子块均衡化会减少分块边界的影响。 

 使用hstack()函数水平堆叠上面的三张图片用于对比,直方图均衡化与自适应直方图均衡化的区别

  • hstackhconcat):水平堆叠,沿列方向扩展。
  • vstackvconcat):垂直堆叠,沿行方向扩展(对应函数为 np.vstack 和 cv2.vconcat)。
res = np.hstack((woman,phone_equalize,phone_clahe))
cv2.imshow('phone_equalize',res)
cv2.waitKey(0)

 从左到右依次是原图、直方图均衡化、自适应直方图均衡化

三、直方图均衡化的应用

1. 增强图像对比度

  • 原理:将图像中原本集中的灰度范围 “拉伸” 到更宽的动态范围,使图像中不同灰度级的像素分布更均匀(直方图趋于平坦)。
  • 效果:让原本对比度低、细节模糊的图像(如暗部过暗或亮部过亮)变得更清晰,暗部和亮部的细节更容易分辨。
  • 示例:在医学影像(如 X 光片)中,均衡化可增强组织间的对比度,便于医生观察病灶。

2. 提升图像视觉效果

  • 通过均衡化,图像中原本难以区分的灰度区域(如相近的明暗过渡)会变得层次分明,整体视觉效果更自然。
  • 例如:修复老照片时,均衡化可改善因曝光不足或过度导致的细节丢失。

3. 统一图像灰度分布

  • 将图像的灰度直方图调整为近似均匀分布,使像素灰度值覆盖更广泛的范围。
  • 这为后续的图像处理任务(如图像分割、特征提取、模式识别等)提供更优质的输入,提升算法效果。

4. 适用于低对比度图像

  • 特别适合处理因光照不均、传感器噪声等导致对比度低下的图像(如阴天拍摄的照片、卫星遥感图像),通过均衡化恢复图像细节。

总结

直方图均衡化通过重新分配像素的灰度值,将图像的动态范围最大化利用,使图像从 “对比度不足” 转变为 “层次丰富”,是图像处理中基础且高效的增强手段。其本质是通过数学变换(累积分布函数,CDF)实现灰度的非线性映射,从而优化视觉效果和后续处理的可行性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com