案例是我有一个图像,我需要用双线性函数对其进行转换:
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语言库来执行这种转换。转型的例子如下图所示。
我做了一些研究,我发现JAI提供了一些工具,但我发现的所有例子都表明双线性插值用于抗锯齿旋转图像。
问题是,JAI是否允许进行此类转换,如果没有,您是否知道其他可以提供帮助的库?
答案 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);
}
有人知道它有什么问题吗?