0

現在のプロジェクトで問題が発生しています。image1.tiff と image2.tiff という同じ画像の 2 つのコピーがありますが、サイズが異なります (ピクセルと DPI が異なります)。image1.tiff の点が座標 (x,y) にあるとします。image2.tiff の同じ点の座標を見つける必要があります。私はアルゴリズムを考えるために多くのことを試みました。これについてあなたの助けを求めています..

4

2 に答える 2

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 に答える
1

次のアプローチをお勧めします。

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

x1最初の画像の座標としてとがある場合y1、次のように 2 番目の画像の対応する位置を計算できます。

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

画像の縦横比が異なる場合は、高さの倍率を個別に計算する必要があります。

このアプローチの背後にある基本的な考え方は、画像の座標をi_1 = [0;1]幅で割って間隔にマッピングすることです (幅が大きい寸法であると仮定しますが、高さより小さいかどうかは問題ではありません)。スケーリングされた座標に 2 番目の画像の幅を掛けることで、座標i_2 = [0; x_1 * width_2]を最大で 2 番目の画像の幅の間隔に戻します。

于 2013-06-27T07:09:59.363 に答える