2017-11-28 6 views
1

제 질문은 어떻게 파이썬 솔버에 가중치가 적용된 최소 제곱 문제를 넣을 수 있습니까? 나는이 논문에서 접근법을 구현하려고 시도 중이다. here (PDF warning). 문제의 개요가 게시물 하단에 있습니다.scipy weighted least squares solver에 최소화 방정식 넣기 도움이 필요하십니까

구체적 I는 (용지 19) 다음 최소화 방정식 시작할 :

latex formula can be found here는 :

\frac{min}{\Theta \epsilon M} \sum_{j=1}^{n} \sum_{i=1}^{m}(w(i,j))\left | \Psi(i,j)*\Theta (i,j) - I(i,j) \right |^{2} 

는 가중 된 최소 제곱 문제로 표현된다.
w, psiI은 알려진 것으로, theta을 해결하려고합니다.

나는 처음에 theta를 취하고 위에 표현 된 것과 똑같이이 방정식의 합계를 반환하는 함수를 만들려고했다. 그런 다음 scipy.optimize.least_squares로 전달했지만 최적화 후에도 theta 값은 항상 동일하게 유지됩니다. 나는 jacobian을 구현하려고 시도했지만, 결과의 합은 엄청난 음의 값으로 폭발합니다. 또한 이미지에서 이것을 실행하려고 시도 할 때 나이가 들었다. (나는 빛 i를 가진 픽셀 j의 픽셀 값이다.)

나는이 문제를 해결하는 방법에 대해 거의 오해하고 있고 그것에 접근하는 데 도움이 될 수 있음을 깨달았다. 내 현재 코드는 다음과 같습니다 :

def theta_solver(self, theta): 
    imshape = self.images.shape 
    sm = 0 

    for j in j_array: 
     for i in i_array: 
      w = self.get_w(i, j, theta) 
      psi = self.non_diff_smoothing(self.get_psi(i, j)) 
      diff = psi*(theta[i, j]) - self.I[i, j] 
      res = w*(diff) 
      sm += res 

    return sm 

def solve_theta(self, theta_guess): 
    res = scipy.optimize.least_squares(self.theta_solver, theta_guess) 

뭔가 내가이 문제를 접근하고있어 방법은 방법 기지에서 해요, 내가 올바른 방향으로 손가락을 사용할 수 있습니다 알려줍니다. 시간 내 줘서 고마워.

문제 개요 :

이 특수한 비전 방법을 광도계 스테레오라고합니다. 광원이 다른 장면의 여러 이미지를 찍음으로써 우리는 그 장면의 3D 재구성을 만들 수 있습니다.
광원에서의 쇠퇴는 광원으로부터의 거리에 따라 다르므로 일반적인 선형 솔루션으로는 해결할 수 없습니다.
이 문서에 설명 된 접근법은 밝은 빛의 측광 스테레오를 해결하기위한 비선형 접근법입니다. 해법을 번갈아 세타로 표시되는 각 화소에서 그 표면 Z 해결

  • 알베도/강도 : 그것은 두 가지 일을한다.

이 질문에서 나는 방정식의 theta 요소를 풀려고합니다.이 방정식은 가중치가 적용된 최소 제곱을 통해 해결할 수 있습니다.

답변

0

나는이 문제에 대해 과도하게 생각하고 있었다. 이것은 Ax = b 형태의 단순한 선형 솔루션으로 분해 될 수있다. 이 경우, 오류 방정식을 볼 때 :

argmin(THETA) sum(W * ||PSI * THETA - I||^2) 

우리는 단지 루트 내에서 부품을 통해 무게를 배포 할 수 있습니다 평방 의미한다. 우리의 방정식은 다음과 같이 끝납니다 :

W * PSI * THETA = W * I 

좋아하는 선형 해법을 사용하여 해결할 수 있습니다.conjugate gradient descent)