Como calcular numericamente uma função a partir do seu gradiente barulhento?


8

Eu tenho o modelo s ( x , y ) = x 2 + y 2 , 0 ≤ x ≤ 1 , 0 ≤ y ≤ 1 . s(x,y)=x2+y2,0≤x≤1,0≤y≤1

Em vez de observar o modelo diretamente, estou observando as derivadas do modelo + algum ruído (e):

 p(x,y)=sx+e,q(x,y)=sy+e

A partir das medidas de p (x, y e q (x, y), quero estimar s (x), digamos que sei que s (0,0) = 0.

De acordo com o teorema do gradiente: s ( x , y ) = ∫ ( x , y ) ( 0 , 0 ) [ s x , s y ] d → r s(x,y)=∫(0,0)(x,y)[sx,sy]dr→

independentemente do caminho que integramos.

Como um pequeno experimento (no Matlab), adicionei ruído distribuído normal, N (0,1), a p = 2x e q = 2y. Em seguida, integrei primeiro ao longo de x seguido pelo y: SXY. Em seguida, integrei primeiro ao longo de y, seguido pelo x: SYX.

Os resultados mostram que o teorema do gradiente não se sustenta neste caso (por causa do ruído):

S

SXY

SYX

Os erros quadráticos médios da raiz em relação ao modelo são:

ErmsXY =
    0.1125
ErmsYX =
    0.0920

Como posso encontrar uma estimativa melhor (menos erro RMS e mais suave) de s de peq?

EDITAR:

Pelo que eu li; o uso da integral da curva é conhecido como integração local. Existem também métodos de integração global em que se tenta escolher um S (x, y) que minimiza:

 ∫01∫01[|Sx−P|2+|Sy−Q|2]dxdy

Os métodos de integração global devem fornecer melhores resultados quando o gradiente é barulhento, mas como faço isso na prática?

EDIT 2:

Uma abordagem que eu usei é esta:

 sx=Dx∗s,sy=Dy∗s

O resultado é o seguinte sistema de equações lineares:

 Dx∗s=p,Dy∗s=q

Em seguida, encontre uma solução de erro do quadrado mínimo para essas equações. Supõe-se que uma solução LSE para essas equações seja equivalente a minimizar a integral de cima. Como isso pode ser mostrado?

Os resultados são bons: insira a descrição da imagem aqui

O erro RMS é cerca de 1/5 do SXY e SYX e a solução também é mais suave.

No entanto, existem algumas desvantagens nessa abordagem:

  1. é difícil de implementar; deve usar diferenças centrais e "achatar" a matriz 2D s no vetor etc.

  2. As matrizes de derivação são muito grandes e esparsas, portanto, podem consumir muita RAM.

Outra abordagem que parece potencialmente mais simples de codificar, consumindo menos RAM e mais rápido é usar o FFT. No espaço de Fourier, esses pds se tornam uma equação algébrica. Isso é conhecido como algoritmo de Frankot-Chellappa, mas infelizmente não consegui que ele funcionasse nos meus dados de exemplo.

Respostas:


1

s


Obrigado Jim. Por exemplo, posso pegar SXY e substituir cada valor SXY (xi, yj) por uma soma ponderada sobre o valor e seus vizinhos, onde os pesos podem ser, por exemplo, um gaussiano 2D?
— Andy

Desculpe Jim. Esqueci de enfatizar que também quero um pequeno erro RMS em relação ao modelo. Eu editei minha pergunta para levar isso em conta. A suavização fornece um resultado mais suave, mas não um erro RMS menor?
— 218 Andy Andy

@ Andy Sim, "uma soma ponderada sobre o valor e seus vizinhos" é uma descrição bastante sucinta da filtragem, e um gaussiano 2D é uma forma de filtro passa-baixo.
— 11137 Jim Clay

s

Obrigado Jim. Mas não há como combinar os resultados do SXY e SYX para obter um erro RMS menor?
— Andy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.