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_DDtoReal(
	FHANDLE hFFT,
	FHANDLE hSrcRe,
	FHANDLE hSrcIm,
	FHANDLE hDst,
	double dScaleFactor
)
Visual Basic
Public Shared Function fnFIE_fft2_inv_DDtoReal ( 
	hFFT As FHANDLE,
	hSrcRe As FHANDLE,
	hSrcIm As FHANDLE,
	hDst As FHANDLE,
	dScaleFactor As Double
) As Integer

Parameters

hFFT
Type: fvalgcli..::..FHANDLE
FFTハンドル
hSrcRe
Type: fvalgcli..::..FHANDLE
周波数領域2次元複素数入力データの実部画像のハンドル ( type: double )
hSrcIm
Type: fvalgcli..::..FHANDLE
周波数領域2次元複素数入力データの虚部画像のハンドル ( type: double )
hDst
Type: fvalgcli..::..FHANDLE
空間領域2次元実数出力画像のハンドル ( type: uc8, us16, s16, double )
dScaleFactor
Type: System..::..Double
出力画像の値範囲内に出力値を制限するためのスケール値

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_OBJECThFFT , hSrcRe , hSrcIm , hDst のいずれかに IntPtr.Zero が渡された
F_ERR_INVALID_PARAM
  • hFFT が F_OBJID_FFTSPEC 型ではない
  • dScaleFactor が 0.0
F_ERR_INVALID_IMAGE
  • hSrcRe , hSrcIm , hDst のいずれかが不正なハンドル
  • hSrcRe , hSrcIm のいずれか型が F_IMG_DOUBLE でない
  • hDst の型が F_IMG_UC8, F_IMG_US16, F_IMG_S16, F_IMG_DOUBLE のいずれでもない。
  • hSrcRe , hSrcIm , hDst の 幅、高さ、チャネル数 が異なっている
  • hSrcRe , hSrcIm , hDst の幅又は高さが1である
F_ERR_FFT_INVALID_SPEChFFT ハンドルは入力画像の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_DDtoReal()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hTmp = FHANDLE.Zero;        // 入力画像.
            FHANDLE hDataSrcRe = FHANDLE.Zero;    // 入力データの実部.
            FHANDLE hDataSrcIm = FHANDLE.Zero;    // 入力データの虚部.
            FHANDLE hDst = 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);

                // 入力データのオブジェクト生成.
                hDataSrcRe = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);
                hDataSrcIm = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);

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

                // 出力画像オブジェクトの生成.
                hDst = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, channels, width, height);

                // FFTハンドルの初期化.
                status = api.fnFIE_fft_2D_alloc(ref hFFT, width, height,
                    f_fft_direction.F_FFT_INVERSE,
                    f_fft_normalize_type.F_FFT_DIV_BY_SQRTN,
                    f_fft_data_type.F_2D_FFT_REAL,
                    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_DDtoReal(hFFT, hDataSrcRe, hDataSrcIm, hDst, 1.0);
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft2_fwd_RealtoDD: エラーが発生しました。({0})", (f_err)status);

                //保存.
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoReal_SrcReal.tiff", hDataSrcRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoReal_SrcImage.tiff", hDataSrcIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoReal_Dst.tiff", hDst, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
        }
        finally
        {
            // オブジェクトの開放.
            hTmp.Dispose();
            hDataSrcRe.Dispose();
            hDataSrcIm.Dispose();
            hDst.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_DDtoReal()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hTmp As FHANDLE = FHANDLE.Zero
        ' 入力画像.
        Dim hDataSrcRe As FHANDLE = FHANDLE.Zero
        ' 入力データの実部.
        Dim hDataSrcIm As FHANDLE = FHANDLE.Zero
        ' 入力データの虚部.
        Dim hDst 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)

            ' 入力データのオブジェクト生成.
            hDataSrcRe = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)
            hDataSrcIm = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)

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

            ' 出力画像オブジェクトの生成.
            hDst = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), channels, width, height)

            ' FFTハンドルの初期化.
            status = api.fnFIE_fft_2D_alloc(hFFT, width, height, f_fft_direction.F_FFT_INVERSE, f_fft_normalize_type.F_FFT_DIV_BY_SQRTN, f_fft_data_type.F_2D_FFT_REAL, _
                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_DDtoReal(hFFT, hDataSrcRe, hDataSrcIm, hDst, 1.0)
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft2_fwd_RealtoDD: エラーが発生しました。({0})", CType(status, f_err))

            '保存.
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoReal_SrcReal.tiff", hDataSrcRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoReal_SrcImage.tiff", hDataSrcIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoReal_Dst.tiff", hDst, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
        Finally
            ' オブジェクトの開放.
            hTmp.Dispose()
            hDataSrcRe.Dispose()
            hDataSrcIm.Dispose()
            hDst.Dispose()
            hFFT.Dispose()
        End Try
    End Sub
End Class

See Also