画像の極座標変換

Namespace: FVIL.PolarTrans
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public static CFviImage Transform(
	CFviImage src,
	CFviPolarTransParam param,
	bool invert,
	bool clearback,
	SamplingMode sampling_mode
)
Visual Basic
Public Shared Function Transform ( 
	src As CFviImage,
	param As CFviPolarTransParam,
	invert As Boolean,
	clearback As Boolean,
	sampling_mode As SamplingMode
) As CFviImage

Parameters

src
Type: FVIL.Data..::..CFviImage
処理対象の画像
※処理可能な条件については CFviPolarTrans の解説をご参照ください。
param
Type: FVIL.PolarTrans..::..CFviPolarTransParam
極座標変換パラメータ
invert
Type: System..::..Boolean
変換方向の反転
  • false : 矩形の領域から円形の領域への変換
  • true : 円形の領域から矩形の領域への変換
clearback
Type: System..::..Boolean
背景の処理方法
座標変換後の領域の外側の画素の処理方法を指定します。
  • true : 0 クリアする
  • false : 処理しない
sampling_mode
Type: FVIL.PolarTrans..::..SamplingMode
濃度補間方法

Return Value

Type: CFviImage
画像の極座標変換(または逆変換)を行い、変換後の画像を返します。
変換後の画像のサイズは、引数の paraminvert の条件に従って有効化されます。 有効化には Validate(1) を使用しています。

Remarks

画像の極座標変換を行います。
詳細については CFviPolarTrans の解説をご参照ください。
内部では、以下の手順で CFviPolarTrans を実行しています。

この関数内部の手順:

  1. 入力画像の有効性を確認します。
    有効性の検査には CheckValidity(CFviImage) を使用しています。
    -
  2. 極座標変換クラスのインスタンスを生成します。 -
  3. 引数に指定されたパラメータをインスタンスに設定します。 -
  4. 極座標変換を実行します。 -

正常に実行できなかった場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。

エラーコード:

ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
11FVIL.ErrorCode.INVALID_PARAMETERパラメータに誤りがあります。
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリの確保に失敗しました。
91FVIL.ErrorCode.INVALID_SRC_IMAGETYPE処理対象画像の画像種別が不正です。

Examples

極座標変換の処理例:
回転するCD−ROMをラインセンサで撮像した画像(下図【入力画像】)を極座標変換して、 元の円形の状態(下図【出力画像】)に復元する処理例を示します。

【入力画像】


【出力画像】

C# Copy imageCopy
//    $Revision: 1.3 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode
{
    public partial class PolarTrans
    {
        // ============================================================
        /// <summary>
        /// 極座標変換クラス.
        /// </summary>
        [FvPluginExecute]
        public void PolarTransClass()
        {
            // 1) インスタンスの準備.
            FVIL.PolarTrans.CFviPolarTrans parser = new FVIL.PolarTrans.CFviPolarTrans();
            FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();
            FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage();

            // 2) 処理対象画像の取り込み.
            FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/disk_left.png", src, FVIL.PixelMode.Unpacking);

            // 3) 処理対象画像の有効性検査.
            int valid = FVIL.PolarTrans.CFviPolarTrans.CheckValidity(src);
            if (valid != FVIL.ErrorCode._SUCCESS)
                throw new FVIL.CFviException(valid, "FVIL.PolarTrans.CFviPolarTrans.CheckValidity");

            // 4) 画像処理準備 (共通)
            parser.SrcImages[0] = src;
            parser.DstImages[0] = dst;

            // 5) パラメータ設定.
            parser.Invert = false;            // false: 矩形→円形.
            parser.ClearBackMode = true;
            parser.SamplingMode = FVIL.PolarTrans.SamplingMode.Bilinear;
            parser.Param.CoordinateMode = FVIL.PolarTrans.CoordinateMode.Left;

            FVIL.PolarTrans.CFviPolarTransParam param = parser.Param;
            param.CoordinateMode = FVIL.PolarTrans.CoordinateMode.Left;
            param.OriginIn = new FVIL.Data.CFviPoint(src.Window.X,src.Window.Y);
            param.Width = src.Window.Width;
            param.Height = src.Window.Height;
            param.OriginOut = new FVIL.Data.CFviPoint(param.Width,param.Width);
            param.Radius = param.Width;
            param.StartAngle = new FVIL.Data.CFviAngle(270.0);
            param.RangeAngle = new FVIL.Data.CFviAngle(360.0);

            // 5-2) 出力画像の有効化.
            parser.Validate(1);    // 有効化.

            // 6) 画像処理実行.
            parser.Execute();

            // E) 処処理結果画像の保存.
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/PolarTrans.PolarTrans.png", dst);
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode
    Public Partial Class PolarTrans
        ' ============================================================
        ''' <summary>
        ''' 極座標変換クラス.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub PolarTransClass()
            ' 1) インスタンスの準備.
            Dim parser As New FVIL.PolarTrans.CFviPolarTrans()
            Dim src As New FVIL.Data.CFviImage()
            Dim dst As New FVIL.Data.CFviImage()

            ' 2) 処理対象画像の取り込み.
            FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/disk_left.png", src, FVIL.PixelMode.Unpacking)

            ' 3) 処理対象画像の有効性検査.
            Dim valid As Integer = FVIL.PolarTrans.CFviPolarTrans.CheckValidity(src)
            If valid <> FVIL.ErrorCode._SUCCESS Then
                Throw New FVIL.CFviException(valid, "FVIL.PolarTrans.CFviPolarTrans.CheckValidity")
            End If

            ' 4) 画像処理準備 (共通)
            parser.SrcImages(0) = src
            parser.DstImages(0) = dst

            ' 5) パラメータ設定.
            parser.Invert = False
            ' false: 矩形→円形.
            parser.ClearBackMode = True
            parser.SamplingMode = FVIL.PolarTrans.SamplingMode.Bilinear
            parser.Param.CoordinateMode = FVIL.PolarTrans.CoordinateMode.Left

            Dim param As FVIL.PolarTrans.CFviPolarTransParam = parser.Param
            param.CoordinateMode = FVIL.PolarTrans.CoordinateMode.Left
            param.OriginIn = New FVIL.Data.CFviPoint(src.Window.X, src.Window.Y)
            param.Width = src.Window.Width
            param.Height = src.Window.Height
            param.OriginOut = New FVIL.Data.CFviPoint(param.Width, param.Width)
            param.Radius = param.Width
            param.StartAngle = New FVIL.Data.CFviAngle(270.0)
            param.RangeAngle = New FVIL.Data.CFviAngle(360.0)

            ' 5-2) 出力画像の有効化.
            parser.Validate(1)
            ' 有効化.
            ' 6) 画像処理実行.
            parser.Execute()

            ' E) 処処理結果画像の保存.
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/PolarTrans.PolarTrans.png", dst)
        End Sub
    End Class
End Namespace

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also