对灰度图像 pollen 根据目标图像 lena 进行直方图规定化,以 2 行 3 列的形式 显示:(1)第一行依次为 pollen、lena 和规定化的结果图像;(2)第二行依 次为各个图像所对应的灰度直方图(提示:.cumsum()计算直方图的累积分布 函数 CDF)
时间: 2024-09-19 16:16:33 浏览: 36
实验四 图像增强-直方图变换.docx
在Python中,我们可以使用OpenCV库来处理这种图像操作。首先,我们需要加载`pollen`和`lena`图像,并将其转换为灰度。然后,我们会对`pollen`图像进行直方图规定化,使其像素值分布在`lena`图像的直方图范围内。最后,我们将所有图像和它们的直方图以指定的格式显示出来。
以下是步骤的简要代码示例:
```python
import cv2
import numpy as np
# 加载图像
pollen = cv2.imread('pollen.jpg', cv2.IMREAD_GRAYSCALE)
lena = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# 直方图规定化
hist_lena = cv2.calcHist([lena], [0], None, [256], [0, 256])
cv2.normalize(hist_lena, hist_lena, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)
# 规定化 pollen 图像
规化_pollen = cv2.normalize(pollen, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=pollen.dtype)
# 拼接成 2x3 的矩阵
combined_image = np.concatenate((pollen.reshape(1, -1), lena.reshape(1, -1),规化_pollen.reshape(1, -1)), axis=0)
histograms = np.concatenate((hist_lena.reshape(1, -1), hist_lena.reshape(1, -1), hist_lena.reshape(1, -1)), axis=0)
# 显示图像和直方图
cv2.imshow("Pollen", combined_image)
cv2.imshow("Histograms", histograms)
cv2.waitKey(0) # 等待用户按键
# 计算并显示累积分布函数 (CDF)
cdf_pollen = pollen.cumsum()
cdf_lena = lena.cumsum()
# 将 CDF 展示在同一行
cdf_combined = np.concatenate((cdf_pollen.reshape(1, -1), cdf_lena.reshape(1, -1), cdf_lena.reshape(1, -1)), axis=0)
cv2.imshow("Cumulative Distribution Function", cdf_combined)
cv2.waitKey(0) # 等待用户按键
# 关闭窗口
cv2.destroyAllWindows()
```
注意:这段代码假设 `pollen.jpg` 和 `lena.jpg` 存在于你的工作目录下。如果你的图片文件名不同,请相应地替换。运行以上代码时,请确保安装了OpenCV库。如果没有安装,可以使用以下命令安装:
```bash
pip install opencv-python
```
阅读全文