Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许图像双线性转换的Java库_Java_Image_Jai - Fatal编程技术网

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

允许图像双线性转换的Java库,java,image,jai,Java,Image,Jai,情况是,我有一个图像,我需要用双线性函数对其进行变换: x' = a10 + a11 * x + a12 * y + a13 * x * y y' = a20 + a21 * x + a22 * y + a23 * x * y 作为“转换”,我理解得到的新图像是每个源像素(x,y)都是targetImg上的targetPixel(x',y')。此外,我还计算了所有参数(a10、a11、a12、a13、a20、a21、a22和a23)。现在我需要一些Java语言库来执行此转换。转换的示例如下图所

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

x' = a10 + a11 * x + a12 * y + a13 * x * y
y' = a20 + a21 * x + a22 * y + a23 * x * y
作为“转换”,我理解得到的新图像是每个源像素(x,y)都是targetImg上的targetPixel(x',y')。此外,我还计算了所有参数(a10、a11、a12、a13、a20、a21、a22和a23)。现在我需要一些Java语言库来执行此转换。转换的示例如下图所示

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


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

使用Opencv库非常简单

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

JavaCV看起来像是我在寻找的东西,但却缺少可怕的功能文档我写了这样的东西,但效果不好(我得到的都是黑色的targetImage)


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

使用如此强大的本机库进行如此简单的操作,对我来说听起来太过分了。你还好吧,但opencv是“其他”库可以帮助“我不明白”。如何使用java.awt.image.AffineTransformOp进行双线性变换?确实存在AffineTransformOp.TYPE_双线性,但是这个类的构造函数看起来是这样的:public AffineTransformOp(AffineTransform xform,int interpolationType),据我所知,method transform将进行转换,但仍然会进行仿射转换(使用双线性抗锯齿方法)-不是双线性变换本身吗?对于multigraph.LinearInterpolator,这个类是用于变换的Util类(这实际上不是问题,因为在我编写时,所有参数都被计算在内)。我没有给出任何关于如何使用它进行图像转换操作的提示。我错过了什么?
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);
}