我需要最小化附图中的等式。
给定函数p = f(q)。 p是1到254之间的整数,而q是254个实数的集合。 f是一个单调函数,它将成员从集合q映射到集合p。 n是图像中的像素数,而a,b和c是指三个不同的图像。现在我需要找到f的倒数,或者简单地找到q中的244个实数(因为f只是整数的函数),其中q [i] = f_inverse(p [i])(假设p从1到1排列) 254依次)。
我的方法是将p写为nx3数组,其中第n行包含三个元素pa(n),pa(n),pb(n)。可以从每个包含n个像素的三个图像容易地构造该阵列。然后我有以下代码:
def g(q,p):
n = p.shape[0]
value = 0
for i in range(n):
value = value + (q[p[i,0]+q[p[i,1]-q[p[i,2]])**2
return value
guess = np.arange(0,256)/255.0
q = spo.minimize(g,guess,args=p)
然后我尝试最小化函数g以尝试获得向量q。然而,它说操作数不能与形状(1,254)(87500,3)'一起广播。这些是q(未知要解决)和p(87500是像素数)的形状。这是为什么?
此外,即使它有效,它似乎是一个非常慢的方法,因为我试图优化一个函数用244 untry来获得一个由254个未知数同时组成的解决方案。我试图解决的等式实际上来自一篇研究论文,并且该论文提到将等式重写为Aq = 0,然后使用奇异值分解来获得解。我不知道整个段落意味着什么,所以我想知道是否有任何方法可以将问题重写为可以更容易和更有效地处理的问题。