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_CtoC_in(
	FHANDLE hFFT,
	FHANDLE hImg
)
Visual Basic
Public Shared Function fnFIE_fft2_inv_CtoC_in ( 
	hFFT As FHANDLE,
	hImg As FHANDLE
) As Integer

Parameters

hFFT
Type: fvalgcli..::..FHANDLE
FFTハンドル
hImg
Type: fvalgcli..::..FHANDLE
周波数領域の2次元複素数入力画像のハンドル(=空間領域の出力画像) ( type: double )

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_OBJECT hFFT 又は hImg に IntPtr.Zero が渡された
F_ERR_INVALID_PARAMhFFT が F_OBJID_FFTSPEC 型ではない
F_ERR_INVALID_IMAGE
  • hImg が不正なハンドル
  • hImg の型が F_IMG_DOUBLE でない
  • hImg の幅が偶数でない
  • hImg の幅又は高さが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_CtoC_in()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hTmp = FHANDLE.Zero;    // 入力画像.
            FHANDLE hData = FHANDLE.Zero;    // FFT変換対象データ.
            FHANDLE hFFT = FHANDLE.Zero;    // FFTハンドル.

            try
            {
                // 入力画像読み込み.            
                api.fnFIE_load_img_file(TestImageDir + "/testdata/lena512.bmp", ref hTmp, f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                Assert.IsTrue(hTmp != FHANDLE.Zero, "hTmp が異常です.");

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

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

                // 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_FCOMPLEX,
                    f_fft_data_type.F_2D_FFT_FCOMPLEX);
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft_2D_alloc: エラーが発生しました。({0})", (f_err)status);

                // 処理実行.
                status = api.fnFIE_fft2_inv_CtoC_in(hFFT, hData);

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

                // 出力画像の保存
                api.fnFIE_save_tiff(ResultDir + "/fnFIE_fft2_inv_CtoC_in.tiff", hData, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0);
            }
            finally
            {
                // オブジェクトの開放
                hTmp.Dispose();
                hData.Dispose();
                hFFT.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

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

        Dim hTmp As FHANDLE = FHANDLE.Zero
        ' 入力画像.
        Dim hData As FHANDLE = FHANDLE.Zero
        ' FFT変換対象データ.
        Dim hFFT As FHANDLE = FHANDLE.Zero
        ' FFTハンドル.
        Try
            ' 入力画像読み込み.            
            api.fnFIE_load_img_file(TestImageDir & "/testdata/lena512.bmp", hTmp, f_color_img_type.F_COLOR_IMG_TYPE_UC8)
            Assert.IsTrue(hTmp <> FHANDLE.Zero, "hTmp が異常です.")

            '入力画像情報取得
            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変換対象データの確保.            
            hData = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), 1, width, height)
            Assert.IsTrue(hData <> FHANDLE.Zero, "hData が異常です.")

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

            ' 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_FCOMPLEX, _
                f_fft_data_type.F_2D_FFT_FCOMPLEX)
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft_2D_alloc: エラーが発生しました。({0})", CType(status, f_err))

            ' 処理実行.
            status = api.fnFIE_fft2_inv_CtoC_in(hFFT, hData)

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

            ' 出力画像の保存
            api.fnFIE_save_tiff(ResultDir & "/fnFIE_fft2_inv_CtoC_in.tiff", hData, f_tiff_compression.F_TIFF_COMPRESSION_NONE, 0)
        Finally
            ' オブジェクトの開放
            hTmp.Dispose()
            hData.Dispose()
            hFFT.Dispose()
        End Try
    End Sub
End Class

See Also