点群の極座標変換

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

Syntax

C#
public static List<CFviPoint> Transform(
	IEnumerable<CFviPoint> points,
	CFviPolarTransParam param,
	bool invert
)
Visual Basic
Public Shared Function Transform ( 
	points As IEnumerable(Of CFviPoint),
	param As CFviPolarTransParam,
	invert As Boolean
) As List(Of CFviPoint)

Parameters

points
Type: System.Collections.Generic..::..IEnumerable<(Of <(<'CFviPoint>)>)>
処理対象の点群 (1点以上)
param
Type: FVIL.PolarTrans..::..CFviPolarTransParam
極座標変換パラメータ
invert
Type: System..::..Boolean
変換方向の反転
  • false : 矩形の領域から円形の領域への変換
  • true : 円形の領域から矩形の領域への変換

Return Value

Type: List<(Of <(<'CFviPoint>)>)>
点群の極座標変換(または逆変換)を行い、変換後を点群を返します。

Remarks

変換対象の違いを除けば、CFviPolarTrans と同様です。 詳細については、CFviPolarTrans クラスの解説をご参照ください。

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

エラーコード:

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

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