3. 图像对直方图均衡化
任务说明
双目立体匹配的精度高度依赖左右图像在光照、曝光上的一致性。当图像整体偏暗、偏亮或对比度不足时,匹配代价计算容易产生歧义。本案例对双目图像对分别进行直方图均衡化,使左右视图的灰度分布更均匀、对比度增强,为后续立体匹配提供灰度分布更一致的输入。
实现方案
采用OpenCV的equalizeHist函数,对左右灰度图像分别做全局直方图均衡化。该函数将灰度直方图映射为近似均匀分布,从而拉伸动态范围、增强对比度。实现流程:读取双目图像→转为灰度→分别均衡化→拼接显示与保存结果。
代码实现
import cv2
import numpy as np
def load_stereo_pair(left_path, right_path):
"""读取双目图像对,返回灰度图"""
left = cv2.imread(left_path)
right = cv2.imread(right_path)
if left is None or right is None:
raise FileNotFoundError("无法读取图像,请检查路径")
# 若为彩色图则转为灰度
if len(left.shape) == 3:
left = cv2.cvtColor(left, cv2.COLOR_BGR2GRAY)
if len(right.shape) == 3:
right = cv2.cvtColor(right, cv2.COLOR_BGR2GRAY)
return left, right
def histogram_equalize_pair(left_gray, right_gray):
"""对双目灰度图分别做直方图均衡化"""
left_eq = cv2.equalizeHist(left_gray)
right_eq = cv2.equalizeHist(right_gray)
return left_eq, right_eq
def main():
# 输入双目图像路径(请替换为实际路径)
left_path = "left.png"
right_path = "right.png"
# 1. 读取并灰度化
left_gray, right_gray = load_stereo_pair(left_path, right_path)
# 2. 直方图均衡化
left_eq, right_eq = histogram_equalize_pair(left_gray, right_gray)
# 3. 拼接显示(左原图|左均衡|右原图|右均衡)
h, w = left_gray.shape
canvas = np.zeros((h, w * 4), dtype=np.uint8)
canvas[:, 0:w] = left_gray
canvas[:, w:2*w] = left_eq
canvas[:, 2*w:3*w] = right_gray
canvas[:, 3*w:4*w] = right_eq
cv2.imshow("Stereo Equalization (L|L_eq|R|R_eq)", canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 4. 保存均衡化结果
cv2.imwrite("left_eq.png", left_eq)
cv2.imwrite("right_eq.png", right_eq)
print("已保存 left_eq.png 和 right_eq.png")
if __name__ == "__main__":
main()
依赖与运行
依赖:Python 3、OpenCV(pip install opencv-python)、NumPy(OpenCV安装时自动附带)。
运行方式:将双目图像命名为left.png和right.png放在脚本同目录(或修改代码中的路径),执行python stereo_equalize.py。
验证方法
运行后观察弹出的拼接窗口:左侧两幅为左图均衡前后对比,右侧两幅为右图均衡前后对比。均衡后的图像应明显比原图对比度更高——暗部更暗、亮部更亮、整体灰度层次更丰富。同时程序会在当前目录生成left_eq.png和right_eq.png两个文件。
判定标准:
- 程序无报错正常退出,且两个输出文件成功生成;
- 均衡化后的图像灰度直方图比原图更平坦(可用
cv2.calcHist验证,灰度值分布范围明显展宽); - 左右图均衡化后整体亮度分布趋于一致,不存在一侧明显偏暗或偏亮的情况。
预期输出示例:对于一张整体偏暗、灰度集中在0~80的图像,均衡化后灰度将扩展到接近0~255的完整范围,图像中原本难以分辨的暗部纹理变得清晰可见。此结果由equalizeHist的累积分布函数映射直接决定,与给定输入唯一对应。