灰度直方图模拟生成水墨风格图片
获取水墨风格灰度分布直方图
- 在网络搜索若干水墨风格图片
- 绘制并观察灰度直方图特点
观察到:灰度级位小于240部分比较平缓、分布比较均匀;在灰度级大于240出激增,出现峰值。
- 将这四个水墨风格图像灰度直方图进行拟合
直方图规定化
- 待处理图片
- 计算累积分布函数(CDF)
1 | # 计算源图像的直方图和累积分布函数 |
创建映射表
对每个灰度级,找到源图像CDF和目标图像CDF之间差值最小的灰度级,构建映射表
1
2
3
4
5
6
7
8# 创建映射表
mapping = np.zeros(256, dtype=np.uint8)
for i in range(256):
diff = np.abs(source_cdf[i] - style_cdf)
mapping[i] = np.argmin(diff)
# 应用映射表进行直方图规定化
applyed_img = cv.LUT(source_img, mapping)使用映射表对源图像进行直方图规定化,得到处理后的图像 applyed_img
验证效果
原图片灰度分布直方图
预期实现的灰度分布图
实际处理后图片灰度分布直方图
源代码
1 | import matplotlib.pyplot as plt |