我正在尝试创建一个关于非线性回归的程序。我有三个参数 [R,G,B],我想获得图像上任何像素相对于我的参考颜色代码的温度。例如:
参考文件 R,G,B,温度 = [(157,158,19,300),(146,55,18,320),(136,57,22,340),(133,88,25,460),(141,105,27,500),(210,195, 3,580),(203,186,10,580),(214,195,4,600),(193,176,10,580)]
你可以在上面看到,所有的 RGB 值都是非线性变化的。现在,我使用“最小误差算法”来获得温度 wrt RGB 颜色代码,但我想获得参考文件中不存在的值(即如果我有 (155,200,40) 并且它不存在于参考文件中,我必须获得这三个代码等于哪个温度)。
以下是在给定 RGB 值的情况下选择最接近参考温度的代码:
from math import sqrt
referenceColoursRGB =[(157,158,19),
(146,55,18),
(136,57,22),
(133,88,25),
(141,105,27),
(203,186,10),
(214,195,4)]
referenceTemperatures = [
300,
320,
340,
460,
500,
580,
600]
def closest_color(rgb):
r, g, b = rgb
color_diffs = []
counter = 0
for color in referenceColoursRGB:
cr, cg, cb = color
color_diff = sqrt(abs(r - cr)**2 + abs(g - cg)**2 + abs(b - cb)**2)
color_diffs.append((color_diff, color))
minErrorIndex =color_diffs.index(min(color_diffs))
return minErrorIndex
temperatureLocation = closest_color((149, 60, 25))
print("Temperature : ", referenceTemperatures[temperatureLocation])
# => Temperature : 320
temperatureLocation = closest_color((220, 145, 4))
print("Temperature : ", referenceTemperatures[temperatureLocation])
# => Temperature : 580
我真的很想计算参考列表中没有出现的温度值,但是我在使用所有 RGB 值并从中计算/预测合理/准确的温度时遇到问题。
在使用 polyfit 之后,我尝试获取 1 个参数,但存在一些问题,因为每个变量对这个参数都有相同的影响。因此我无法意识到哪个颜色代码最高(即 "oneParameter = 1000 *R + 100 *G + 10 *B" ,在这种情况下,如果我有一个颜色代码为 (2,20,50) 的参数,另一个颜色代码是(2,5,200)。因此它们在“oneParameter”方程中是相等的)
我希望我能清楚地解释我的问题。我在等你的帮助!
谢谢你。