写在前面
因为笔者数字图像处理的作业是要求用VB来做规定化的处理,笔者写出来后想看看python有什么库可以实现,毕竟像均衡化之类的操作都可以通过py的cv2库里的函数解决,但是在优快云上查询的时候发现大家都是用openCV或者matlab来做,python并没有相关的函数来进行规定化,唯一一个有规定化代码的但是是需要付钱的,于是笔者就用python写了一个可以做灰度图像直方匹配的代码。
(一)直方图匹配原理介绍
直方图规定化,也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,也就是在执行规定化操作时,首先要知道变换后的灰度直方图,这样才能确定变换函数。规定化操作能够有目的的增强某个灰度区间,相比于,均衡化操作,规定化多了一个输入,但是其变换后的结果也更灵活。
(二)直方图匹配的实现
直方图规定化的实现可以分为一下四步:
- 计算原图像的累积直方图
- 计算规定直方图的累积直方图
- 计算两累积直方图的差值的绝对值
- 根据累积直方图差值建立灰度级的映射
(三)编码实现
import cv2
import numpy as np
import matplotlib.pyplot as plt
img0=cv2.imread(r'C:\Users\58381\Desktop\lena.bmp')#读取原图片
scr=cv2.imread(r'C:\Users\58381\Desktop\circle.bmp')#读取目标图片
完成读取之后转图片为灰度图片,笔者目前只会做灰度图片的规定化
#把两张图片转成真正的灰度图片,因为自己只会做灰度图片的规定化
img0=cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY