允许图像双线性变换的Java库

时间:2013-01-04 15:13:03

标签: java image jai

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

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

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

enter image description here

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

问题是,JAI是否允许进行此类转换,如果没有,您是否知道其他可以提供帮助的库?

3 个答案:

答案 0 :(得分:1)

你可以使用java.awt.image.AffineTransformOp或者知道双线性变换是线性变换的扩展,参见multigraph project的multigraph.LinearInterpolator。

答案 1 :(得分:0)

使用Opencv库

非常容易

答案 2 :(得分: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);
}

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