2

場合は、画像があり、それを双一次関数で変換する必要がある場合です。

x' = a10 + a11 * x + a12 * y + a13 * x * y
y' = a20 + a21 * x + a22 * y + a23 * x * y

「変換」として、各 sourcePixel(x,y) が targetImg の targetPixel(x', y') になる新しい画像を取得することを理解しています。さらに、すべてのパラメーター (a10、a11、a12、a13、a20、a21、a22、および a23) をカウントしています。この変換を実行するには、Java 言語のライブラリが必要です。変換の例は、下の図を示しています。

ここに画像の説明を入力

私はいくつかの調査を行い、JAIがいくつかのツールを提供することを発見しましたが、私が見つけたすべての例は、バイリニア補間が回転した画像のアンチエイリアスに使用されていることを示しています。

問題は、JAI がそのような変換を許可するかどうかです。許可しない場合、役立つ可能性のある他のライブラリを知っていますか?

4

3 に答える 3

1

java.awt.image.AffineTransformOp を使用するか、双一次変換が線形変換の拡張であることを知っている場合は、マルチグラフ プロジェクトの multigraph.LinearInterpolator を参照してください。

于 2013-01-04T15:26:22.473 に答える
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);
}

誰かがそれの何が問題なのか考えていますか?

于 2013-01-07T11:44:32.810 に答える
0

Opencv Library を使えばとても簡単です

于 2013-01-04T15:25:18.317 に答える