python 直方图均衡化

目录

图像的直方图是什么¶

直方图均衡化是什么¶

直方图均衡化是怎样做到的¶

实现过程可视化分析


图像的直方图是什么

  1. 直方图是图像中像素强度分布的图形表达方式。
  2. 它统计了每一个强度值所具有的像素个数。

直方图均衡化是什么

  1. 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。
  2. 说得更清楚一些, 像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围.。

直方图均衡化是怎样做到的

  1. 均衡化指的是把一个分布 (给定的直方图) 映射 到另一个分布 (一个更宽更统一的强度值分布), 所以强度值分布会在整个范围内展开。

  2. 要想实现均衡化的效果, 映射函数应该是一个累积分布函数 (cdf) 。

实现过程可视化分析

 1、读取原始图

img_vis = cv2.imread(rfn_path, cv2.IMREAD_GRAYSCALE)
plt.imshow(img_vis, 'gray')
plt.show()

2、 统计原始图直方图

plt.hist(img_vis.flatten(), 256)
plt.show()

 3、均衡化后的图像

# 均衡化处理
img_equalize_hist, cdf = equalize_hist(img_vis)
# 显示均衡化图
from PIL import Image
img_equalize_hist = Image.fromarray(np.uint8(img_equalize_hist))
img_equalize_hist.show()

 4、均衡化后的直方图

plt.hist(img_equalize_hist.flatten(),256)
plt.show()

 5、累积分布函数图

 6、全部源代码

import numpy as np
import os
import cv2
import csv
import matplotlib.pyplot as plt

rgb_path = "L:\\Flir\\FLIR_ADAS_1_3\\FLIR_ADAS_1_3\\train\\RGB"
rgb_file_name = os.listdir(rgb_path)

vis_stds = []
infrar_stds = []

def equalize_hist(im, nbr_bins=256):
    """对一幅灰度图像进行直方图均衡化"""
    # 图像直方图统计
    imhist, bins = np.histogram(im.flatten(), nbr_bins, normed=True)
    # 累积分布函数
    cdf = imhist.cumsum()
    cdf = 255.0 * cdf / cdf[-1]
    # 使用累积分布函数的线性插值,计算新的像素值
    im2 = np.interp(im.flatten(), bins[:-1], cdf)  # 分段线性插值函数
    return im2.reshape(im.shape), cdf


rfn_path = os.path.join(rgb_path, rgb_file_name[1])
img_infrar = None
if os.path.exists(rfn_path):
    img_vis = cv2.imread(rfn_path, cv2.IMREAD_GRAYSCALE)
    # 显示原始图
    # plt.imshow(img_vis, 'gray')
    # plt.show()

    # 统计原始图直方图
    # plt.hist(img_vis.flatten(), 256)
    # plt.show()

    # 图像均衡化
    img_equalize_hist, cdf = equalize_hist(img_vis)

    # 显示均衡化图
    # from PIL import Image
    # img_equalize_hist = Image.fromarray(np.uint8(img_equalize_hist))
    # img_equalize_hist.show()

    # 显示均衡化图的直方图
    plt.hist(img_vis.flatten(),256, color='r')
    plt.show()

    # 显示累积分布函数
    # plt.plot(cdf, color='r')
    # plt.show()
  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python直方图均衡化是一种用于图像增强的技术,它可以通过调整图像的灰度级分布来增强图像的对比度和亮度。直方图均衡化的基本思想是将图像的灰度级分布变成均匀分布,从而使得图像的对比度增强。在Python中,可以使用OpenCV、NumPy和Matplotlib等库来实现直方图均衡化。具体实现步骤如下: 1. 读取图像并将其转换为灰度图像。 2. 统计图像中各个灰度级的像素个数,得到原始图像的灰度直方图。 3. 计算每个灰度级的累积分布函数,并将其映射到新的灰度级上。 4. 使用新的灰度级对原始图像进行重映射,得到直方图均衡化后的图像。 下面是一个简单的Python代码示例,用于实现直方图均衡化: import cv2 import numpy as np # 读取图像并将其转换为灰度图像 img = cv2.imread('img.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 统计图像中各个灰度级的像素个数,得到原始图像的灰度直方图 hist, bins = np.histogram(img_gray.ravel(), 256, [0, 256]) # 计算每个灰度级的累积分布函数,并将其映射到新的灰度级上 cdf = hist.cumsum() cdf_normalized = cdf * hist.max() / cdf.max() # 使用新的灰度级对原始图像进行重映射,得到直方图均衡化后的图像 img_eq = np.interp(img_gray.ravel(), bins[:-1], cdf_normalized).reshape(img_gray.shape) # 显示原始图像和直方图均衡化后的图像 cv2.imshow('Original Image', img_gray) cv2.imshow('Equalized Image', img_eq) cv2.waitKey(0) cv2.destroyAllWindows()

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值