HALCON 2次元変換(アフィン変換)

こんにちは、ゆたんぽです。

本日は引き続きHALCONの記事を書いていきます。

今回は、よく利用する2次元変換(アフィン変換)について書いていきます。

2次元変換のやり方

サンプルプログラムを利用して説明していきます。

以下は、HALCONを使用して2次元変換を行うサンプルプログラムです。

このプログラムは、画像を拡大して回転させ、その結果を表示します。

using HalconDotNet;

class Program
{
    static void Main(string[] args)
    {
        // 画像ファイルの読み込み
        HImage image = new HImage("image.jpg");

        // 画像のサイズを取得
        int width = image.GetWidth();
        int height = image.GetHeight();

        // 2次元変換のパラメータを設定
        double scale = 2.0;
        double angle = 45.0;
        double centerX = width / 2.0;
        double centerY = height / 2.0;
        HTuple homMat2D;
        HOperatorSet.HomMat2dIdentity(out homMat2D);
        HOperatorSet.HomMat2dScale(homMat2D, centerX, centerY, scale, scale, out homMat2D);
        HOperatorSet.HomMat2dRotate(homMat2D, centerX, centerY, angle, out homMat2D);

        // 画像の2次元変換を実行
        HImage transformedImage = image.AffineTransImage(homMat2D, "bilinear", "false");

        // 変換後の画像を表示
        transformedImage.Disp();

        // 後処理
        image.Dispose();
        transformedImage.Dispose();
    }
}

このプログラムでは、HALCONの「HImage」クラスを使用して、画像ファイルを読み込んでいます。次に、画像のサイズを取得し、2次元変換のパラメータを設定しています。

変換のパラメータとして、拡大率、回転角度、変換の中心座標が設定されています。

また、「HomMat2dIdentity」関数を使用して、単位行列を作成し、これに「HomMat2dScale」と「HomMat2dRotate」関数を適用して、2次元変換の行列を作成しています。

「HomMat2dScale」関数は、HALCONで2次元の拡大縮小変換を行うために使用される関数の一つです。HomMat2dScale(homMat2D, centerX, centerY, scale1, scale2, out homMat2D)のように指定でき、scale1,2にそれぞれX,Y軸の縮尺率を指定できます。例えば2倍にしたい場合は、sx,syにそれぞれ2をしてすればよいわけです。centerX,Yは変換後の画像の位置を指定します。今回は、画像中心を事前に出して、その位置を指定しています。outで2次元変換を受け取れます。

「HomMat2dRotate」関数は、 HALCONで2次元の回転を行うために使用される関数の一つです。HomMat2dRotate(homMat2D, centerX, centerY, angle, out homMat2D)のように指定でき、angleに回転角度を入れることで、指定の角度に画像を回転できます。今回は、45度を指定しています。 centerX, centerYは前述と同じです。outで2次元変換を受け取れます。

注意:角度はそのままだとエラーが出る可能性があります。ラジアン形式に変換が必要な場合は.TupleRad()関数などを利用して変換しましょう。

次に、「AffineTransImage」メソッドを使用して、画像の2次元変換を実行しています。このメソッドは、変換行列を適用して画像を変換します。このサンプルでは、変換方法として「bilinear」を指定しています。この指定により、画像が拡大された場合でも、滑らかなエッジが得られます。

最後に、変換後の画像を「Disp」メソッドを使用して表示しています。このメソッドは、HALCONの画像ビューアーを開き、画像を表示します。

まとめ

本記事では、HALCONを使用して2次元変換を行うサンプルプログラムを紹介しました。

2次元変換は多くの方が利用するので身に着けておくと便利です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です