20

我需要用 Pascal/Delphi/Lazarus 编写的逆透视变换。见下图:

图像处理

我想我需要遍历目标像素,然后计算源图像中的相应位置(以避免舍入误差等问题)。

function redraw_3d_to_2d(sourcebitmap:tbitmap, sourceaspect:extended, point_a, point_b, point_c, point_d:tpoint, megapixelcount:integer):tbitmap;
var
   destinationbitmap:tbitmap;
   x,y,sx,sy:integer;
begin
  destinationbitmap:=tbitmap.create;
  destinationbitmap.width=megapixelcount*sourceaspect*???; // I dont how to calculate this
  destinationbitmap.height=megapixelcount*sourceaspect*???; // I dont how to calculate this
  for x:=0 to destinationbitmap.width-1 do
    for y:=0 to destinationbitmap.height-1 do
    begin
        sx:=??;
        sy:=??;
        destinationbitmap.canvas.pixels[x,y]=sourcebitmap.canvas.pixels[sx,sy];
    end;
  result:=destinationbitmap;
end;

我需要真正的公式……所以 OpenGL 解决方案并不理想……

4

2 回答 2

22
于 2013-01-09T19:08:04.187 回答
4

使用Graphics32,特别是TProjectiveTransformation(与Transform方法一起使用)。不要忘记在源图像中留下一些透明边距,以免出现锯齿状边缘。

于 2013-01-09T20:06:33.057 回答