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()

python 直方图均衡化

2、 统计原始图直方图

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

python 直方图均衡化

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()

python 直方图均衡化

4、均衡化后的直方图

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

python 直方图均衡化

5、累积分布函数图

python 直方图均衡化

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()

Original: https://blog.csdn.net/qq_37164776/article/details/121090035
Author: broad-sky
Title: python 直方图均衡化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/633605/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球