2次元の複素数画像を逆フーリエ変換する(アウトプレース処理)

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_fft2_inv_DDtoDD_out(
	FHANDLE hFFT,
	FHANDLE hImgSrcRe,
	FHANDLE hImgSrcIm,
	FHANDLE hImgDstRe,
	FHANDLE hImgDstIm
)
Visual Basic
Public Shared Function fnFIE_fft2_inv_DDtoDD_out ( 
	hFFT As FHANDLE,
	hImgSrcRe As FHANDLE,
	hImgSrcIm As FHANDLE,
	hImgDstRe As FHANDLE,
	hImgDstIm As FHANDLE
) As Integer

Parameters

hFFT
Type: fvalgcli..::..FHANDLE
FFTハンドル
hImgSrcRe
Type: fvalgcli..::..FHANDLE
周波数領域2次元複素数入力データの実部画像のハンドル( type: double )
hImgSrcIm
Type: fvalgcli..::..FHANDLE
周波数領域2次元複素数入力データの虚部画像のハンドル( type: double )
hImgDstRe
Type: fvalgcli..::..FHANDLE
空間領域2次元複素数出力データの実部画像のハンドル ( type: double )
hImgDstIm
Type: fvalgcli..::..FHANDLE
空間領域2次元複素数出力データの虚部画像のハンドル ( type: double )

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_OBJECT hFFT , hImgSrcRe , hImgSrcIm , hImgDstRe , hImgDstIm のいずれかに IntPtr.Zero が渡された
F_ERR_INVALID_PARAMhFFT が F_OBJID_FFTSPEC 型ではない
F_ERR_INVALID_IMAGE
  • hImgSrcRe , hImgSrcIm , hImgDstRe , hImgDstIm のいずれかが 不正なハンドル
  • hImgSrcRe , hImgSrcIm , hImgDstRe , hImgDstIm のいずれか型が F_IMG_DOUBLE でない
  • hImgSrcRe , hImgSrcIm , hImgDstRe , hImgDstIm の 幅、高さ、チャネル数 が異なっている
  • hImgSrcRe , hImgSrcIm , hImgDstRe , hImgDstIm の 幅又は高さが1である
F_ERR_FFT_INVALID_SPEC hFFT ハンドルは入力画像のFFTに適用できない。
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        /// <summary>
        /// 2次元複素数画像の逆フーリエ変換(アウトプレース処理).
        /// </summary>
        [FvPluginExecute]
        public void fnFIE_fft2_inv_DDtoDD_out()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hTmp = FHANDLE.Zero;        // 入力画像.
            FHANDLE hSrcRe = FHANDLE.Zero;    // 入力データの実部.
            FHANDLE hSrcIm = FHANDLE.Zero;    // 入力データの虚部.
            FHANDLE hDstRe = FHANDLE.Zero;    // 出力データの実部.
            FHANDLE hDstIm = FHANDLE.Zero;    // 出力データの虚部.
            FHANDLE hFFT = FHANDLE.Zero;        // FFTハンドル.

            try
            {
                // 入力画像ファイルのロード.
                status = api.fnFIE_load_raw(TestImageDir + "/testdata/fie_fft_img2.raw", ref hTmp, (int)f_imgtype.F_IMG_DOUBLE, 0, sizeof(Double) * 64 * 2, 64 * 2, 32, new IntPtr(0));
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_load_raw: エラーが発生しました。({0})", (f_err)status);

                // 入力画像情報の取得.
                int width = api.fnFIE_img_get_width(hTmp);
                int height = api.fnFIE_img_get_height(hTmp);
                int type = api.fnFIE_img_get_type(hTmp);
                int channels = api.fnFIE_img_get_channels(hTmp);

                // FFT変換対象データの確保.
                hSrcRe = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);
                hSrcIm = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);
                hDstRe = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);
                hDstIm = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);

                // 画像コピー(UC8 to DOUBLE).
                api.fnFIE_img_copy(hTmp, hSrcRe);
                api.fnFIE_img_copy(hTmp, hSrcIm);

                api.fnFIE_img_clear(hDstRe, 0);
                api.fnFIE_img_clear(hDstIm, 0);

                // FFTハンドルの初期化.
                status = api.fnFIE_fft_2D_alloc(ref hFFT, width, height,
                    f_fft_direction.F_FFT_FORWARD,
                    f_fft_normalize_type.F_FFT_DIV_BY_SQRTN,
                    f_fft_data_type.F_2D_FFT_DOUBLEC,
                    f_fft_data_type.F_2D_FFT_DOUBLEC);
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft_2D_alloc: エラーが発生しました。({0})", (f_err)status);

                // 処理実行.
                status = api.fnFIE_fft2_inv_DDtoDD_out(hFFT, hSrcRe, hSrcIm, hDstRe, hDstIm);
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft2_inv_DDtoDD_out: エラーが発生しました。({0})", (f_err)status);

                //保存
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoDD_out_SrcReal.tiff", hSrcRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoDD_out_SrcImage.tiff", hSrcIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoDD_out_DstReal.tiff", hDstRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoDD_out_DstImage.tiff", hDstIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
        }
        finally
        {
            // オブジェクトの開放.
            hTmp.Dispose();
            hSrcRe.Dispose();
            hSrcIm.Dispose();
            hDstRe.Dispose();
            hDstIm.Dispose();
            hFFT.Dispose();
        }
    }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Runtime.InteropServices
Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    ''' <summary>
    ''' 2次元複素数画像の逆フーリエ変換(アウトプレース処理).
    ''' </summary>
    <FvPluginExecute> _
    Public Sub fnFIE_fft2_inv_DDtoDD_out()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hTmp As FHANDLE = FHANDLE.Zero
        ' 入力画像.
        Dim hSrcRe As FHANDLE = FHANDLE.Zero
        ' 入力データの実部.
        Dim hSrcIm As FHANDLE = FHANDLE.Zero
        ' 入力データの虚部.
        Dim hDstRe As FHANDLE = FHANDLE.Zero
        ' 出力データの実部.
        Dim hDstIm As FHANDLE = FHANDLE.Zero
        ' 出力データの虚部.
        Dim hFFT As FHANDLE = FHANDLE.Zero
        ' FFTハンドル.
        Try
            ' 入力画像ファイルのロード.
            status = api.fnFIE_load_raw(TestImageDir & "/testdata/fie_fft_img2.raw", hTmp, CInt(f_imgtype.F_IMG_DOUBLE), 0, Marshal.SizeOf(GetType(Double)) * 64 * 2, 64 * 2, _
                32, New IntPtr(0))
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_load_raw: エラーが発生しました。({0})", CType(status, f_err))

            ' 入力画像情報の取得.
            Dim width As Integer = api.fnFIE_img_get_width(hTmp)
            Dim height As Integer = api.fnFIE_img_get_height(hTmp)
            Dim type As Integer = api.fnFIE_img_get_type(hTmp)
            Dim channels As Integer = api.fnFIE_img_get_channels(hTmp)

            ' FFT変換対象データの確保.
            hSrcRe = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)
            hSrcIm = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)
            hDstRe = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)
            hDstIm = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)

            ' 画像コピー(UC8 to DOUBLE).
            api.fnFIE_img_copy(hTmp, hSrcRe)
            api.fnFIE_img_copy(hTmp, hSrcIm)

            api.fnFIE_img_clear(hDstRe, 0)
            api.fnFIE_img_clear(hDstIm, 0)

            ' FFTハンドルの初期化.
            status = api.fnFIE_fft_2D_alloc(hFFT, width, height, f_fft_direction.F_FFT_FORWARD, f_fft_normalize_type.F_FFT_DIV_BY_SQRTN, f_fft_data_type.F_2D_FFT_DOUBLEC, _
                f_fft_data_type.F_2D_FFT_DOUBLEC)
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft_2D_alloc: エラーが発生しました。({0})", CType(status, f_err))

            ' 処理実行.
            status = api.fnFIE_fft2_inv_DDtoDD_out(hFFT, hSrcRe, hSrcIm, hDstRe, hDstIm)
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft2_inv_DDtoDD_out: エラーが発生しました。({0})", CType(status, f_err))

            '保存
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoDD_out_SrcReal.tiff", hSrcRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoDD_out_SrcImage.tiff", hSrcIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoDD_out_DstReal.tiff", hDstRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoDD_out_DstImage.tiff", hDstIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
        Finally
            ' オブジェクトの開放.
            hTmp.Dispose()
            hSrcRe.Dispose()
            hSrcIm.Dispose()
            hDstRe.Dispose()
            hDstIm.Dispose()
            hFFT.Dispose()
        End Try
    End Sub
End Class

See Also