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