0

我在当前项目中遇到了一个问题。我有 2 个相同图像的副本,比如 image1.tiff 和 image2.tiff,但尺寸不同(不同的像素和 DPI)。假设 image1.tiff 中的一个点位于坐标 (x,y) 处,我需要在 image2.tiff 中找到同一点的坐标。我已经尝试了很多来考虑算法。为此请求您的帮助..

4

2 回答 2

1

我建议采用以下方法:

double image1_to_image2 = image2.width()/image1.width();
double image2_to_image1 = image1.width()/image2.width();

如果你有x1并且y1作为第一张图像的坐标,您可以计算第二张图像的对应位置,如下所示:

int x2 = x1 * image1_to_image2;
int y2 = y1 * image1_to_image2;

如果您的图像具有不同的纵横比,则需要单独计算高度的比例因子。

该方法背后的基本思想是,i_1 = [0;1]通过除以宽度将图像的坐标映射到间隔(假设宽度是较大的维度,但如果它小于高度则无关紧要)。通过将缩放坐标与第二张图像的宽度相乘,您可以将坐标映射回i_2 = [0; x_1 * width_2]至多为第二张图像宽度的区间。

于 2013-06-27T07:09:59.363 回答
1

你可以用AffineTransformOp这个。

举个例子:

BufferedImage img1 = new BufferedImage(200, 100, BufferedImage.TYPE_INT_ARGB);
BufferedImage img2 = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);

double sx = img2.getWidth() / (double) img1.getWidth();
double sy = img2.getHeight() / (double) img1.getHeight();

AffineTransformOp xform = 
        new AffineTransformOp(AffineTransform.getScaleInstance(sx, sy), null);
Point srcPt = new Point(7, 49);
Point dstPoint = (Point) xform.getPoint2D(srcPt, new Point());

System.err.println("srcPt: " + srcPt);
System.err.println("dstPoint: " + dstPoint);

将打印:

srcPt: java.awt.Point[x=7,y=49]
dstPoint: java.awt.Point[x=14,y=98]
于 2013-07-01T15:07:57.333 回答