点群の極座標変換
Namespace: FVIL.PolarTransAssembly: 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 メンバ | 内容 |
---|---|---|
51 | FVIL.ErrorCode.LICENSE_ERROR | ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | パラメータに誤りがあります。 |
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | メモリの確保に失敗しました。 |
Examples
極座標変換の処理例:
回転するCD−ROMをラインセンサで撮像した画像からエッジ検出した点列(下図【入力点列】)を極座標変換して、
元の円形の状態(下図【出力点列】)に復元する処理例を示します。
ここでは、出力点列を視覚的に確認する為、画像の極座標変換を行っていますが、必須ではありません。
【入力点列】
【出力点列】
C# | Copy |
---|---|
// $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 |
---|---|
' $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
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |