2

情况是我有一个图像,我需要用双线性函数对其进行转换:

x' = a10 + a11 * x + a12 * y + a13 * x * y
y' = a20 + a21 * x + a22 * y + a23 * x * y

作为“转换”,我理解获取新图像,每个 sourcePixel(x,y) 将是 targetImg 上的 targetPixel(x',y')。更重要的是,我计算了所有参数(a10、a11、a12、a13、a20、a21、a22 和 a23)。现在我需要一些 Java 语言的库来执行这种转换。转换示例如下图所示。

在此处输入图像描述

我做了一些研究,发现 JAI 提供了一些工具,但我发现的所有示例都表明双线性插值用于抗锯齿旋转图像。

问题是,JAI 是否允许这种转换,如果不允许,您知道其他可以提供帮助的库吗?

4

3 回答 3

1

您可以使用 java.awt.image.AffineTransformOp 或知道双线性变换是线性变换的扩展,请参阅 multigraph项目中的 multigraph.LinearInterpolator 。

于 2013-01-04T15:26:22.473 回答
0

使用 Opencv 库非常简单

于 2013-01-04T15:25:18.317 回答
0

JavaCV 看起来像我正在寻找的东西,但文档非常缺乏。我写了这样的东西,但效果不佳(我得到全黑的targetImage)。

static float[] confX = new float[] { a10, a11, a12, a13 };
static float[] confY = new float[] { a20, a21, a22, a23 };

public static void main(String[] args) throws IOException {
  BufferedImage sourceImage = ImageIO.read(new File("C:/in.tif"));
  IplImage in = IplImage.createFrom(sourceImage);
  CvMat m = CvMat.create(3, 3);

  cvGetPerspectiveTransform(confX, confY, m);
  cvWarpPerspective(in, in, m);
  cvSaveImage("C:/out.tif", in);
}

有人知道它有什么问题吗?

于 2013-01-07T11:44:32.810 回答