[英]scipy.optimize - max number of function calls exceeded?
我有下面的图像img_roi
(有关数据,请参见帖子结尾)。 “不太亮”的像素值分为两类:红色和蓝色通道,即
red = img_roi[1::2, ::2]
blue = img_roi[::2, 1::2]
我发布了一个一维切片图以更好地可视化数据。
红色和蓝色像素分别与亮像素(绿色通道)相差一个恒定的比例因子。 我想找到红色和蓝色通道的比例因子,并为此使用优化程序。 我希望如果我找到正确的缩放比例,我的信号是平滑的而不是锯齿状的。 例如,当我通过反复试验设置它时(即我设置img[::2, 1::2] = img[::2, 1:.2] * 5
)我得到了这张照片
为了精确找到比例因子,我定义了一个get_smoothness
函数来估计我的信号有多平滑,然后应用优化器。
我的代码是:
def get_smoothness(params, signal):
"""Computes the smoothness by calculating the difference between each entry."""
# Initialize smoothing factors
sr, sb = params
print(sb, sr)
# Scale the sub-channels
signal[1::2, ::2] = signal[1::2, ::2] * sr # red
signal[::2, 1::2] = signal[by::2, bx::2] * sb # blue
return np.sum(np.abs(np.diff(signal, axis=0))) + np.sum(np.abs(np.diff(signal, axis=1)))
# Initialize the scale factor
sb, sr = 7., 6. # these values I found by trying out different scale factors
# Minimize the smoothness function
res = optimize.minimize(get_smoothness, [sr, sb], method='Nelder-Mead', args=(img,))
# I get an error message
error = res.message
print(error)
执行此脚本时,我收到错误消息“已超出最大迭代次数”。 在每一步打印参数时,我也看到它们没有收敛。
我的问题是:
数据:
[[-5.00000000e-01 3.30000000e+00 -1.00000000e+00 3.30000000e+00
-3.00000000e-01 3.00000000e+00 7.00000000e-01 2.40000000e+00
-4.00000000e-01 3.00000000e-01 3.80000000e+00 1.50000000e+00
-1.00000000e-01 1.00000000e-01 8.00000000e-01 -1.20000000e+00
2.70000000e+00 1.50000000e+00 2.30000000e+00 1.60000000e+00
1.40000000e+00 -6.00000000e-01 6.10000000e+00 5.00000000e-01
8.80000000e+00 7.10542736e-15 1.50000000e+01 3.40000000e+00
2.09000000e+01 2.00000000e+00]
[ 6.00000000e-01 2.40000000e+00 2.00000000e+00 -5.00000000e-01
2.90000000e+00 9.00000000e-01 1.40000000e+00 -7.00000000e-01
3.60000000e+00 3.60000000e+00 -3.00000000e-01 1.10000000e+00
1.90000000e+00 5.00000000e-01 3.20000000e+00 2.00000000e-01
1.10000000e+00 1.10000000e+00 1.00000000e-01 3.80000000e+00
-1.90000000e+00 2.00000000e+00 7.00000000e-01 6.90000000e+00
2.00000000e+00 1.13000000e+01 1.40000000e+00 2.19000000e+01
-1.00000000e-01 2.57000000e+01]
[ 4.20000000e+00 2.00000000e+00 1.20000000e+00 1.50000000e+00
4.60000000e+00 3.00000000e+00 4.90000000e+00 4.00000000e-01
5.70000000e+00 1.90000000e+00 1.00000000e-01 1.00000000e+00
-1.00000000e-01 1.00000000e-01 5.00000000e+00 5.00000000e-01
1.00000000e+01 1.50000000e+00 1.04000000e+01 6.00000000e-01
7.90000000e+00 -2.00000000e-01 5.00000000e+00 1.90000000e+00
1.46000000e+01 4.20000000e+00 2.15000000e+01 6.40000000e+00
2.54000000e+01 7.70000000e+00]
[ 6.00000000e-01 -6.00000000e-01 1.00000000e+00 1.80000000e+00
2.50000000e+00 3.70000000e+00 1.70000000e+00 5.90000000e+00
2.30000000e+00 3.50000000e+00 0.00000000e+00 1.50000000e+00
-4.00000000e-01 8.30000000e+00 1.40000000e+00 2.02000000e+01
4.60000000e+00 2.73000000e+01 4.40000000e+00 2.70000000e+01
1.70000000e+00 2.07000000e+01 8.00000000e-01 2.28000000e+01
-2.00000000e-01 2.61000000e+01 1.10000000e+00 2.70000000e+01
6.20000000e+00 3.91000000e+01]
[-5.00000000e-01 1.50000000e+00 5.20000000e+00 1.80000000e+00
3.30000000e+00 1.00000000e-01 5.40000000e+00 2.80000000e+00
4.40000000e+00 5.00000000e-01 6.00000000e-01 2.40000000e+00
1.02000000e+01 5.30000000e+00 3.92000000e+01 1.09000000e+01
6.72000000e+01 1.47000000e+01 6.33000000e+01 9.10000000e+00
5.05000000e+01 4.10000000e+00 4.24000000e+01 5.10000000e+00
3.71000000e+01 4.80000000e+00 3.40000000e+01 6.60000000e+00
4.12000000e+01 7.60000000e+00]
[ 3.50000000e+00 2.80000000e+00 3.40000000e+00 4.50000000e+00
2.50000000e+00 2.70000000e+00 1.60000000e+00 4.70000000e+00
4.00000000e-01 3.00000000e-01 3.20000000e+00 1.26000000e+01
6.90000000e+00 4.41000000e+01 1.38000000e+01 9.64000000e+01
1.64000000e+01 1.24500000e+02 1.75000000e+01 1.17100000e+02
1.53000000e+01 8.29000000e+01 1.10000000e+01 6.71000000e+01
8.60000000e+00 5.41000000e+01 8.80000000e+00 5.20000000e+01
1.16000000e+01 4.07000000e+01]
[ 1.40000000e+00 2.50000000e+00 4.40000000e+00 2.30000000e+00
4.60000000e+00 7.00000000e-01 1.60000000e+00 1.00000000e+00
5.20000000e+00 2.00000000e+00 7.90000000e+00 5.50000000e+00
5.92000000e+01 2.25000000e+01 1.38600000e+02 3.41000000e+01
2.13700000e+02 3.07000000e+01 2.13900000e+02 3.44000000e+01
1.82800000e+02 2.57000000e+01 1.37600000e+02 1.65000000e+01
1.04800000e+02 1.23000000e+01 8.13000000e+01 1.49000000e+01
5.54000000e+01 9.60000000e+00]
[ 1.90000000e+00 1.10000000e+00 1.00000000e-01 5.00000000e+00
1.10000000e+00 4.00000000e+00 -5.00000000e-01 7.00000000e-01
2.30000000e+00 1.40000000e+01 6.40000000e+00 5.48000000e+01
1.54000000e+01 1.39800000e+02 3.85000000e+01 2.71800000e+02
4.12000000e+01 3.42400000e+02 4.16000000e+01 2.99400000e+02
3.68000000e+01 2.34900000e+02 3.08000000e+01 1.77500000e+02
1.47000000e+01 1.20500000e+02 1.40000000e+01 7.27000000e+01
1.11000000e+01 5.23000000e+01]
[ 1.00000000e-01 9.00000000e-01 3.60000000e+00 2.90000000e+00
-4.00000000e-01 -1.80000000e+00 1.70000000e+00 -5.00000000e-01
8.50000000e+00 8.30000000e+00 4.18000000e+01 1.73000000e+01
1.53800000e+02 5.03000000e+01 3.03900000e+02 6.67000000e+01
4.23400000e+02 8.58000000e+01 4.43600000e+02 6.97000000e+01
3.97000000e+02 5.33000000e+01 2.88500000e+02 3.21000000e+01
2.02200000e+02 2.37000000e+01 1.19400000e+02 1.63000000e+01
7.27000000e+01 1.17000000e+01]
[ 1.10000000e+00 2.40000000e+00 2.10000000e+00 3.00000000e-01
1.50000000e+00 -1.00000000e+00 4.00000000e-01 5.30000000e+00
-5.00000000e-01 3.18000000e+01 7.90000000e+00 1.24100000e+02
3.59000000e+01 3.06700000e+02 5.68000000e+01 4.68700000e+02
8.91000000e+01 5.78000000e+02 8.69000000e+01 5.24900000e+02
6.29000000e+01 4.28600000e+02 4.85000000e+01 3.05200000e+02
2.89000000e+01 1.85700000e+02 2.29000000e+01 1.09200000e+02
1.01000000e+01 5.19000000e+01]
[-5.00000000e-01 5.00000000e-01 5.00000000e-01 2.20000000e+00
1.10000000e+00 1.60000000e+00 1.80000000e+00 2.50000000e+00
1.87000000e+01 1.26000000e+01 9.53000000e+01 4.23000000e+01
2.68600000e+02 7.85000000e+01 4.74300000e+02 1.09000000e+02
6.64200000e+02 1.01700000e+02 6.52500000e+02 1.04900000e+02
5.58000000e+02 7.56000000e+01 3.99400000e+02 5.02000000e+01
2.77700000e+02 3.97000000e+01 1.47100000e+02 1.46000000e+01
7.35000000e+01 7.10000000e+00]
[-8.00000000e-01 2.60000000e+00 1.70000000e+00 6.00000000e-01
8.00000000e-01 1.00000000e+00 7.00000000e-01 1.23000000e+01
9.50000000e+00 6.22000000e+01 2.40000000e+01 2.01700000e+02
4.99000000e+01 4.31000000e+02 7.55000000e+01 6.35500000e+02
1.04200000e+02 7.29300000e+02 1.01500000e+02 6.98000000e+02
7.20000000e+01 5.08600000e+02 5.74000000e+01 3.35300000e+02
3.17000000e+01 2.20800000e+02 1.65000000e+01 1.06700000e+02
1.02000000e+01 4.62000000e+01]
[ 1.00000000e-01 -4.90000000e+00 -9.00000000e-01 0.00000000e+00
-2.00000000e-01 1.60000000e+00 5.60000000e+00 6.40000000e+00
2.85000000e+01 1.33000000e+01 1.25000000e+02 4.76000000e+01
3.08400000e+02 8.61000000e+01 5.79400000e+02 1.13200000e+02
6.81500000e+02 1.18700000e+02 7.32000000e+02 1.17300000e+02
6.09500000e+02 8.63000000e+01 4.16200000e+02 6.04000000e+01
2.69800000e+02 3.46000000e+01 1.41500000e+02 1.52000000e+01
5.70000000e+01 4.80000000e+00]
[-3.80000000e+00 2.30000000e+00 2.70000000e+00 -3.70000000e+00
2.50000000e+00 -6.00000000e-01 -1.00000000e-01 1.88000000e+01
4.40000000e+00 7.77000000e+01 1.97000000e+01 2.10200000e+02
5.43000000e+01 4.37400000e+02 8.75000000e+01 6.33400000e+02
9.63000000e+01 6.92000000e+02 9.69000000e+01 6.28000000e+02
8.00000000e+01 4.70500000e+02 5.16000000e+01 3.16400000e+02
3.31000000e+01 1.80600000e+02 1.72000000e+01 7.85000000e+01
3.80000000e+00 2.70000000e+01]
[ 1.60000000e+00 1.00000000e-01 -4.00000000e-01 2.90000000e+00
-4.30000000e+00 5.00000000e-01 5.60000000e+00 5.50000000e+00
3.28000000e+01 1.67000000e+01 1.08100000e+02 3.63000000e+01
2.68600000e+02 8.25000000e+01 4.68400000e+02 1.07000000e+02
5.85000000e+02 1.11700000e+02 5.92900000e+02 9.43000000e+01
4.88700000e+02 6.41000000e+01 3.26300000e+02 4.69000000e+01
1.94800000e+02 2.97000000e+01 9.11000000e+01 1.26000000e+01
3.93000000e+01 1.20000000e+00]
[-3.00000000e-01 2.20000000e+00 3.60000000e+00 6.00000000e-01
-3.00000000e-01 -8.00000000e-01 2.50000000e+00 1.49000000e+01
5.70000000e+00 5.15000000e+01 1.77000000e+01 1.58300000e+02
3.32000000e+01 3.16500000e+02 6.38000000e+01 4.53900000e+02
6.89000000e+01 4.96100000e+02 6.76000000e+01 4.45400000e+02
5.66000000e+01 3.22900000e+02 4.32000000e+01 2.04700000e+02
2.22000000e+01 1.07700000e+02 1.09000000e+01 3.38000000e+01
3.30000000e+00 8.60000000e+00]
[-9.00000000e-01 3.00000000e-01 2.30000000e+00 1.40000000e+00
6.00000000e-01 6.00000000e-01 1.60000000e+00 3.10000000e+00
1.69000000e+01 9.90000000e+00 7.41000000e+01 2.13000000e+01
1.63200000e+02 4.27000000e+01 2.98400000e+02 6.41000000e+01
3.71100000e+02 6.25000000e+01 3.60100000e+02 6.13000000e+01
2.97700000e+02 4.47000000e+01 1.80000000e+02 2.68000000e+01
9.75000000e+01 1.40000000e+01 3.58000000e+01 6.10000000e+00
7.70000000e+00 2.90000000e+00]
[-7.00000000e-01 2.00000000e-01 2.40000000e+00 2.00000000e-01
3.00000000e+00 1.00000000e+00 -1.00000000e-01 6.80000000e+00
3.40000000e+00 2.39000000e+01 8.00000000e+00 7.16000000e+01
1.63000000e+01 1.59200000e+02 3.44000000e+01 2.44100000e+02
4.01000000e+01 2.68600000e+02 3.68000000e+01 2.42400000e+02
2.87000000e+01 1.60500000e+02 1.52000000e+01 9.23000000e+01
8.20000000e+00 4.19000000e+01 2.80000000e+00 9.40000000e+00
4.20000000e+00 2.30000000e+00]
[ 8.00000000e-01 4.00000000e-01 3.00000000e-01 7.00000000e-01
4.20000000e+00 2.50000000e+00 2.90000000e+00 2.50000000e+00
5.40000000e+00 5.50000000e+00 2.79000000e+01 7.70000000e+00
6.74000000e+01 2.01000000e+01 1.16700000e+02 3.11000000e+01
1.50900000e+02 3.15000000e+01 1.58200000e+02 2.56000000e+01
1.14200000e+02 1.36000000e+01 6.17000000e+01 1.01000000e+01
2.79000000e+01 1.50000000e+00 8.40000000e+00 2.00000000e+00
-1.10000000e+00 2.30000000e+00]
[ 3.80000000e+00 3.50000000e+00 -1.20000000e+00 6.00000000e+00
2.10000000e+00 9.30000000e+00 -2.00000000e-01 7.40000000e+00
2.20000000e+00 8.40000000e+00 2.90000000e+00 2.07000000e+01
8.30000000e+00 4.59000000e+01 1.05000000e+01 7.22000000e+01
1.91000000e+01 8.59000000e+01 9.90000000e+00 7.10000000e+01
5.20000000e+00 4.86000000e+01 6.10000000e+00 1.59000000e+01
7.10000000e+00 5.90000000e+00 1.60000000e+00 2.00000000e-01
2.70000000e+00 1.20000000e+00]
[ 2.10000000e+00 9.00000000e-01 4.70000000e+00 5.00000000e-01
9.00000000e+00 1.30000000e+00 5.40000000e+00 3.10000000e+00
4.90000000e+00 2.60000000e+00 8.50000000e+00 3.10000000e+00
7.80000000e+00 3.70000000e+00 2.48000000e+01 7.40000000e+00
3.46000000e+01 6.30000000e+00 3.20000000e+01 6.00000000e+00
1.91000000e+01 6.00000000e+00 1.29000000e+01 1.70000000e+00
2.00000000e+00 2.00000000e-01 5.00000000e-01 -3.00000000e-01
2.10000000e+00 -8.00000000e-01]
[ 7.00000000e-01 3.80000000e+00 3.50000000e+00 5.30000000e+00
1.80000000e+00 4.20000000e+00 1.90000000e+00 6.80000000e+00
4.30000000e+00 1.09000000e+01 2.50000000e+00 -3.00000000e-01
3.30000000e+00 5.80000000e+00 3.10000000e+00 8.00000000e+00
2.50000000e+00 1.01000000e+01 1.40000000e+00 7.30000000e+00
2.60000000e+00 5.70000000e+00 8.00000000e-01 3.00000000e-01
5.00000000e-01 1.10000000e+00 2.50000000e+00 7.10542736e-15
-1.00000000e-01 -1.00000000e-01]
[-4.00000000e-01 9.00000000e-01 5.70000000e+00 2.00000000e+00
5.90000000e+00 3.00000000e-01 1.04000000e+01 2.20000000e+00
1.40000000e+01 1.60000000e+00 1.25000000e+01 1.00000000e-01
4.20000000e+00 -2.00000000e-01 9.00000000e-01 -3.00000000e-01
7.00000000e-01 1.70000000e+00 2.80000000e+00 1.10000000e+00
1.80000000e+00 -1.40000000e+00 4.00000000e-01 4.00000000e-01
1.70000000e+00 3.00000000e-01 2.00000000e-01 2.40000000e+00
1.80000000e+00 3.00000000e+00]
[ 4.00000000e-01 -1.20000000e+00 1.80000000e+00 6.40000000e+00
-1.50000000e+00 8.00000000e+00 2.70000000e+00 1.29000000e+01
1.80000000e+00 1.54000000e+01 2.50000000e+00 8.60000000e+00
2.30000000e+00 5.50000000e+00 4.00000000e-01 4.30000000e+00
8.00000000e-01 -4.00000000e-01 1.90000000e+00 5.00000000e-01
-3.00000000e-01 8.00000000e-01 1.00000000e+00 3.00000000e-01
2.50000000e+00 1.10000000e+00 1.60000000e+00 4.20000000e+00
5.00000000e-01 4.90000000e+00]
[-2.00000000e-01 4.00000000e-01 1.60000000e+00 2.70000000e+00
4.80000000e+00 1.80000000e+00 9.20000000e+00 3.70000000e+00
1.26000000e+01 5.00000000e-01 1.51000000e+01 1.70000000e+00
9.20000000e+00 1.10000000e+00 9.20000000e+00 8.00000000e-01
5.30000000e+00 5.00000000e-01 5.30000000e+00 -4.00000000e-01
5.20000000e+00 1.30000000e+00 4.10000000e+00 2.70000000e+00
1.30000000e+00 0.00000000e+00 1.90000000e+00 2.30000000e+00
5.50000000e+00 2.00000000e+00]
[-1.00000000e+00 1.30000000e+00 2.00000000e+00 2.80000000e+00
-1.60000000e+00 5.00000000e+00 7.00000000e-01 7.30000000e+00
1.90000000e+00 1.54000000e+01 1.60000000e+00 1.21000000e+01
2.20000000e+00 9.40000000e+00 1.10000000e+00 9.20000000e+00
3.00000000e-01 1.01000000e+01 1.90000000e+00 8.20000000e+00
1.20000000e+00 3.20000000e+00 3.30000000e+00 9.70000000e+00
7.00000000e-01 5.50000000e+00 2.40000000e+00 3.90000000e+00
3.30000000e+00 4.80000000e+00]
[-1.60000000e+00 3.80000000e+00 5.00000000e-01 3.40000000e+00
-7.00000000e-01 1.20000000e+00 4.60000000e+00 3.30000000e+00
4.60000000e+00 4.50000000e+00 1.26000000e+01 0.00000000e+00
9.90000000e+00 8.00000000e-01 7.80000000e+00 4.40000000e+00
7.80000000e+00 2.60000000e+00 1.05000000e+01 8.00000000e-01
8.50000000e+00 2.60000000e+00 4.80000000e+00 1.70000000e+00
5.30000000e+00 5.00000000e-01 4.90000000e+00 1.20000000e+00
7.40000000e+00 3.30000000e+00]
[-9.00000000e-01 9.00000000e-01 4.00000000e-01 -1.10000000e+00
1.10000000e+00 4.00000000e-01 7.10542736e-15 -5.00000000e-01
3.30000000e+00 7.70000000e+00 1.50000000e+00 8.00000000e+00
1.10000000e+00 1.01000000e+01 0.00000000e+00 8.90000000e+00
1.50000000e+00 8.10000000e+00 2.40000000e+00 9.40000000e+00
0.00000000e+00 5.50000000e+00 8.00000000e-01 4.40000000e+00
2.20000000e+00 9.40000000e+00 3.00000000e-01 6.00000000e+00
5.00000000e-01 1.50000000e+00]
[-3.00000000e-01 2.90000000e+00 3.10000000e+00 1.60000000e+00
9.00000000e-01 -3.10000000e+00 0.00000000e+00 1.60000000e+00
1.00000000e-01 1.90000000e+00 5.40000000e+00 1.70000000e+00
6.20000000e+00 1.80000000e+00 6.10000000e+00 3.50000000e+00
6.00000000e+00 2.90000000e+00 9.10000000e+00 1.10000000e+00
4.30000000e+00 3.00000000e-01 4.70000000e+00 1.90000000e+00
5.30000000e+00 3.50000000e+00 6.10000000e+00 1.90000000e+00
3.50000000e+00 2.00000000e+00]
[ 1.90000000e+00 -1.00000000e+00 1.00000000e-01 -1.00000000e+00
2.10000000e+00 2.10000000e+00 -3.10000000e+00 4.00000000e-01
2.00000000e-01 3.50000000e+00 3.20000000e+00 -3.00000000e-01
2.20000000e+00 -8.00000000e-01 -9.00000000e-01 4.00000000e+00
1.00000000e+00 5.70000000e+00 2.30000000e+00 5.20000000e+00
2.00000000e-01 4.80000000e+00 2.80000000e+00 5.40000000e+00
1.90000000e+00 1.00000000e+00 -3.10000000e+00 4.00000000e-01
3.80000000e+00 4.10000000e+00]]
# Do Bayer captures
rpi.capture_bayer_sequence(num_shots=5, extract_rgb_channels=extrac
我发现了错误。 问题是我在每次调用时都修改了数组,这导致了溢出错误。
解决办法是
img_to_optimize = np.copy(img)
def get_smoothness(params, signal, rx, ry, bx, by, signal_orig):
"""Computes the smoothness by calculating the difference between each entry."""
sr, sb = params
# print(sr, sb)
# Scale the arrays by the initial guess
signal[ry::2, rx::2] = signal_orig[ry::2, rx::2] * sr
signal[by::2, bx::2] = signal_orig[by::2, bx::2] * sb
res = np.sum(np.abs(np.diff(signal, axis=0))) + np.sum(np.abs(np.diff(signal, axis=1)))
return res
# Initialize the scale factor
sb, sr = 7., 6.
# Minimize the smoothness function
res = optimize.minimize(get_smoothness, [sr, sb], method='Nelder-Mead', args=(img_to_optimize, rx, ry, bx, by, img))
# The optimal scale factor is stored in the x field of the result
if res.success:
print(res.x)
else:
print(res.message)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.