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

直方图均衡化的原理及实现途径_请简述图像直方图均衡的原理直方图均衡化的原理及实现一、直方图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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html一个汉字空格占位_html表示空格的特殊符号

    html一个汉字空格占位_html表示空格的特殊符号 ==普通的英文半角空格 == == ==no-breakspace(普通的英文半角空格但不换行) ==中文全角空格(一个中文宽度) == ==en空格(半个中文宽度) == ==em空格…

    2022年10月5日
    0
  • CSS改变鼠标样式(图片)

    CSS改变鼠标样式(图片)下面就来介绍下步骤方法:首页把鼠标图标格式转换成.ico格式,大小为32*32转换格式网址为:https://www.easyicon.net/covert/然后在CSS样式中增加代码:*{cursor:url(../images/shubiao.ico),auto;}大功告成啦~~~说明:图片大小最好是32*32的大小Css中的cursor属性不仅仅需…

    2022年5月31日
    31
  • Prophet调参[通俗易懂]

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

    2022年6月16日
    108
  • css3 transition用法(很详细)

    css3 transition用法(很详细)解释transition(CSS属性)是transition-property,transition-duration,transition-timing-function和transition-delay的一个简写属性。transition可以为一个元素在不同状态之间切换的时候定义不同的过渡效果。以下是属性解释。值描述transition-property指定CSS属性的name,transition效果transition-durationtransit

    2022年7月14日
    14
  • realme gt neo刷鸿蒙(realmegt大师探索版值得入手吗)

    realme真我GTNeo于上月31日举行了发布会,于4月8日零点正式开售。realmeGTNeo首发搭载天玑1200旗舰芯片、120Hz电竞屏等,12GB+256GB版本仅售2299元。天玑1200性能强劲,真我GTNeo可谓是两千元档最强性能旗舰手机,学生党入手也毫无压力。本次真我GTNeo瞄准年轻市场,专为Z世代量身打造。在外观上,GTNeo推出了最终幻想、骇客黑与极客…

    2022年4月15日
    249
  • 五大常用算法之三:贪心算法

    一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键

    2021年12月25日
    41

发表回复

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

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