图像数据处理11

二、灰度变换

2.5 直方图均衡化

2.5.1什么是图像均衡化:

上一节我们学习了直方图中灰度值的分布特点,只有灰度值分布均匀、动态范围大,才能得到得到一幅特征清晰的图像,而直方图均衡化正是通过灰度变换函数处理图像来达到上述目的。

2.5.2灰度函数的选择:

往往通过选择输入图像的累积分布函数作为灰度变换函数,可以使得输出图像的灰度直方图呈现近似均匀分布

2.5.3基本原理步骤:

先对图像进行归一化处理,得到[0,1]之间的浮点数,随后算出各个像素值的频数分布累积函数值,然后对其进行映射,因为图像的灰度级必须是整数,最后通过查表法对对图像进行灰度变换。

2.5.4特点:

1.提高图像质量
直方图均衡化通过重新分配图像的灰度级,使得图像的灰度分布更加均匀,进而提高图像质量。

2.自动化处理
直方图均衡化是一种自动化的图像处理技术,不需要人工干预。它能根据图像的直方图自动计算灰度变换函数,并进行灰度变换。

3.离散性处理:
在数字图像处理中,直方图均衡化通常针对离散灰度级进行操作的。

2.5.5对比度受限自适应直方图均衡化CLAHE

其用于处理过量、过暗的区域,并且防止处理过度。具体步骤是先将图像分割成多个小块,然后独立计算每个小块的直方图。接着,对每个小块的直方图进行对比度限制处理,裁剪超出预定阈值的部分,然后将裁剪掉的像素均匀的分布到整个灰度级上。再根据处理后的直方图计算每个小块的对比度变换函数,这一步通常涉及计算累积分布函数。随后,使用插值方法合并相邻图块的对比度变换函数,以消除块与块之间的边界效应。最后,应用合并后的对比度变换函数对原始图像进行增强处理,得到对比度的增强图像。

1. OpenCV中的处理函数

全局直方图均衡化:cv2.equalizeHist()
对比度受限自适应直方图均衡化:cv2.createCLAHE()
2.Scikit-image中的处理函数

全局直方图均衡化:exposure.equalize_hist()
对比度受限自适应直方图均衡化:exposure.equalize_adapthist()

全局直方图均衡化

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 加载图像
img = cv2.imread('saved_image.jpg', 0)  # 以灰度模式读取图像

# 计算原始图像的直方图
hist_original = cv2.calcHist([img], [0], None, [256], [0, 256])

# 应用直方图均衡化
img_equ = cv2.equalizeHist(img)

# 计算均衡化后图像的直方图
hist_equ = cv2.calcHist([img_equ], [0], None, [256], [0, 256])

# 显示原始图像的直方图
plt.subplot(2, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.subplot(2, 2, 2)
plt.plot(hist_original)
plt.title('Histogram of Original Image')

# 显示均衡化后图像的直方图
plt.subplot(2, 2, 3)
plt.imshow(img_equ, cmap='gray')
plt.title('Equalized Image')
plt.subplot(2, 2, 4)
plt.plot(hist_equ)
plt.title('Histogram of Equalized Image')

plt.tight_layout()
plt.show()

对比度受限自适应直方图均衡化CLAHE

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 读取图像
img = cv2.imread('saved_image.jpg', 0)  # 以灰度模式读取图像

# 计算原始图像的直方图
hist_original = cv2.calcHist([img], [0], None, [256], [0, 256])

# 创建CLAHE对象,设置对比度限制和网格大小
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

# 应用CLAHE
img_clahe = clahe.apply(img)

# 计算CLAHE处理后的图像直方图
hist_clahe = cv2.calcHist([img_clahe], [0], None, [256], [0, 256])

# 显示原始图像的直方图
plt.subplot(2, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.subplot(2, 2, 2)
plt.plot(hist_original)
plt.title('Histogram of Original Image')

# 显示CLAHE处理后的图像直方图
plt.subplot(2, 2, 3)
plt.imshow(img_clahe, cmap='gray')
plt.title('CLAHE Image')
plt.subplot(2, 2, 4)
plt.plot(hist_clahe)
plt.title('Histogram of CLAHE Image')

plt.tight_layout()
plt.show()

# 创建CLAHE对象,设置对比度限制和网格大小
clahe = cv2.createCLAHE(
clipLimit=2.0, tileGridSize=(8, 8))

①clipLimit:这个参数用于限制图像对比度放大的程度。它的值是一个浮点数,具体来说,如果某个像素的对比度放大倍数超过了clipLimit与直方图平均值的乘积,那么这个像素的对比度将被裁剪到这个阈值以下。这样做可以防止图像中出现过多的噪声和过曝区域。

②tileGridSize:这个参数用于设置CLAHE算法中处理图像的小块(tile)的大小。它的值是一个元组,表示小块的行数和列数。在CLAHE算法中,图像被分割成多个小块,每个小块都单独进行直方图均衡化处理。tileGridSize参数控制了这些小块的大小,从而影响了CLAHE算法的效果。如果设置得太小,可能会导致图像出现块状效应(即马赛克);如果设置得太大,则可能无法有效地增强图像的局部对比度。

注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

“本文章中所使用的圣灵谱尼图片来源于网络,版权归属原作者所有。若您认为本文章/作品的使用侵犯了您的权益,请及时与我联系,我将尽快核实并删除相关内容。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值