画像間の極座標変換

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

Syntax

C#
public static int fnFIE_polar_trans_img(
	FHANDLE hsrc,
	FHANDLE hdst,
	DPNT_T origin_in,
	double width,
	double height,
	DPNT_T origin_out,
	double radius,
	double start_angle,
	double range_angle,
	f_coord_mode coord_mode,
	bool back_clear,
	f_sampling_mode sampling_mode
)
Visual Basic
Public Shared Function fnFIE_polar_trans_img ( 
	hsrc As FHANDLE,
	hdst As FHANDLE,
	origin_in As DPNT_T,
	width As Double,
	height As Double,
	origin_out As DPNT_T,
	radius As Double,
	start_angle As Double,
	range_angle As Double,
	coord_mode As f_coord_mode,
	back_clear As Boolean,
	sampling_mode As f_sampling_mode
) As Integer

Parameters

hsrc
Type: fvalgcli..::..FHANDLE
入力画像( type : bin, uc8, us16, double )
hdst
Type: fvalgcli..::..FHANDLE
出力画像( type : bin, uc8, us16, double )
origin_in
Type: fvalgcli..::..DPNT_T
入力側での処理対象領域の開始座標
width
Type: System..::..Double
入力側での処理対象領域の幅
height
Type: System..::..Double
入力側での処理対象領域の高さ
origin_out
Type: fvalgcli..::..DPNT_T
出力側での円板の回転中心
radius
Type: System..::..Double
出力側での円板の半径
start_angle
Type: System..::..Double
出力側での処理開始角度
range_angle
Type: System..::..Double
出力側での角度の処理範囲
coord_mode
Type: fvalgcli..::..f_coord_mode
入力側での回転中心位置
  • F_PT_UPPER :処理対象領域の右上座標
  • F_PT_LOWER :処理対象領域の左下座標
  • F_PT_LEFT :処理対象領域の左上座標
  • F_PT_RIGHT :処理対象領域の右下座標
back_clear
Type: System..::..Boolean
出力画像の背景処理方法
  • true : 領域外になる画素は0クリア
  • false : 領域外になる画素は処理しない
sampling_mode
Type: fvalgcli..::..f_sampling_mode
濃度補間法
  • F_SAMPLING_NN :最近傍法により濃度補間を行う
  • F_SAMPLING_BILINEAR :共一次線形補間法により濃度補間を行う
  • F_SAMPLING_CUBIC :三次畳み込み法により濃度補間を行う

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_INVALID_IMAGE画像オブジェクトの異常
F_ERR_INVALID_PARAMパラメータ異常
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>
        /// 画像間の極座標変換.
        /// </summary>
        [FvPluginExecute]
        public void fnFIE_polar_trans_img()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hsrc = FHANDLE.Zero;    // 入力画像.
            FHANDLE hdst = FHANDLE.Zero;    // 出力画像.
            DPNT_T origin_in;                // 入力側での処理対象領域の開始座標.
            double width;                    // 入力側での処理対象領域の幅.
            double height;                    // 入力側での処理対象領域の高さ.
            DPNT_T origin_out;                // 出力側での円板の回転中心.
            double radius;                    // 出力側での円板の半径.
            double start_angle;                // 出力側での処理開始角度.
            double range_angle;                // 出力側での角度の処理範囲.
            f_coord_mode coord_mode;        // 入力側での回転中心位置.
            bool back_clear;                // 出力画像の背景処理方法.
            f_sampling_mode sampling_mode;    // 濃度補間法.

            try
            {
                // 入力画像ファイルのロード.
                api.fnFIE_load_bmp(TestImageDir + "/testdata/lena256.bmp", ref hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8);

                // 入力画像の情報取得.
                int src_width = api.fnFIE_img_get_width(hsrc);
                int src_height = api.fnFIE_img_get_height(hsrc);

                // 出力画像の生成.
                hdst = api.fnFIE_img_root_alloc(api.fnFIE_img_get_type(hsrc),
                                                     api.fnFIE_img_get_channels(hsrc),
                                                     src_width, src_height);
                api.fnFIE_img_clear(hdst, 128);

                // パラメータの設定.
                coord_mode = f_coord_mode.F_PT_UPPER;
                origin_in.x = src_width - 1;
                origin_in.y = 0;

                width = src_width;
                height = src_height;

                origin_out.x = (double)src_width / 2;
                origin_out.y = (double)src_height / 2;

                radius = (double)Math.Min(src_width, src_height) / 2;
                start_angle = 0;
                range_angle = 2.0 * Math.PI;

                back_clear = true;
                sampling_mode = f_sampling_mode.F_SAMPLING_BILINEAR;

                // 処理の実行.
                status = api.fnFIE_polar_trans_img(hsrc, hdst,
                                                            origin_in, width, height,
                                                            origin_out, radius,
                                                            start_angle, range_angle,
                                                            coord_mode, back_clear, sampling_mode);

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

                // 出力画像の保存.
                api.fnFIE_save_png(ResultDir + "/fnFIE_polar_trans_img.png", hdst, -1);

            }
            finally
            {
                // オブジェクトの開放.
                hsrc.Dispose();
                hdst.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

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

Public Partial Class FIE
    ''' <summary>
    ''' 画像間の極座標変換.
    ''' </summary>
    <FvPluginExecute> _
    Public Sub fnFIE_polar_trans_img()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hsrc As FHANDLE = FHANDLE.Zero
        ' 入力画像.
        Dim hdst As FHANDLE = FHANDLE.Zero
        ' 出力画像.
        Dim origin_in As DPNT_T
        ' 入力側での処理対象領域の開始座標.
        Dim width As Double
        ' 入力側での処理対象領域の幅.
        Dim height As Double
        ' 入力側での処理対象領域の高さ.
        Dim origin_out As DPNT_T
        ' 出力側での円板の回転中心.
        Dim radius As Double
        ' 出力側での円板の半径.
        Dim start_angle As Double
        ' 出力側での処理開始角度.
        Dim range_angle As Double
        ' 出力側での角度の処理範囲.
        Dim coord_mode As f_coord_mode
        ' 入力側での回転中心位置.
        Dim back_clear As Boolean
        ' 出力画像の背景処理方法.
        Dim sampling_mode As f_sampling_mode
        ' 濃度補間法.
        Try
            ' 入力画像ファイルのロード.
            api.fnFIE_load_bmp(TestImageDir & "/testdata/lena256.bmp", hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8)

            ' 入力画像の情報取得.
            Dim src_width As Integer = api.fnFIE_img_get_width(hsrc)
            Dim src_height As Integer = api.fnFIE_img_get_height(hsrc)

            ' 出力画像の生成.
            hdst = api.fnFIE_img_root_alloc(api.fnFIE_img_get_type(hsrc), api.fnFIE_img_get_channels(hsrc), src_width, src_height)
            api.fnFIE_img_clear(hdst, 128)

            ' パラメータの設定.
            coord_mode = f_coord_mode.F_PT_UPPER
            origin_in.x = src_width - 1
            origin_in.y = 0

            width = src_width
            height = src_height

            origin_out.x = CDbl(src_width) / 2
            origin_out.y = CDbl(src_height) / 2

            radius = CDbl(Math.Min(src_width, src_height)) / 2
            start_angle = 0
            range_angle = 2.0 * Math.PI

            back_clear = True
            sampling_mode = f_sampling_mode.F_SAMPLING_BILINEAR

            ' 処理の実行.
            status = api.fnFIE_polar_trans_img(hsrc, hdst, origin_in, width, height, origin_out, _
                radius, start_angle, range_angle, coord_mode, back_clear, sampling_mode)

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

            ' 出力画像の保存.

            api.fnFIE_save_png(ResultDir & "/fnFIE_polar_trans_img.png", hdst, -1)
        Finally
            ' オブジェクトの開放.
            hsrc.Dispose()
            hdst.Dispose()
        End Try
    End Sub
End Class

See Also