python 直方图均衡化

本文详细介绍了图像处理中直方图均衡化的概念及其工作原理。直方图均衡化是一种增强图像对比度的方法,通过拉伸像素强度分布范围来改善图像质量。文中还提供了直方图均衡化的实现步骤及可视化分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

图像的直方图是什么¶

直方图均衡化是什么¶

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

实现过程可视化分析


图像的直方图是什么

  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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值