自己编写代码完成灰度直方图统计以及灰度直方图均衡化,提交jupyterlab文件 打开一张图时可以调用函数,在求平均值时就可以统计,pld统计结果显示
时间: 2024-01-04 16:04:58 浏览: 72
好的,我可以帮你回答这个问题。
要实现灰度直方图统计和均衡化,可以按照以下步骤进行:
1. 读取图像并将其转换为灰度图像。
2. 统计灰度直方图,即计算每个像素值的出现次数。
3. 计算累积分布函数(CDF),即对灰度直方图进行累加,并将其归一化为[0,1]范围内的值。
4. 计算灰度直方图均衡化后的像素值,即将CDF乘以灰度级数(通常为256),并将其四舍五入为整数。
5. 将均衡化后的像素值替换原始图像中的像素值并显示。
下面是Python代码实现:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
def histogram_equalization(img):
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算灰度直方图
hist, bins = np.histogram(gray.flatten(), 256, [0, 256])
# 计算累积分布函数
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 计算均衡化后的像素值
equalized = np.round(cdf_normalized[gray] * 255 / cdf_normalized.max()).astype(np.uint8)
# 将均衡化后的像素值替换原始图像中的像素值
result = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
for i in range(result.shape[0]):
for j in range(result.shape[1]):
result[i,j,0] = equalized[i,j]
result[i,j,1] = equalized[i,j]
result[i,j,2] = equalized[i,j]
# 显示结果
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
axs[0].imshow(img)
axs[0].set_title('Original Image')
axs[1].imshow(result)
axs[1].set_title('Equalized Image')
plt.show()
return result
def histogram_statistics(img):
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算灰度直方图
hist, bins = np.histogram(gray.flatten(), 256, [0, 256])
# 绘制灰度直方图
plt.figure(figsize=(10, 5))
plt.hist(gray.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.show()
# 计算平均灰度值
mean_gray = np.mean(gray)
print('平均灰度值为:', mean_gray)
return hist, mean_gray
```
你可以将这段代码保存为一个Python脚本文件并在JupyterLab中调用。
在JupyterLab中打开一张图像并调用`histogram_equalization`函数和`histogram_statistics`函数即可实现灰度直方图均衡化和灰度直方图统计,并显示均衡化前后的图像和灰度直方图,以及平均灰度值。
阅读全文