两张影像直方图匹配python
时间: 2023-07-04 17:25:47 浏览: 319
数字图像处理——python直方图均衡,直方图匹配(规定)
在 Python 中,可以使用 NumPy 和 OpenCV 库来实现两张影像的直方图匹配。以下是一个简单的示例代码,用于将一幅图像的直方图匹配到另一幅图像的直方图:
```python
import cv2
import numpy as np
# 读取两幅图像
img1 = cv2.imread('img1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('img2.jpg', cv2.IMREAD_GRAYSCALE)
# 计算两幅图像的直方图
hist1, bins1 = np.histogram(img1.flatten(), 256, [0, 256])
hist2, bins2 = np.histogram(img2.flatten(), 256, [0, 256])
# 计算累积分布函数
cdf1 = hist1.cumsum()
cdf2 = hist2.cumsum()
# 归一化累积分布函数
cdf1_normalized = cdf1 * hist1.max() / cdf1.max()
cdf2_normalized = cdf2 * hist2.max() / cdf2.max()
# 创建一个查找表
lut = np.interp(cdf1_normalized, cdf2_normalized, np.arange(256))
# 将图像进行直方图匹配
img_matched = cv2.LUT(img1, lut)
# 显示原图和匹配后的图像
cv2.imshow('Image 1', img1)
cv2.imshow('Image 2', img2)
cv2.imshow('Matched Image', img_matched)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取了两幅图像,并计算了它们的直方图。然后,我们计算了累积分布函数,并将它们归一化。接下来,我们使用 `np.interp()` 函数创建了一个查找表,用于将图像1的像素值映射到图像2的像素值。最后,我们使用 `cv2.LUT()` 函数将图像1进行直方图匹配,并显示原图和匹配后的图像。
阅读全文