画像の極座標変換
Namespace: FVIL.PolarTransAssembly: 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
濃度補間方法- NearestNeighbor : 最近傍法
- Bilinear : 共通一次線形補間法
- Cubic : 三次畳み込み法
Return Value
Type: CFviImage画像の極座標変換(または逆変換)を行い、変換後の画像を返します。
変換後の画像のサイズは、引数の param と invert の条件に従って有効化されます。 有効化には Validate(1) を使用しています。
Remarks
画像の極座標変換を行います。
詳細については CFviPolarTrans の解説をご参照ください。
内部では、以下の手順で CFviPolarTrans を実行しています。
詳細については CFviPolarTrans の解説をご参照ください。
内部では、以下の手順で CFviPolarTrans を実行しています。
この関数内部の手順:
-
入力画像の有効性を確認します。
有効性の検査には CheckValidity(CFviImage) を使用しています。 - - 極座標変換クラスのインスタンスを生成します。 -
- 引数に指定されたパラメータをインスタンスに設定します。 -
- 極座標変換を実行します。 -
正常に実行できなかった場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
51 | FVIL.ErrorCode.LICENSE_ERROR | ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | パラメータに誤りがあります。 |
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | メモリの確保に失敗しました。 |
91 | FVIL.ErrorCode.INVALID_SRC_IMAGETYPE | 処理対象画像の画像種別が不正です。 |
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 | この例外の原因については、上記のエラーコード表をご参照ください。 |