直方图均衡Python

对于图像处理,直方图均衡是一种很常用的图像增强技术,可以将一幅图像中灰度较低的区域和灰度较高的区域之间的灰度值差异增强,达到提高图像对比度的目的。Python中也有相关库函数可以实现直方图均衡,这篇文章将从多个方面对其进行详细讲解。

一、简介

直方图是描述图像灰度级分布的函数,表示图像中各个强度级所具有的像素数目。一般来说,我们可以通过直方图了解图像的亮度分布情况。直方图均衡化是一种增强图像对比度的方法,通过对直方图进行变换来实现,使得分布在低灰度区域的像素值均匀分布在整个灰度级范围内,从而提高图像的对比度。

Python中,通过PIL库中的ImageOps模块可以直接调用已经封装好的直方图均衡函数equalize()实现图像的直方图均衡化。


from PIL import Image, ImageOps

image = Image.open("example.jpg")
image_enhanced = ImageOps.equalize(image)

二、实现过程

在实现直方图均衡过程中,需要分别进行如下三个步骤:

1.计算直方图

计算图像的灰度级分布情况,即直方图。可以利用Python中的numpy和matplotlib库来实现计算和绘制直方图。


import numpy as np
import matplotlib.pyplot as plt

image = plt.imread("example.jpg")
hist, bins = np.histogram(image.flatten(), 256, [0,255])

plt.plot(hist)
plt.show()

2.计算累计概率分布函数

根据计算出来的直方图,计算出累计概率分布函数(CDF),即各个灰度级所占比例的累积分布情况。


cdf = hist.cumsum()
cdf_normalized = cdf / cdf.max()

plt.plot(cdf_normalized)
plt.show()

3.计算映射表

根据累计概率分布函数,计算出映射表,即原图像中每个像素值对应的新像素值。


cdf_m = np.ma.masked_equal(cdf,0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m,0).astype('uint8')

image_enhanced = np.interp(image, bins[:-1], cdf)

三、示例代码

预处理,包括读取及灰度转换


from PIL import Image
import numpy as np

image = Image.open("example.jpg")
image = image.convert("L")

计算直方图


import matplotlib.pyplot as plt

hist, bins = np.histogram(image.flatten(), 256, [0,255])

plt.plot(hist)
plt.show()

计算累计概率分布函数


cdf = hist.cumsum()
cdf_normalized = cdf / cdf.max()

plt.plot(cdf_normalized)
plt.show()

计算映射表


cdf_m = np.ma.masked_equal(cdf,0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m,0).astype('uint8')

image_enhanced = np.interp(image, bins[:-1], cdf)

使用PIL库进行直方图均衡


from PIL import ImageOps

image_enhanced_pil = ImageOps.equalize(image)

image_enhanced_pil.show()

四、应用场景

直方图均衡是提高图像对比度的一种有效方法,可用于各种图像处理领域中,如计算机视觉、图像识别等。

在特定应用场景中,如军事侦察、安保等,对于图像的清晰度要求很高,直方图均衡技术可以提高图像的对比度、增强细节信息,有利于图像的分析和处理。

五、总结

直方图均衡是一种常用的图像增强技术,Python中也有相关库函数可以实现图像的直方图均衡。通过计算直方图、累计概率分布函数和映射表,可以实现对图像的直方图均衡,从而增强图像对比度、提高细节信息的清晰度。

原创文章,作者:PGEWJ,如若转载,请注明出处:https://www.506064.com/n/375581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PGEWJPGEWJ
上一篇 2025-04-29 12:49
下一篇 2025-04-29 12:49

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论