So beschleunigen Sie die Bilineare interpolation von Bild?
Ich versuche eine Drehung des Bildes mit interpolation, aber es ist zu langsam für Echtzeit für große Bilder.
den code so etwas wie:
for(int y=0;y<dst_h;++y)
{
for(int x=0;x<dst_w;++x)
{
//do inverse transform
fPoint pt(Transform(Point(x, y)));
//in coor of src
int x1= (int)floor(pt.x);
int y1= (int)floor(pt.y);
int x2= x1+1;
int y2= y1+1;
if((x1>=0&&x1<src_w&&y1>=0&&y1<src_h)&&(x2>=0&&x2<src_w&&y2>=0&&y2<src_h))
{
Mask[y][x]= 1; //show pixel
float dx1= pt.x-x1;
float dx2= 1-dx1;
float dy1= pt.y-y1;
float dy2= 1-dy1;
//bilinear
pd[x].blue= (dy2*(ps[y1*src_w+x1].blue*dx2+ps[y1*src_w+x2].blue*dx1)+
dy1*(ps[y2*src_w+x1].blue*dx2+ps[y2*src_w+x2].blue*dx1));
pd[x].green= (dy2*(ps[y1*src_w+x1].green*dx2+ps[y1*src_w+x2].green*dx1)+
dy1*(ps[y2*src_w+x1].green*dx2+ps[y2*src_w+x2].green*dx1));
pd[x].red= (dy2*(ps[y1*src_w+x1].red*dx2+ps[y1*src_w+x2].red*dx1)+
dy1*(ps[y2*src_w+x1].red*dx2+ps[y2*src_w+x2].red*dx1));
//nearest neighbour
//pd[x]= ps[((int)pt.y)*src_w+(int)pt.x];
}
else
Mask[y][x]= 0; //transparent pixel
}
pd+= dst_w;
}
Wie kann ich beschleunigen diesen code versuche ich zu parallelisieren mit diesem code, aber es scheint, gibt es keine Beschleunigung, weil der memory access pattern (?).
- Es scheint angemessen, für das codereview.se
- Sie können auch die Intel IPP Bibliothek, die eine optimierte Funktion für die Bilineare interpolation. Diese lib optimiert für beide SIMD-Anweisungen (schneller single-thread-Leistung) und für die multicore-Nutzung, in einigen Fällen zu. Der einzige Nachteil ist, dass dieses SDK ist payware. Wenn das nicht funktioniert, für Ihre Bedürfnisse, dann sollten Sie versuchen, die OpenMP.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Schlüssel ist, um die meisten Ihrer Berechnungen als ints. Das einzige, was notwendig ist, zu tun, was ein float ist die Gewichtung. Sehen hier für eine gute Ressource.
Aus, dass dieselbe Ressource:
wow, man tut eine Menge in die meisten inneren Schleife wie:
1.float-zu-int-Umwandlungen
2.Transformation(x,y)
3.wenn ....