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_in(
	FHANDLE hFFT,
	FHANDLE hImgRe,
	FHANDLE hImgIm
)
Visual Basic
Public Shared Function fnFIE_fft2_inv_DDtoDD_in ( 
	hFFT As FHANDLE,
	hImgRe As FHANDLE,
	hImgIm As FHANDLE
) As Integer

Parameters

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

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_OBJECT hFFT , hImgRe ,又は hImgIm に IntPtr.Zero が渡された
F_ERR_INVALID_PARAMhFFT が F_OBJID_FFTSPEC 型ではない
F_ERR_INVALID_IMAGE
  • hImgRe 又は hImgIm が不正なハンドル
  • hImgRe 又は hImgIm の型が F_IMG_DOUBLE でない
  • hImgRe と hImgIm の 幅、高さ、チャネル数 が異なっている
  • hImgRe 又は hImgIm の幅又は高さが1である
F_ERR_FFT_INVALID_SPEC 指定された hFFT ハンドルはこの処理に使用できない
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_in()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hTmp = FHANDLE.Zero;    // 入力画像. 
            FHANDLE hDataRe = FHANDLE.Zero;    // 入力データの実部(=出力データの実部).
            FHANDLE hDataIm = 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変換対象データの確保.
                hDataRe = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, 1, width, height);
                hDataIm = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, 1, width, height);
                Assert.IsTrue(hDataRe != FHANDLE.Zero, "hDataRe が異常です.");
                Assert.IsTrue(hDataIm != FHANDLE.Zero, "hDataIm が異常です.");

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

                // 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_in(hFFT, hDataRe, hDataIm);

                // エラー判定.                
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft2_inv_DDtoDD_in: エラーが発生しました。({0})", (f_err)status);

                // 保存.
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoDD_in_Real.tiff", hDataRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_DDtoDD_in_Image.tiff", hDataIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
            }
            finally
            {
                // オブジェクトの開放.
                hTmp.Dispose();
                hDataRe.Dispose();
                hDataIm.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_in()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hTmp As FHANDLE = FHANDLE.Zero
        ' 入力画像. 
        Dim hDataRe As FHANDLE = FHANDLE.Zero
        ' 入力データの実部(=出力データの実部).
        Dim hDataIm 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変換対象データの確保.
            hDataRe = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), 1, width, height)
            hDataIm = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), 1, width, height)
            Assert.IsTrue(hDataRe <> FHANDLE.Zero, "hDataRe が異常です.")
            Assert.IsTrue(hDataIm <> FHANDLE.Zero, "hDataIm が異常です.")

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

            ' 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_in(hFFT, hDataRe, hDataIm)

            ' エラー判定.                
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft2_inv_DDtoDD_in: エラーが発生しました。({0})", CType(status, f_err))

            ' 保存.
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoDD_in_Real.tiff", hDataRe, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_DDtoDD_in_Image.tiff", hDataIm, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
        Finally
            ' オブジェクトの開放.
            hTmp.Dispose()
            hDataRe.Dispose()
            hDataIm.Dispose()
            hFFT.Dispose()
        End Try
    End Sub
End Class

See Also