使用python完成均衡化直方图和规定化直方图 您所在的位置:网站首页 什么是直方图均衡化处理 使用python完成均衡化直方图和规定化直方图

使用python完成均衡化直方图和规定化直方图

#使用python完成均衡化直方图和规定化直方图| 来源: 网络整理| 查看: 265

均衡化直方图

直方图均衡化是一种图像增强方法,其主要作用是增强图像的对比度和亮度,使图像更加清晰明亮。在图像处理、计算机视觉和模式识别等领域中,直方图均衡化是一种常用的预处理方法,它可以用于图像增强、目标检测、图像分类、图像分割等各种图像处理任务。

直方图均衡化的原理是把图像像素的灰度值分布均匀化,让图像的灰度值分布均匀地覆盖整个灰度范围,从而使得图像中各层次的细节更加明显,同时增强图像的对比度和亮度。通过直方图均衡化,可以使得原本暗淡、模糊、低对比度的图像变得更加清晰,同时还能够提高后续图像处理算法的效果。

把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布,

均衡化直方图的好处

在实际应用中,直方图均衡化可以用于改善图像的视觉效果,提高视觉感受性和美感,同时也可以用于改善图像的质量,提高图像处理功能。

简单说,就是把原来的图像的灰度分配均匀,使得0-255都有一定的取值,这样对比度相对大一些,视觉上更好看

代码 import cv2 from matplotlib import pyplot as plt # 读取图片 img = cv2.imread('img.png') # 将图片转换为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行直方图均衡化 equ_gray_img = cv2.equalizeHist(gray_img) # 显示原始灰度图像和直方图 plt.subplot(2, 2, 1), plt.imshow(gray_img, cmap='gray'), plt.title('Original Gray Image') plt.subplot(2, 2, 2), plt.hist(gray_img.ravel(), 256, [0, 256]), plt.title('Histogram of Original Gray Image') # 显示均衡化后的灰度图像和直方图 plt.subplot(2, 2, 3), plt.imshow(equ_gray_img, cmap='gray'), plt.title('Equalized Gray Image') plt.subplot(2, 2, 4), plt.hist(equ_gray_img.ravel(), 256, [0, 256]), plt.title('Histogram of Equalized Gray Image') plt.show() 均衡化直方图 规定化直方图

直方图规定化(Histogram Equalization)是一种将图像的灰度分布调整为均匀分布的图像增强方法,可以改善图像的对比度和亮度,使得图像细节更加明显。

直方图规定化可以实现以下几个方面的好处:

改善图像视觉效果:直方图规定化可以增强图像的对比度和亮度,让人更容易识别图像中的细节和信息。 提升图像质量:直方图规定化可以消除图像中存在的过度曝光或欠曝光的问题,将图像的灰度级进行平衡,使得图像更加清晰并具有更高的质量。 便于后续处理:直方图规定化可以使得图像在后续处理中更加容易操作,例如图像分割或图像识别等领域的处理。

因此,直方图规定化是一种非常有用的图像增强技术,可以改善图像质量和视觉效果,提高图像处理的准确性和效率。

代码

在 Python 中,进行直方图规定化(Histogram Equalization Matching)需要读取一个模板图片,用来指定期望的直方图分布形状。直方图规定化可以将一张图像的像素值分布匹配到另一张图像的像素值分布,从而达到两张图像之间色彩风格的统一。

import cv2 import numpy as np # 读取需要处理的图片和模板图片 src_img = cv2.imread('src_img.jpg') template_img = cv2.imread('template_img.jpg') # 将图片转换为灰度图 src_gray = cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY) template_gray = cv2.cvtColor(template_img, cv2.COLOR_BGR2GRAY) # 计算原图的直方图和累积分布函数 src_hist, _ = np.histogram(src_gray.ravel(), 256, [0, 256]) src_cdf = src_hist.cumsum() src_cdf_normalized = src_cdf * src_hist.max() / src_cdf.max() # 计算模板图的直方图和累积分布函数 template_hist, _ = np.histogram(template_gray.ravel(), 256, [0, 256]) template_cdf = template_hist.cumsum() template_cdf_normalized = template_cdf * template_hist.max() / template_cdf.max() # 计算原图的直方图均衡化映射关系 src_cdf_normalized_int = src_cdf_normalized.astype('uint8') src_mapping = np.interp(src_cdf_normalized_int, template_cdf_normalized, range(256)) # 将映射关系应用到原图 src_new = src_mapping[src_gray] # 显示处理前后的图像 cv2.imshow('src', src_gray) cv2.imshow('template', template_gray) cv2.imshow('result', src_new) cv2.waitKey() cv2.destroyAllWindows()

这段代码使用直方图匹配技术将原图像的灰度分布映射到模板图像的灰度分布上。因此,使用的模板图片应该与原图片在灰度分布上有较大的相似度。如果模板图片与原图片不匹配,可能会导致结果不理想。

此外,如果您使用的模板图像比原始图像的灰度范围更小,则将生成的映射关系应用于原始图像可能会导致结果像您所见到的那样变得过于明亮和失真。您可以尝试使用具有与原始图像类似灰度分布的模板图像,或者根据实际情况修改代码以适应所使用的图像。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有