最近学习白平衡,看了一些方法,把学习过程中的算法记录下来,后续继续学习。
灰度世界、完美反射,动态阈值算法等图像算法,但都没有找到适合所有偏色类型的算法。总结:这些单纯的图像识别算法不太好,还是多看用ML模型做的算法吧。
完美世界反射,灰度世界假设
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('111.png')
b, g, r = cv2.split(img)
cv2.imshow('原图', img)
# detection(img)
m, n, t = img.shape
print(b.shape)
sum = np.zeros(b.shape)
for i in range(m):
for j in range(n):
sum[i][j] = int(b[i][j]) + int(g[i][j]) + int(r[i][j])
hists, bins = np.histogram(sum.flatten(), 766, [0, 766])
Y = 765
num, key = 0, 0
while Y >= 0:
num += hists[Y]
if num > m * n * 0.01 / 100:
key = Y
break
Y = Y - 1
sum_b, sum_g, sum_r = 0, 0, 0
time = 0
for i in range(m):
for j in range(n):
if sum[i][j] >= Y:
sum_b += b[i][j]
sum_g += g[i][j]
sum_r += r[i][j]
time = time + 1
avg_b = sum_b / time
avg_g = sum_g / time
avg_r = sum_r / time
for i in range(m):
for j in range(n):
b[i][j] = b[i][j] * 255 / avg_b
g[i][j] = g[i][j] * 255 / avg_g
r[i][j] = r[i][j] * 255 / avg_r
if b[i][j] > 255:
b[i][j] = 255
if b[i][j] < 0:
b[i][j] = 0
if g[i][j] > 255:
g[i][j] = 255
if g[i][j] < 0:
g[i][j] = 0
if r[i][j] > 255:
r[i][j] = 255
if r[i][j] < 0:
r[i][j] = 0
img_0 = cv2.merge([b, g, r])
cv2.imshow('修图', img_0)
"""
注释的内容为灰度世界假设算法
"""
# for i in range(m):
# for j in range(n):
# if(sum[i][j])
# sum