用python将100张无雾图像的Dark channel进行统计,形成像素直方图和每个暗通道的平均强度直方图形成代码
时间: 2023-03-21 21:03:01 浏览: 181
好的,我会尽力回答你的问题。
下面是Python代码,用于计算100张无雾图像的Dark Channel直方图和每个暗通道的平均强度直方图。
``` python
import cv2
import numpy as np
import matplotlib.pyplot as plt
def dark_channel(img, size):
"""计算暗通道图像"""
# 获取图像的高度和宽度
h, w = img.shape[:2]
# 计算每个像素的暗通道值
dark = np.zeros((h, w))
for i in range(h):
for j in range(w):
patch = img[i:i+size, j:j+size, :]
dark[i, j] = np.min(patch)
return dark
def get_histogram(img):
"""计算图像的像素直方图"""
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算像素直方图
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
return hist.flatten()
# 读取100张无雾图像,并计算每个图像的Dark Channel直方图和平均强度直方图
dc_hist = np.zeros((256,))
avg_hist = np.zeros((256,))
for i in range(1, 101):
# 读取图像
img = cv2.imread(f'image_{i}.jpg')
# 计算暗通道图像
dark = dark_channel(img, 15)
# 计算Dark Channel直方图
dc_hist += get_histogram(dark)
# 计算每个暗通道的平均强度
avg = np.mean(dark)
# 计算平均强度直方图
avg_hist[int(avg)] += 1
# 绘制Dark Channel直方图和平均强度直方图
plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.bar(range(256), dc_hist)
plt.title('Dark Channel Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Count')
plt.subplot(122)
plt.bar(range(256), avg_hist)
plt.title('Average Intensity Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Count')
plt.show()
```
这个代码首先定义了一个函数`dark_channel`,用于计算暗通道图像。然后,使用`get_histogram`函数计算了图像的像素直方图。接着,循环读取100张无雾图像,对每个图像计算暗通道图像和平均强度,最终计算Dark Channel直方图和平均强度直方图并绘制出来。
阅读全文