|
将图像O中的最小灰度级记为Omin,最大灰度级记为Omax,假如输出的图像P的灰度级范围为[Pmin,Pmax],
则O 与 P的关系为:
O(r,c)=((Pmax−Pmin)/(Omax−Omin))*(O(r,c)−Omin)+Pmin
其中P(r,c)就代表P的第r行第c列的灰度值。这个过程就是直方图的正规化。
我们一般令P的范围是[0,255],所以直方图的正规化是在求a,b变换的值的方法,我们可以得到:
a=(Pmax−Pmin)/(Omax−Omin),b=Pmin−(Pmax−Pmin)/(Omax−Omin)*Omin
下面我们使用OpenCV来实现上面的理论:
import cv2
import numpy as np
import sys
img = cv2.imread("D://python/p1.jpg",cv2.IMREAD_GRAYSCALE)
Maximg = np.max(img)
Minimg = np.min(img)
Omin,Omax = 0,255#
a = float(Omax - Omin)/(Maximg - Minimg)
b = Omin - a*Minimg
O = a*img + b
O = O.astype(np.uint8)
cv2.imshow('img',img)
cv2.imshow('enhance',O)
cv2.waitKey(0)
cv2.destroyAllWindows()
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|