1、灰度直方图
import cv2
import math
import numpy as np
import matplotlib.pyplot as plt
def calcGrayHist(image):
rows,cols=image.shape
grayHist=np.zeros([256],np.uint64)
for r in range(rows):
for c in range(cols):
grayHist[image[r][c]]+=1
return grayHist
image=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
grayHist=calcGrayHist(image)
x_range=range(256)
plt.plot(x_range,grayHist,'r',linewidth=2,c='black')
y_maxValue=np.max(grayHist)
plt.axis([0,255,0,y_maxValue])
plt.xlabel('gray Level')
plt.ylabel('number of pixels')
plt.show()
还有一个是用hist函数来实现的
import cv2
import numpy as np
import matplotlib.pyplot as plt
image=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
rows,cols=image.shape
pixelSequence=image.reshape([rows*cols])
numberBins=256
histogram,bins,patch=plt.hist(pixelSequence,numberBins,facecolor='black',histtype='bar')
plt.xlabel(u'gray Level')
plt.ylabel(u'number of pixels')
y_maxValue=np.max(histogram)
plt.axis([0,255,0,y_maxValue])
plt.show()
2、线性变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
I=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
a=2
O=float(a)*I
O[O>255]=255
O=np.round(O)
O=O.astype(np.uint8)
cv2.imshow("I",I)
cv2.imshow("O",O)
cv2.waitKey(0)
cv2.destroyAllWindows()
3、直方图正则化:
import cv2
import numpy as np
import matplotlib.pyplot as plt
I=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
Imax=np.max(I)
Imin=np.min(I)
Omin,Omax=0,255
a=float((Omax-Omin)/(Imax-Imin))
b=Omin-a*Imin
O=a*I+b
O=O.astype(np.uint8)
cv2.imshow("I",I)
cv2.imshow("O",O)
cv2.waitKey(0)
cv2.destroyAllWindows()
4、伽马变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
I=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
fI=I/255.0
r=0.5
O=np.power(fI,r)
cv2.imshow("I",I)
cv2.imshow("O",O)
cv2.waitKey(0)
cv2.destroyAllWindows()
5、全局直方图均衡化
import cv2
import math
import numpy as np
import matplotlib.pyplot as plt
def calcGrayHist(image):
rows,cols=image.shape
grayHist=np.zeros([256],np.uint64)
for r in range(rows):
for c in range(cols):
grayHist[image[r][c]]+=1
return grayHist
def equalHist(image):
rows,cols=image.shape
grayHist=calcGrayHist(image)
zeroCumuMoment=np.zeros([256],np.uint32)
for p in range(256):
if p==0:
zeroCumuMoment[p]=grayHist[0]
else:
zeroCumuMoment[p]=zeroCumuMoment[p-1]+grayHist[p]
outPut_q=np.zeros([256],np.uint8)
cofficient=256.0/(rows*cols)
for p in range(256):
q=cofficient*float(zeroCumuMoment[p])-1
if q>=0:
outPut_q[p]=math.floor(q)
else:
outPut_q[p]=0
equalHistImage=np.zeros(image.shape,np.uint8)
for r in range(rows):
for c in range(cols):
equalHistImage[r][c]=outPut_q[image[r][c]]
return equalHistImage
src=cv2.imread("/home/xiaomingming/profile/xmm.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow("src",src)
dst=equalHist(src)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()