splitted format の複素数画像間の除算
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_fft2_div_DDtoDD( FHANDLE hSrc1Re, FHANDLE hSrc1Im, FHANDLE hSrc2Re, FHANDLE hSrc2Im, FHANDLE hDstRe, FHANDLE hDstIm ) |
Visual Basic |
---|
Public Shared Function fnFIE_fft2_div_DDtoDD ( hSrc1Re As FHANDLE, hSrc1Im As FHANDLE, hSrc2Re As FHANDLE, hSrc2Im As FHANDLE, hDstRe As FHANDLE, hDstIm As FHANDLE ) As Integer |
Parameters
- hSrc1Re
- Type: fvalgcli..::..FHANDLE
分子となる入力複素数画像の実部画像 ( type: double )
- hSrc1Im
- Type: fvalgcli..::..FHANDLE
分子となる入力複素数画像の虚部画像 ( type: double )
- hSrc2Re
- Type: fvalgcli..::..FHANDLE
分母となる入力複素数画像の実部画像 ( type: double )
- hSrc2Im
- Type: fvalgcli..::..FHANDLE
分母となる入力複素数画像の虚部画像 ( type: double )
- hDstRe
- Type: fvalgcli..::..FHANDLE
出力複素数画像の実部画像 ( type: double )
- hDstIm
- Type: fvalgcli..::..FHANDLE
出力複素数画像の虚部画像 ( type: double )
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_IMAGE | 不正な画像ハンドルが渡された |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Examples
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { /// <summary> /// splitted format の複素数画像間の除算. /// </summary> [FvPluginExecute] public void fnFIE_fft2_div_DDtoDD() { int status = (int)f_err.F_ERR_NONE; FHANDLE hsrc1Re = FHANDLE.Zero; // 入力データ1の実部. FHANDLE hsrc1Im = FHANDLE.Zero; // 入力データ1の虚部. FHANDLE hsrc2Re = FHANDLE.Zero; // 入力データ2の実部. FHANDLE hsrc2Im = FHANDLE.Zero; // 入力データ2の虚部. FHANDLE hdstRe = FHANDLE.Zero; // 出力データの実部. FHANDLE hdstIm = FHANDLE.Zero; // 出力データの虚部. try { const int width = 3; const int height = 2; // 領域確保. hsrc1Re = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height); hsrc1Im = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height); hsrc2Re = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height); hsrc2Im = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height); hdstRe = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height); hdstIm = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height); // テストデータの作成. DOUBLE_PTR psrc1Re = api.fnFIE_img_get_adrs(hsrc1Re); DOUBLE_PTR psrc1Im = api.fnFIE_img_get_adrs(hsrc1Im); DOUBLE_PTR psrc2Re = api.fnFIE_img_get_adrs(hsrc2Re); DOUBLE_PTR psrc2Im = api.fnFIE_img_get_adrs(hsrc2Im); var src1Re_step = api.fnFIE_img_get_step(hsrc1Re); var src1Im_step = api.fnFIE_img_get_step(hsrc1Im); var src2Re_step = api.fnFIE_img_get_step(hsrc2Re); var src2Im_step = api.fnFIE_img_get_step(hsrc2Im); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { psrc1Re[x] = (y + 1) * 10 + (x + 1) * 0.1; psrc1Im[x] = (y + 1) * 10 + (x + 1) * 0.2; psrc2Re[x] = (y + 1) * 2 + (x + 1) * 0.1; psrc2Im[x] = (y + 1) * 2 + (x + 1) * 0.2; } psrc1Re += src1Re_step; psrc1Im += src1Im_step; psrc2Re += src2Re_step; psrc2Im += src2Im_step; } // 処理の実行. status = api.fnFIE_fft2_div_DDtoDD(hsrc1Re, hsrc1Im, hsrc2Re, hsrc2Im, hdstRe, hdstIm); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 結果. int errors_Re = 0; int errors_Im = 0; psrc1Re = api.fnFIE_img_get_adrs(hsrc1Re); psrc1Im = api.fnFIE_img_get_adrs(hsrc1Im); psrc2Re = api.fnFIE_img_get_adrs(hsrc2Re); psrc2Im = api.fnFIE_img_get_adrs(hsrc2Im); DOUBLE_PTR pdstRe = api.fnFIE_img_get_adrs(hdstRe); DOUBLE_PTR pdstIm = api.fnFIE_img_get_adrs(hdstIm); var dstRe_step = api.fnFIE_img_get_step(hdstRe); var dstIm_step = api.fnFIE_img_get_step(hdstIm); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { var ans = api.fnFIE_cdiv(FCOMPLEX.init(psrc1Re[x], psrc1Im[x]), FCOMPLEX.init(psrc2Re[x], psrc2Im[x])); if (!(ans.real - defs.DBL_EPS <= pdstRe[x] && pdstRe[x] <= ans.real + defs.DBL_EPS)) { errors_Re += 1; } if (!(ans.image - defs.DBL_EPS <= pdstIm[x] && pdstIm[x] <= ans.image + defs.DBL_EPS)) { errors_Im += 1; } Console.WriteLine("{0},{1}: {2,5:F1} / {3,5:F1} = {4,13:F9} (expected {5,13:F9})", y, x, psrc1Re[x], psrc2Re[x], pdstRe[x], ans.real); Console.WriteLine("{0},{1}: {2,5:F1} / {3,5:F1} = {4,13:F9} (expected {5,13:F9})", y, x, psrc1Im[x], psrc2Im[x], pdstIm[x], ans.image); } psrc1Re += src1Re_step; psrc1Im += src1Im_step; psrc2Re += src2Re_step; psrc2Im += src2Im_step; pdstRe += dstRe_step; pdstIm += dstIm_step; } if (errors_Re > 0 || errors_Im > 0) { Assert.Fail("処理結果に誤りがあります。Re={0}, Im={1}", errors_Re, errors_Im); } } finally { // オブジェクトの開放. hsrc1Re.Dispose(); hsrc1Im.Dispose(); hsrc2Re.Dispose(); hsrc2Im.Dispose(); hdstRe.Dispose(); hdstIm.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Runtime.InteropServices Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE ''' <summary> ''' splitted format の複素数画像間の除算. ''' </summary> <FvPluginExecute> _ Public Sub fnFIE_fft2_div_DDtoDD() Dim status As Integer = CInt(f_err.F_ERR_NONE) ' 入力データ1の実部. Dim hsrc1Re As FHANDLE = FHANDLE.Zero ' 入力データ1の虚部. Dim hsrc1Im As FHANDLE = FHANDLE.Zero ' 入力データ2の実部. Dim hsrc2Re As FHANDLE = FHANDLE.Zero ' 入力データ2の虚部. Dim hsrc2Im As FHANDLE = FHANDLE.Zero ' 出力データの実部. Dim hdstRe As FHANDLE = FHANDLE.Zero ' 出力データの虚部. Dim hdstIm As FHANDLE = FHANDLE.Zero Try Const width As Integer = 3 Const height As Integer = 2 ' 領域確保. hsrc1Re = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height) hsrc1Im = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height) hsrc2Re = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height) hsrc2Im = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height) hdstRe = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height) hdstIm = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 1, width, height) ' テストデータの作成. Dim psrc1Re As DOUBLE_PTR = api.fnFIE_img_get_adrs(hsrc1Re) Dim psrc1Im As DOUBLE_PTR = api.fnFIE_img_get_adrs(hsrc1Im) Dim psrc2Re As DOUBLE_PTR = api.fnFIE_img_get_adrs(hsrc2Re) Dim psrc2Im As DOUBLE_PTR = api.fnFIE_img_get_adrs(hsrc2Im) Dim src1Re_step As SIZE_T = api.fnFIE_img_get_step(hsrc1Re) Dim src1Im_step As SIZE_T = api.fnFIE_img_get_step(hsrc1Im) Dim src2Re_step As SIZE_T = api.fnFIE_img_get_step(hsrc2Re) Dim src2Im_step As SIZE_T = api.fnFIE_img_get_step(hsrc2Im) For y As Integer = 0 To height - 1 For x As Integer = 0 To width - 1 psrc1Re(x) = (y + 1) * 10 + (x + 1) * 0.1 psrc1Im(x) = (y + 1) * 10 + (x + 1) * 0.2 psrc2Re(x) = (y + 1) * 2 + (x + 1) * 0.1 psrc2Im(x) = (y + 1) * 2 + (x + 1) * 0.2 Next psrc1Re += src1Re_step psrc1Im += src1Im_step psrc2Re += src2Re_step psrc2Im += src2Im_step Next ' 処理の実行. status = api.fnFIE_fft2_div_DDtoDD(hsrc1Re, hsrc1Im, hsrc2Re, hsrc2Im, hdstRe, hdstIm) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 結果. Dim errors_Re As Integer = 0 Dim errors_Im As Integer = 0 psrc1Re = api.fnFIE_img_get_adrs(hsrc1Re) psrc1Im = api.fnFIE_img_get_adrs(hsrc1Im) psrc2Re = api.fnFIE_img_get_adrs(hsrc2Re) psrc2Im = api.fnFIE_img_get_adrs(hsrc2Im) Dim pdstRe As DOUBLE_PTR = api.fnFIE_img_get_adrs(hdstRe) Dim pdstIm As DOUBLE_PTR = api.fnFIE_img_get_adrs(hdstIm) Dim dstRe_step As SIZE_T = api.fnFIE_img_get_step(hdstRe) Dim dstIm_step As SIZE_T = api.fnFIE_img_get_step(hdstIm) For y As Integer = 0 To height - 1 For x As Integer = 0 To width - 1 Dim ans As FCOMPLEX = api.fnFIE_cdiv(FCOMPLEX.init(psrc1Re(x), psrc1Im(x)), FCOMPLEX.init(psrc2Re(x), psrc2Im(x))) If Not (ans.real - defs.DBL_EPS <= pdstRe(x) AndAlso pdstRe(x) <= ans.real + defs.DBL_EPS) Then errors_Re += 1 End If If Not (ans.image - defs.DBL_EPS <= pdstIm(x) AndAlso pdstIm(x) <= ans.image + defs.DBL_EPS) Then errors_Im += 1 End If Console.WriteLine("{0},{1}: {2,5:F1} / {3,5:F1} = {4,13:F9} (expected {5,13:F9})", y, x, psrc1Re(x), psrc2Re(x), pdstRe(x), ans.real) Console.WriteLine("{0},{1}: {2,5:F1} / {3,5:F1} = {4,13:F9} (expected {5,13:F9})", y, x, psrc1Im(x), psrc2Im(x), pdstIm(x), ans.image) Next psrc1Re += src1Re_step psrc1Im += src1Im_step psrc2Re += src2Re_step psrc2Im += src2Im_step pdstRe += dstRe_step pdstIm += dstIm_step Next If errors_Re > 0 OrElse errors_Im > 0 Then Assert.Fail("処理結果に誤りがあります。Re={0}, Im={1}", errors_Re, errors_Im) End If Finally ' オブジェクトの開放. hsrc1Re.Dispose() hsrc1Im.Dispose() hsrc2Re.Dispose() hsrc2Im.Dispose() hdstRe.Dispose() hdstIm.Dispose() End Try End Sub End Class |