目录
[1.1 什么是直方图?](#1.1 什么是直方图?)
[1.2 直方图的基本概念](#1.2 直方图的基本概念)
[1.3 直方图的应用场景](#1.3 直方图的应用场景)
[2.1 计算直方图](#2.1 计算直方图)
[2.1.1 calcHist函数](#2.1.1 calcHist函数)
[2.1.2 参数说明](#2.1.2 参数说明)
[2.2 彩色图像直方图](#2.2 彩色图像直方图)
[2.3 使用NumPy计算直方图](#2.3 使用NumPy计算直方图)
[3.1 基本原理](#3.1 基本原理)
[3.2 OpenCV实现](#3.2 OpenCV实现)
[3.2.1 灰度图像均衡化](#3.2.1 灰度图像均衡化)
[3.2.2 彩色图像均衡化](#3.2.2 彩色图像均衡化)
[4.1 基本原理](#4.1 基本原理)
[4.2 OpenCV实现](#4.2 OpenCV实现)
[4.2.1 灰度图像CLAHE](#4.2.1 灰度图像CLAHE)
[4.2.2 彩色图像CLAHE](#4.2.2 彩色图像CLAHE)
[4.3 CLAHE参数调优](#4.3 CLAHE参数调优)
[5.1 基本原理](#5.1 基本原理)
[5.2 OpenCV实现](#5.2 OpenCV实现)
[6.1 对比度调整](#6.1 对比度调整)
[6.1.1 线性变换](#6.1.1 线性变换)
[6.1.2 手动调整](#6.1.2 手动调整)
[6.2 亮度调整](#6.2 亮度调整)
[6.3 对比度和亮度同时调整](#6.3 对比度和亮度同时调整)
[7.1 基本原理](#7.1 基本原理)
[7.2 OpenCV实现](#7.2 OpenCV实现)
[7.2.1 使用查找表(LUT)](#7.2.1 使用查找表(LUT))
[7.2.2 不同Gamma值对比](#7.2.2 不同Gamma值对比)
[8.1 低对比度图像增强](#8.1 低对比度图像增强)
[8.2 医学图像增强](#8.2 医学图像增强)
[8.3 夜间图像增强](#8.3 夜间图像增强)
[9.1 核心要点](#9.1 核心要点)
[9.2 最佳实践](#9.2 最佳实践)
一、直方图概述
1.1 什么是直方图?
直方图(Histogram)是图像处理中的重要工具,它统计了图像中每个灰度级(或颜色)出现的频率。直方图可以直观地反映图像的亮度分布、对比度等特征。
直方图的定义:
H(k) = nk
其中,H(k)是灰度级k的频率,nk是图像中灰度级为k的像素数量。
1.2 直方图的基本概念
直方图的重要特性:
灰度级范围:对于8位灰度图像,灰度级范围为0-255
归一化:可以将频率归一化到[0, 1]范围
累积分布:可以计算累积直方图
多维直方图:彩色图像可以有RGB、HSV等多维直方图
1.3 直方图的应用场景
图像增强:通过调整直方图改善图像质量
对比度调整:拉伸直方图提高对比度
图像分割:基于直方图的阈值选择
图像匹配:比较两幅图像的直方图相似度
图像检索:基于直方图的图像检索
二、直方图计算与显示
2.1 计算直方图
2.1.1 calcHist函数
OpenCV提供了`cv2.calcHist()`函数来计算图像的直方图。
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像(灰度)
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
#计算直方图
hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
#归一化直方图
hist = hist / hist.sum()
#显示直方图
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(hist, color='black')
plt.title('Grayscale Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.xlim([0, 256])
plt.subplot(1, 2, 2)
plt.imshow(gray_image, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')
plt.tight_layout()
plt.show()
2.1.2 参数说明
#python
cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
参数说明:
images:输入图像列表
channels:要计算的通道列表
mask:掩码图像(可选)
histSize:直方图bin的数量
ranges:像素值范围
accumulate:是否累积多个直方图
2.2 彩色图像直方图
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取彩色图像
color_image = cv2.imread('color_image.jpg')
#分离通道
b, g, r = cv2.split(color_image)
#计算各通道直方图
hist_b = cv2.calcHist([b], [0], None, [256], [0, 256])
hist_g = cv2.calcHist([g], [0], None, [256], [0, 256])
hist_r = cv2.calcHist([r], [0], None, [256], [0, 256])
#归一化
hist_b = hist_b / hist_b.sum()
hist_g = hist_g / hist_g.sum()
hist_r = hist_r / hist_r.sum()
#显示直方图
plt.figure(figsize=(15, 5))
plt.subplot(1, 4, 1)
plt.imshow(cv2.cvtColor(color_image, cv2.COLOR_BGR2RGB))
plt.title('Color Image')
plt.axis('off')
plt.subplot(1, 4, 2)
plt.plot(hist_b, color='blue')
plt.title('Blue Channel')
plt.xlim([0, 256])
plt.subplot(1, 4, 3)
plt.plot(hist_g, color='green')
plt.title('Green Channel')
plt.xlim([0, 256])
plt.subplot(1, 4, 4)
plt.plot(hist_r, color='red')
plt.title('Red Channel')
plt.xlim([0, 256])
plt.tight_layout()
plt.show()
2.3 使用NumPy计算直方图
#python
三、直方图均衡化
3.1 基本原理
直方图均衡化(Histogram Equalization)是一种图像增强技术,它通过重新分配像素值来扩展图像的动态范围,从而提高图像的对比度。
均衡化的基本思想:
计算图像的累积直方图
将累积直方图归一化到[0, 255]范围
使用归一化的累积值作为新的像素值
数学公式:
s(k) = (L1) Σi=0^k (p(i))
其中:
s(k)是均衡化后的像素值
L是灰度级数(256)
p(i)是灰度级i的概率
3.2 OpenCV实现
3.2.1 灰度图像均衡化
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取低对比度图像
low_contrast = cv2.imread('low_contrast.jpg', cv2.IMREAD_GRAYSCALE)
#直方图均衡化
equalized = cv2.equalizeHist(low_contrast)
#计算均衡化前后的直方图
hist_before = cv2.calcHist([low_contrast], [0], None, [256], [0, 256])
hist_after = cv2.calcHist([equalized], [0], None, [256], [0, 256])
#显示结果
plt.figure(figsize=(15, 10))
plt.subplot(2, 3, 1)
plt.imshow(low_contrast, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(2, 3, 2)
plt.plot(hist_before, color='black')
plt.title('Histogram Before')
plt.xlim([0, 256])
plt.subplot(2, 3, 3)
plt.imshow(equalized, cmap='gray')
plt.title('Equalized Image')
plt.axis('off')
plt.subplot(2, 3, 4)
plt.plot(hist_after, color='black')
plt.title('Histogram After')
plt.xlim([0, 256])
plt.tight_layout()
plt.show()
3.2.2 彩色图像均衡化
#python
python
import cv2
import numpy as np
#读取彩色图像
color_image = cv2.imread('low_contrast_color.jpg')
#方法1:在RGB空间均衡化(不推荐)
r, g, b = cv2.split(color_image)
r_eq = cv2.equalizeHist(r)
g_eq = cv2.equalizeHist(g)
b_eq = cv2.equalizeHist(b)
rgb_eq = cv2.merge([r_eq, g_eq, b_eq])
#方法2:在YCrCb或LAB空间均衡化(推荐)
#YCrCb空间
ycrcb = cv2.cvtColor(color_image, cv2.COLOR_BGR2YCrCb)
y, cr, cb = cv2.split(ycrcb)
y_eq = cv2.equalizeHist(y)
ycrcb_eq = cv2.merge([y_eq, cr, cb])
ycrcb_eq = cv2.cvtColor(ycrcb_eq, cv2.COLOR_YCrCb2BGR)
#LAB空间
lab = cv2.cvtColor(color_image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
l_eq = cv2.equalizeHist(l)
lab_eq = cv2.merge([l_eq, a, b])
lab_eq = cv2.cvtColor(lab_eq, cv2.COLOR_LAB2BGR)
#显示结果
cv2.imshow('Original', color_image)
cv2.imshow('RGB Equalized', rgb_eq)
cv2.imshow('YCrCb Equalized', ycrcb_eq)
cv2.imshow('LAB Equalized', lab_eq)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.3 直方图均衡化的优缺点
优点:
自动提高图像对比度
不需要手动调整参数
计算简单,速度快
缺点:
可能过度增强噪声
对局部对比度改善有限
可能导致颜色失真(彩色图像)
不适合所有类型的图像
四、CLAHE(对比度受限自适应直方图均衡化)
4.1 基本原理
CLAHE(Contrast Limited Adaptive Histogram Equalization)是直方图均衡化的改进版本,它在局部区域进行均衡化,并限制对比度的增强程度。
CLAHE的核心改进:
-
自适应:将图像分成小块,在每个小块内进行均衡化
-
对比度限制:限制对比度的增强程度,避免过度增强
-
双线性插值:在块边界使用双线性插值,避免块效应
CLAHE的参数:
Clip Limit:对比度限制阈值,控制增强程度
Tile Grid Size:网格大小,控制局部区域的尺寸
4.2 OpenCV实现
4.2.1 灰度图像CLAHE
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取低对比度图像
low_contrast = cv2.imread('low_contrast.jpg', cv2.IMREAD_GRAYSCALE)
#创建CLAHE对象
#clipLimit: 对比度限制阈值(1.0~4.0)
#tileGridSize: 网格大小(通常是8x8)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
#应用CLAHE
clahe_result = clahe.apply(low_contrast)
#全局直方图均衡化
equalized = cv2.equalizeHist(low_contrast)
#计算直方图
hist_original = cv2.calcHist([low_contrast], [0], None, [256], [0, 256])
hist_clahe = cv2.calcHist([clahe_result], [0], None, [256], [0, 256])
hist_equalized = cv2.calcHist([equalized], [0], None, [256], [0, 256])
#显示结果
plt.figure(figsize=(15, 10))
plt.subplot(2, 3, 1)
plt.imshow(low_contrast, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(2, 3, 2)
plt.imshow(clahe_result, cmap='gray')
plt.title('CLAHE Result')
plt.axis('off')
plt.subplot(2, 3, 3)
plt.imshow(equalized, cmap='gray')
plt.title('Global Equalized')
plt.axis('off')
plt.subplot(2, 3, 4)
plt.plot(hist_original, color='black')
plt.title('Original Histogram')
plt.xlim([0, 256])
plt.subplot(2, 3, 5)
plt.plot(hist_clahe, color='blue')
plt.title('CLAHE Histogram')
plt.xlim([0, 256])
plt.subplot(2, 3, 6)
plt.plot(hist_equalized, color='red')
plt.title('Global Equalized Histogram')
plt.xlim([0, 256])
plt.tight_layout()
plt.show()
4.2.2 彩色图像CLAHE
#python
python
import cv2
import numpy as np
#读取彩色图像
color_image = cv2.imread('low_contrast_color.jpg')
#方法1:在YCrCb空间应用CLAHE
ycrcb = cv2.cvtColor(color_image, cv2.COLOR_BGR2YCrCb)
y, cr, cb = cv2.split(ycrcb)
#创建CLAHE对象
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
#只对Y通道应用CLAHE
y_clahe = clahe.apply(y)
#合并通道
ycrcb_clahe = cv2.merge([y_clahe, cr, cb])
result_ycrcb = cv2.cvtColor(ycrcb_clahe, cv2.COLOR_YCrCb2BGR)
#方法2:在LAB空间应用CLAHE
lab = cv2.cvtColor(color_image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
#对L通道应用CLAHE
l_clahe = clahe.apply(l)
#合并通道
lab_clahe = cv2.merge([l_clahe, a, b])
result_lab = cv2.cvtColor(lab_clahe, cv2.COLOR_LAB2BGR)
#显示结果
cv2.imshow('Original', color_image)
cv2.imshow('YCrCb CLAHE', result_ycrcb)
cv2.imshow('LAB CLAHE', result_lab)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.3 CLAHE参数调优
#python
python
import cv2
import numpy as np
#读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
#测试不同的CLAHE参数
clip_limits = [1.0, 2.0, 3.0, 4.0]
tile_sizes = [(4, 4), (8, 8), (16, 16)]
plt.figure(figsize=(15, 10))
for i, clip_limit in enumerate(clip_limits):
for j, tile_size in enumerate(tile_sizes):
clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_size)
result = clahe.apply(image)
plt.subplot(len(clip_limits), len(tile_sizes), i * len(tile_sizes) + j + 1)
plt.imshow(result, cmap='gray')
plt.title(f'Clip: {clip_limit}, Tile: {tile_size}')
plt.axis('off')
plt.tight_layout()
plt.show()
五、直方图匹配
5.1 基本原理
直方图匹配(Histogram Matching)是指将一幅图像的直方图调整为与另一幅图像的直方图相似,从而使两幅图像具有相似的亮度分布。
直方图匹配的步骤:
计算源图像和目标图像的直方图
计算源图像的累积直方图
计算目标图像的累积直方图
创建映射函数,将源图像的累积值映射到目标图像的累积值
应用映射函数到源图像
5.2 OpenCV实现
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取源图像和目标图像
source = cv2.imread('source.jpg', cv2.IMREAD_GRAYSCALE)
target = cv2.imread('target.jpg', cv2.IMREAD_GRAYSCALE)
#计算直方图
hist_source = cv2.calcHist([source], [0], None, [256], [0, 256])
hist_target = cv2.calcHist([target], [0], None, [256], [0, 256])
#归一化
hist_source = hist_source / hist_source.sum()
hist_target = hist_target / hist_target.sum()
#计算累积直方图
cdf_source = hist_source.cumsum()
cdf_target = hist_target.cumsum()
#创建映射函数
mapping = np.zeros(256, dtype=np.uint8)
for i in range(256):
#找到目标累积直方图中最接近的值
idx = np.argmin(np.abs(cdf_target - cdf_source[i]))
mapping[i] = idx
#应用映射函数
matched = cv2.LUT(source, mapping)
#显示结果
plt.figure(figsize=(15, 5))
plt.subplot(1, 4, 1)
plt.imshow(source, cmap='gray')
plt.title('Source Image')
plt.axis('off')
plt.subplot(1, 4, 2)
plt.imshow(target, cmap='gray')
plt.title('Target Image')
plt.axis('off')
plt.subplot(1, 4, 3)
plt.imshow(matched, cmap='gray')
plt.title('Matched Image')
plt.axis('off')
plt.subplot(1, 4, 4)
plt.plot(hist_source, color='blue', label='Source')
plt.plot(hist_target, color='red', label='Target')
plt.title('Histograms')
plt.legend()
plt.xlim([0, 256])
plt.tight_layout()
plt.show()
六、对比度与亮度调整
6.1 对比度调整
6.1.1 线性变换
#python
python
import cv2
import numpy as np
#读取图像
image = cv2.imread('image.jpg')
#对比度调整
#alpha: 对比度因子(1.0表示不变,>1.0增加对比度,<1.0降低对比度)
alpha = 1.5
#应用对比度调整
adjusted = cv2.convertScaleAbs(image, alpha=alpha, beta=0)
#显示结果
cv2.imshow('Original', image)
cv2.imshow('Contrast Adjusted', adjusted)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.1.2 手动调整
#python
python
import cv2
import numpy as np
#读取图像
image = cv2.imread('image.jpg')
#对比度调整
#公式:new = alpha * (old - 128) + 128
alpha = 1.5 # 对比度因子
adjusted = alpha * (image.astype(np.float32) - 128) + 128
adjusted = np.clip(adjusted, 0, 255).astype(np.uint8)
#显示结果
cv2.imshow('Original', image)
cv2.imshow('Contrast Adjusted', adjusted)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.2 亮度调整
#python
python
import cv2
import numpy as np
#读取图像
image = cv2.imread('dark_image.jpg')
#亮度调整
#beta: 亮度偏移量(正数增加亮度,负数降低亮度)
beta = 50
#应用亮度调整
adjusted = cv2.convertScaleAbs(image, alpha=1.0, beta=beta)
#显示结果
cv2.imshow('Original', image)
cv2.imshow('Brightness Adjusted', adjusted)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.3 对比度和亮度同时调整
#python
python
import cv2
import numpy as np
#读取图像
image = cv2.imread('image.jpg')
#对比度和亮度调整
#alpha: 对比度因子
#beta: 亮度偏移量
alpha = 1.5
beta = 30
#应用调整
adjusted = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)
#显示结果
cv2.imshow('Original', image)
cv2.imshow('Adjusted', adjusted)
cv2.waitKey(0)
cv2.destroyAllWindows()
七、Gamma校正
7.1 基本原理
Gamma校正是一种非线性变换,用于调整图像的亮度分布,使图像在不同显示设备上显示一致。
Gamma校正的数学公式:
O = ((I / 255)^γ) 255
其中:
I是输入像素值
O是输出像素值
γ(Gamma)是校正因子
Gamma值的影响:
γ < 1:提高暗部亮度,降低对比度
γ = 1:无变化
γ > 1:降低暗部亮度,提高对比度
7.2 OpenCV实现
7.2.1 使用查找表(LUT)
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像
image = cv2.imread('image.jpg')
#Gamma校正
gamma = 0.5 # 小于1提高亮度,大于1降低亮度
#创建查找表
lookup_table = np.array([((i / 255.0) ** gamma) * 255 for i in range(256)], dtype=np.uint8)
#应用查找表
gamma_corrected = cv2.LUT(image, lookup_table)
#显示结果
cv2.imshow('Original', image)
cv2.imshow(f'Gamma Corrected (γ={gamma})', gamma_corrected)
cv2.waitKey(0)
cv2.destroyAllWindows()
7.2.2 不同Gamma值对比
#python
python
import cv2
import numpy as np
#读取图像
image = cv2.imread('image.jpg')
#测试不同的Gamma值
gamma_values = [0.5, 0.8, 1.0, 1.5, 2.0]
plt.figure(figsize=(15, 5))
for i, gamma in enumerate(gamma_values):
#创建查找表
lookup_table = np.array([((i / 255.0) ** gamma) * 255 for i in range(256)], dtype=np.uint8)
#应用查找表
gamma_corrected = cv2.LUT(image, lookup_table)
plt.subplot(1, len(gamma_values), i + 1)
plt.imshow(cv2.cvtColor(gamma_corrected, cv2.COLOR_BGR2RGB))
plt.title(f'γ = {gamma}')
plt.axis('off')
plt.tight_layout()
plt.show()
八、实战案例
8.1 低对比度图像增强
#python
python
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取低对比度图像
low_contrast = cv2.imread('low_contrast.jpg', cv2.IMREAD_GRAYSCALE)
#方法1:全局直方图均衡化
equalized = cv2.equalizeHist(low_contrast)
#方法2:CLAHE
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
clahe_result = clahe.apply(low_contrast)
#方法3:对比度调整
adjusted = cv2.convertScaleAbs(low_contrast, alpha=1.5, beta=0)
#计算直方图
hist_original = cv2.calcHist([low_contrast], [0], None, [256], [0, 256])
hist_equalized = cv2.calcHist([equalized], [0], None, [256], [0, 256])
hist_clahe = cv2.calcHist([clahe_result], [0], None, [256], [0, 256])
hist_adjusted = cv2.calcHist([adjusted], [0], None, [256], [0, 256])
#显示结果
plt.figure(figsize=(15, 10))
plt.subplot(2, 4, 1)
plt.imshow(low_contrast, cmap='gray')
plt.title('Original')
plt.axis('off')
plt.subplot(2, 4, 2)
plt.imshow(equalized, cmap='gray')
plt.title('Global Equalized')
plt.axis('off')
plt.subplot(2, 4, 3)
plt.imshow(clahe_result, cmap='gray')
plt.title('CLAHE')
plt.axis('off')
plt.subplot(2, 4, 4)
plt.imshow(adjusted, cmap='gray')
plt.title('Contrast Adjusted')
plt.axis('off')
plt.subplot(2, 4, 5)
plt.plot(hist_original, color='black')
plt.title('Original Histogram')
plt.xlim([0, 256])
plt.subplot(2, 4, 6)
plt.plot(hist_equalized, color='blue')
plt.title('Equalized Histogram')
plt.xlim([0, 256])
plt.subplot(2, 4, 7)
plt.plot(hist_clahe, color='green')
plt.title('CLAHE Histogram')
plt.xlim([0, 256])
plt.subplot(2, 4, 8)
plt.plot(hist_adjusted, color='red')
plt.title('Adjusted Histogram')
plt.xlim([0, 256])
plt.tight_layout()
plt.show()
8.2 医学图像增强
#python
python
import cv2
import numpy as np
#读取医学图像(通常是低对比度)
medical_image = cv2.imread('medical_xray.jpg', cv2.IMREAD_GRAYSCALE)
#CLAHE增强(医学图像常用方法)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
enhanced = clahe.apply(medical_image)
#锐化滤波
kernel_sharpen = np.array([[1, 1, 1],
[1, 9, 1],
[1, 1, 1]])
sharpened = cv2.filter2D(enhanced, 1, kernel_sharpen)
#显示结果
cv2.imshow('Original Medical Image', medical_image)
cv2.imshow('CLAHE Enhanced', enhanced)
cv2.imshow('Sharpened', sharpened)
cv2.waitKey(0)
cv2.destroyAllWindows()
8.3 夜间图像增强
#python
python
import cv2
import numpy as np
#读取夜间图像(通常较暗)
night_image = cv2.imread('night_scene.jpg')
#转换为LAB颜色空间
lab = cv2.cvtColor(night_image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
#对L通道应用CLAHE
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))
l_enhanced = clahe.apply(l)
#增加亮度
l_brightened = cv2.add(l_enhanced, 30)
#合并通道
enhanced_lab = cv2.merge([l_brightened, a, b])
enhanced = cv2.cvtColor(enhanced_lab, cv2.COLOR_LAB2BGR)
#显示结果
cv2.imshow('Original Night Scene', night_image)
cv2.imshow('Enhanced Night Scene', enhanced)
cv2.waitKey(0)
cv2.destroyAllWindows()
九、总结
9.1 核心要点
- 直方图计算:使用calcHist函数计算图像直方图
支持灰度和彩色图像
可以计算多个通道的直方图
支持掩码操作
- 直方图均衡化:使用equalizeHist函数
自动提高图像对比度
适合低对比度图像
但可能过度增强噪声
- CLAHE:改进的直方图均衡化
在局部区域进行均衡化
限制对比度增强程度
避免块效应
- Gamma校正:使用LUT进行非线性变换
调整图像亮度分布
使图像在不同设备上显示一致
Gamma值根据需求调整
- 对比度与亮度调整:使用convertScaleAbs函数
线性调整对比度和亮度
简单快速
适合快速预览
9.2 最佳实践
预处理阶段:在特征提取、目标检测前进行直方图处理
方法选择:根据图像类型选择合适的增强方法
低对比度:直方图均衡化或CLAHE
医学图像:CLAHE
夜间图像:CLAHE + 亮度调整
参数调优:根据具体图像调整CLAHE和Gamma参数
组合使用:可以组合多种方法达到最佳效果