直方图均衡化的原理及实现途径_请简述图像直方图均衡的原理

直方图均衡化的原理及实现途径_请简述图像直方图均衡的原理直方图均衡化的原理及实现一、直方图1.1直方图的概念在图像处理中,经常用到直方图,如颜色直方图、灰度直方图等。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的率。如下图所示1.2直方图的性质①直方图反映了图像中的灰度分布规律。它描述每个灰度级具有的像素个数,但不包含这些像素在图像中的位置信息。图像直方图不关心像

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

直方图均衡化的原理及实现

一、直方图

1.1 直方图的概念

在图像处理中, 经常用到直方图, 如颜色直方图、 灰度直方图等。

图像的灰度直方图就描述了图像中灰度分布情况, 能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数, 描述的是图像中具有该灰度级的像素的个数: 其中, 横坐标是灰度级, 纵坐标是该灰度级出现的率。如下图所示

在这里插入图片描述
1.2 直方图的性质

① 直方图反映了图像中的灰度分布规律。 它描述每个灰度级具有的像素个数, 但不包含这些像素在图像中的位置信息。 图像直方图不关心像素所处的空间位置, 因此不受图像旋转和平移变化的影响, 可以作为图像的特征。

② 任何一幅特定的图像都有唯一的直方图与之对应, 但不同的图像可以有相同的直方图。

③如果一幅图像有两个不相连的区域组成, 并且每个区域的直方图已知, 则整幅图像的直方图是该两个区域的直方图之和。

1.3 直方图的应用

下图是四种常见的直方图的灰度分布规律
在这里插入图片描述
如果需要将上图中灰度偏暗、偏亮或偏集中的直方图调整为灰度均匀分布的直方图,就需要用到直方图均衡化算法。

二、直方图均衡化

2.1 直方图均衡化的概念

直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布通过累积分布函数变成近似均匀分布,从而增强图像的对比度。为了将原图像的亮度范围进行扩展, 需要一个映射函数, 将原图像的像素值均衡映射到新直方图中, 这个映射函数有两个条件:

①不能打乱原有的像素值大小顺序, 映射后亮、 暗的大小关系不能改变;

② 映射后必须在原有的范围内,即像素映射函数的值域应在0和255之间;

综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

2.2 累积分布函数的数学原理

因为图像由一个个像素点组成,所以图像直方图均衡化是通过离散形式的累积分布函数求解的,直方图均衡化过程中,映射方法是:
在这里插入图片描述
其中,s_k指当前灰度级经过累积分布函数映射后的值,n是图像中像素的总和,n_j是当前灰度级的像素个数,L是图像中的灰度级总数。

(直方图均衡化数学原理,详细查看:> https://blog.csdn.net/superjunenaruto/article/details/52431941)

2.3 直方图均衡化的步骤

①依次扫描原始灰度图像的每一个像素, 计算出图像的灰度直方图;

②计算灰度直方图的累积分布函数;

③根据累积分布函数和直方图均衡化原理得到输入与输出之间的映射关系。

④最后根据映射关系得到结果进行图像变换

2.4 参考下面这个例子可以更直观的理解直方图均衡化的原理及过程
在这里插入图片描述
三、代码块及实现效果

3.1 代码块

import cv2
import numpy as np
from matplotlib import pyplot as plt

''' calcHist-计算图像直方图 函数原型:calcHist(images,channels,mask,histSize,ranges,hist=None,accumulate=None) images:图像矩阵,例如:[image] channels:通道数,例如:0 mask:掩膜,一般为:None histSize:直方图大小,一般等于灰度级数 ranges:横轴范围 '''

# 获取灰度图像
img = cv2.imread("D:\pycharm\exercise\spring festival holiday\lenna.PNG", 0)

# 灰度图像的直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.figure()#新建一个图像
plt.title("Grayscale Histogram")
plt.xlabel("Bins")#X轴标签
plt.ylabel("# of Pixels")#Y轴标签
plt.plot(hist)
plt.xlim([0,256])#设置x坐标轴范围
plt.show()


''' equalizeHist—直方图均衡化 函数原型: equalizeHist(src, dst=None) src:图像矩阵(单通道图像) dst:默认即可 '''
# 灰度图像直方图均衡化
dst = cv2.equalizeHist(img)

# 直方图
hist = cv2.calcHist([dst],[0],None,[256],[0,256])

plt.figure()
plt.hist(dst.ravel(), 256)
plt.show()

cv2.imshow("Histogram Equalization",np.hstack([img, dst]))
cv2.waitKey(0)

3.2 处理效果

源图直方图
在这里插入图片描述
均衡化处理后的直方图
在这里插入图片描述
源图与均衡化处理后的对比效果
在这里插入图片描述
3.3 彩色直方图均衡化代码块

# 彩色图像直方图均衡化
img = cv2.imread("lenna.png", 1)
cv2.imshow("src", img)

# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
cv2.imshow("dst_rgb", result)

cv2.waitKey(0)

四、参考资料:

1、直方图均衡化原理:https://www.cnblogs.com/tianyalu/p/5687782.html

2、直方图均衡化的数学原理:https://blog.csdn.net/superjunenaruto/article/details/52431941

3、直方图均衡化方面的知识和方法:https://zhuanlan.zhihu.com/p/44918476

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179232.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网卡绑定模式bond0(多个网卡bond)

    在现在的网络中,带宽越来越高,线路的带宽可以达到1000m的带宽,但是想要达到整体性能达到1000m的带宽却很难,因为网络i/o限制着,无法整体达到这么高的带宽,甚至有时以前买的服务器网卡带宽不咋地,导致整个网络的带宽无法提升。但是linux的bond模块和ifenslave网卡聚合工具可以解决这一问题。利用bond模块连接内核实现双网卡通信,使用ifens…

    2022年4月10日
    160
  • 简练网软考知识点整理-项目需求跟踪及需求跟踪矩阵[通俗易懂]

    简练网软考知识点整理-项目需求跟踪及需求跟踪矩阵[通俗易懂]需求跟踪矩阵是把产品需求从其来源连接到能满足需求的可交付成果的一种表格。使用需求跟踪矩阵,可以把每个需求与业务目标或项目目标联系起来,有助于确保每个需求都具有商业价值。需求跟踪矩阵提供了在整个项目生命周期中跟踪需求的一种方法,有助于确保需求文件中被批准的每项需求在项目结束的时候都能交付。最后,需求跟踪矩阵还为管理产品范围变更提供了框架。

    2025年5月24日
    5
  • MySQL8.0.26安装配置教程(windows 64位)

    MySQL8.0.26安装配置教程(windows 64位)一.进入MySQL官网下载安装进入Mysql官网MySQL点击DOWNLOADS下拉页面点击红框内容跳转页面后点击红框下载后并解压到目标文件夹(一定要记住路径)二.配置并初始化MySQL首先创建一个txt文档,并复制如下代码其中安装目录需更改为你所下载的目录存放目录需改为事先新建好的data文件夹目录[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=D:\mysql-8.0.26-winx.

    2022年6月9日
    53
  • 单片机哈佛和普林斯顿体系_哈佛结构的基本特点

    单片机哈佛和普林斯顿体系_哈佛结构的基本特点https://blog.csdn.net/skywalker_leo/article/details/78194631.冯·诺依曼结构冯·诺依曼结构,又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行;缺点是在高速运行时,不能达到同时取指令和取操作数,从而形成了传输过程的瓶颈。由于程序指令存储…

    2022年10月4日
    3
  • 某次心血来潮的破解案例

    某次心血来潮的破解案例背景前面遇到一个so解密的问题,学习了一波IDA。无聊之际,买了个游戏来耍耍,突发奇想,想着尝试一些花里胡哨的东西,于是有了以下内容。逻辑分析与实现寻找对应代码实现dl

    2021年12月13日
    66
  • Prophet调参[通俗易懂]

    Prophet调参[通俗易懂]本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验。一参数理解篇classProphet(object):def__init__(self,growth=’linear’,changepoints=None,n_changepoints=25,changepoint_range=0.8,yearly_seasona

    2022年6月16日
    110

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号