Re: Изображение по Лапласу -> Оригинал
От: yanchick  
Дата: 17.10.06 04:52
Оценка: 12 (1)
Здравствуйте, shank, Вы писали:

S>Здравствуйте. Какие есть алгоритмы для получения оригинала из изображения по Лапласу?

S>Само изображение имеет следующий вид, если это имеет значение.
S>
Сам долго искал решение этой задачи. Теорию можно взять в любой книги по теории функции косплексной переменной.
А сам код собсвенно:

 using namespace std;
#include <complex>
#include <iostream>
typedef complex<double> cplxd;
const double PI = 3.141592653589793238;


cplxd F(const cplxd p)
{
  cplxd tt;
  cplxd tp(1,0);  
  cplxd tf=tp/(p*p+tp*p);
  tt=tf;            
      return tt;
}

double invLaplace (double t, int n, double A) 
{
 const int nmax = 500;
 const double X=0.5*A/t, H=PI/t;
 if (n >nmax) n = nmax;
 // Euler summation (van Wijngaardenв algorithm)
 double sum, sgn, wk[nmax+1];
 int k = 0;
 sgn = -1.0;
 sum = 0.5*(wk[0]=0.5*real(F(cplxd(X,0))));
 for (int m=1; m<n; m++, sgn=-sgn) 
 {
     double nxt, cur;
     nxt = sgn*real(F(cplxd(X,m*H)));
     for (int j=0; j<=k; j++) 
     {
      cur = wk[j]; wk[j] = nxt;
      nxt = 0.5*(cur+nxt);
      }
   sum += (fabs(nxt)>fabs(cur)) ?
                                nxt : 0.5*(wk[++k]=nxt);   
 }
return exp(0.5*A)/t * sum;
}

int main()
{
    double t;
    cplxd* p;
    for (t=0.01;t<3.2;t+=0.05){
    cout <<  "t= " << t << " Invlap=" << invLaplace(t,500,20) << endl ;
}
system("PAUSE");
  return 0;
  
}
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.