4. 幂律变换
代码:
import math
import numpy as np
import cv2
import imutils
#幂律变换 φ>1
# image = cv2.imread(‘E:/1.png’)
image = cv2.imread(‘E:/1.png’)
gamma_img1 = np.zeros((image.shape[0], image.shape[1], 3), dtype=np.float32)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
gamma_img1[i, j, 0] = math.pow(image[i, j, 0], 5)
gamma_img1[i, j, 1] = math.pow(image[i, j, 1], 5)
gamma_img1[i, j, 2] = math.pow(image[i, j, 2], 5)
cv2.normalize(gamma_img1, gamma_img1, 0, 255, cv2.NORM_MINMAX)
gamma_img1 = cv2.convertScaleAbs(gamma_img1)
cv2.imshow(‘image’, imutils.resize(image, 400))
cv2.imshow(‘gamma1 transform’, imutils.resize(gamma_img1, 400))
if cv2.waitKey(0) == 27:
cv2.destroyAllWindows()
#幂律变换,φ<1
image = cv2.imread(‘E:/1.png’)
image = cv2.imread(‘E:/city.png’)
gamma_img2 = np.zeros((image.shape[0], image.shape[1], 3), dtype=np.float32)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
gamma_img2[i, j, 0] = math.pow(image[i, j, 0], 0.4)
gamma_img2[i, j, 1] = math.pow(image[i, j, 1], 0.4)
gamma_img2[i, j, 2] = math.pow(image[i, j, 2], 0.4)
cv2.normalize(gamma_img2, gamma_img2, 0, 255, cv2.NORM_MINMAX)
gamma_img2 = cv2.convertScaleAbs(gamma_img2)
cv2.imshow(‘image’, imutils.resize(image, 400))
cv2.imshow(‘gamma2 transform’, imutils.resize(gamma_img2, 400))
if cv2.waitKey(0) == 27:
cv2.destroyAllWindows()
效果:
5. 阈值处理
代码:
import cv2
import imutils
import numpy as np
image = cv2.imread(‘E:/1.png’)
gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#阈值处理函数:当r1=r2, s1=0, s2=L-1时,此时分段线性函数便是阈值处理函数
plist = []
for i in range(gray_img.shape[0]):
for j in range(gray_img.shape[1]):
plist.append(gray_img[i, j])
r_avg = int(sum(plist)/len(plist))
thresh_img = np.zeros((gray_img.shape[0], gray_img.shape[1]), dty