Здравствуйте, 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>>