2値ブローブ解析クラス
Namespace: FVIL.BlobAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviBlob : CFviImageParser |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviBlob Inherits CFviImageParser |
Remarks
2値画像データの特徴量を計測するクラスです。
全般的な内容については、ネームスペースの説明 をご参照ください。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 0 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
- 処理範囲の幅と高さが共に 65535 以下である事 -
- 画像種別が FVIL.ImageType.BIN である事 -
- チャネル数が 1 である事 -
初期値と範囲:
プロパティ | 初期値 | 範囲 | 内容 |
---|---|---|---|
Offset | 0,0 | 画像座標(±値) |
解析結果の基準座標値を指定します。 既定では画像の左上(OriginMode で指定された位置)を 0,0 とします。 |
OriginMode | FVIL.OriginMode.Image | OriginMode に定義された定数 |
解析結果が基準とする位置を指定します。 既定では画像の左上を基準(Offset に指定された値)とします。 |
ContinueOption | FVIL.Blob.ContinueOption.None | ContinueOption に定義された定数 |
継続処理を行うか否かを指定します。 既定では false に設定されています。 true を指定すると前回の解析結果に追加します。 |
Param | CFviBlobParam の初期値 | ※インスタンスの差し替えはできません。 | 2値ブローブ解析パラメータです。 |
Result | CFviBlobResult の初期値 | CFviBlobResult のインスタンス |
2値ブローブ解析結果を格納するインスタンスです。 このクラスは多くのメモリを確保しますので、利用後は Dispose することを推奨します。 本体(CFviBlob)を Dispose しても Result に設定されたインスタンスは解放されないことにご注意ください。 |
Examples
下記は、最も基本的な処理例を示します。
前景を白/背景を黒で解析し、
各ブローブの番号・重心・慣性等価楕円をオーバレイ表示します。
処理結果:
ソースコード:
C# | Copy |
---|---|
// $Revision: 1.4 $ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using fvalgcli; // FvPluginXXXX attribute requires fvalgcli namespace User.SampleCode { public partial class Blob { /// <summary> /// 両解析. /// </summary> [FvPluginExecute] public void Measure1() { // 1) インスタンスの準備. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(Defs.TestImageDir + "/blob_BIN.png"); FVIL.Blob.CFviBlobResult result = new FVIL.Blob.CFviBlobResult(); FVIL.Blob.CFviBlob parser = new FVIL.Blob.CFviBlob(src, result); // 2) 処理対象画像の有効性検査. if (FVIL.ErrorCode._SUCCESS != FVIL.Blob.CFviBlob.CheckValidity(src)) return; try { // 3) パラメータ設定. FVIL.Blob.CFviBlobParam param = parser.Param; param.ColorMode = FVIL.Blob.ObjectColor.WhiteFG_BlackBG; // 前景:白/背景:黒. param.MaxBlobs = 0; // 0:上限なし. param.MaxRows = 0; // 0:上限なし. param.MaxRuns = 0; // 0:上限なし. param.Neighborhood = FVIL.Blob.Neighborhood.Eight; // 8近傍. param.PrecalcFeatures = 0; // 4) 画像処理実行. parser.Execute(); // E) 確認用. Measure1_SaveImage(parser); } finally { src.Dispose(); result.Dispose(); parser.Dispose(); } } /// <summary> /// 確認用 /// </summary> private void Measure1_SaveImage(FVIL.Blob.CFviBlob parser) { FVIL.Data.CFviImage src = parser.SrcImages[0]; // 画像表示の準備. FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay(); display.Image = src; display.DisplayRect = src.Window; // オーバレイの生成. FVIL.GDI.CFviOverlay pOverlay0 = new FVIL.GDI.CFviOverlay(); pOverlay0.Scaling = true; display.Overlays.Add(pOverlay0); // 有効ブローブの取得. FVIL.Blob.CFviBlobList list = parser.Result.GetBlobList(); FVIL.Blob.CFviBlobData data = new FVIL.Blob.CFviBlobData(); foreach (object item in list) { data.CopyFrom(item); // 特徴量の取得. FVIL.Data.CFviPoint center = data.Center; // 重心. FVIL.Data.CFviEllipse ellipse = data.EquivalentEllipse; // 慣性等価楕円. System.String strBlobNo = System.String.Format("{0}", data.BlobNo); // ブローブ番号. // 描画用: 重心. FVIL.GDI.CFviGdiPoint _center = new FVIL.GDI.CFviGdiPoint(center); _center.Size = new Size(5, 3); _center.Angle = ellipse.Angle; _center.Pen.Color = Color.FromArgb(0xFF, 0x00, 0x00); // 描画用: 慣性等価楕円. FVIL.GDI.CFviGdiEllipse _ellipse = new FVIL.GDI.CFviGdiEllipse(ellipse); _ellipse.Pen.Color = Color.FromArgb(0x00, 0x00, 0xFF); // 描画用: ブローブ番号. FVIL.GDI.CFviGdiString _blobno = new FVIL.GDI.CFviGdiString(); _blobno.Text = strBlobNo; _blobno.Position = center; _blobno.Align = FVIL.GDI.TextAlign.Left | FVIL.GDI.TextAlign.Top; _blobno.BkMode = FVIL.GDI.BkMode.Transparent; _blobno.Color = Color.FromArgb(0x3F, 0x3F, 0xFF); // 追加. pOverlay0.Figures.Add(_center); pOverlay0.Figures.Add(_ellipse); pOverlay0.Figures.Add(_blobno); } // 保存. using (FVIL.Data.CFviImage canvas = new FVIL.Data.CFviImage()) { display.SaveImage(canvas, display.DisplayRect, 1.0); canvas.Save(Defs.ResultDir + "/Blob.Measure1.png"); } } }; } |
Visual Basic | Copy |
---|---|
' $Revision: 1.2 $ Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli ' FvPluginXXXX attribute requires fvalgcli Namespace SampleCode Public Partial Class Blob ''' <summary> ''' 両解析. ''' </summary> <FvPluginExecute> _ Public Sub Measure1() ' 1) インスタンスの準備. Dim src As New FVIL.Data.CFviImage(Defs.TestImageDir & "\blob_BIN.png") Dim result As New FVIL.Blob.CFviBlobResult() Dim parser As New FVIL.Blob.CFviBlob(src, result) ' 2) 処理対象画像の有効性検査. If FVIL.ErrorCode._SUCCESS <> FVIL.Blob.CFviBlob.CheckValidity(src) Then Return End If Try ' 3) パラメータ設定. Dim param As FVIL.Blob.CFviBlobParam = parser.Param param.ColorMode = FVIL.Blob.ObjectColor.WhiteFG_BlackBG ' 前景:白/背景:黒. param.MaxBlobs = 0 ' 0:上限なし. param.MaxRows = 0 ' 0:上限なし. param.MaxRuns = 0 ' 0:上限なし. param.Neighborhood = FVIL.Blob.Neighborhood.Eight ' 8近傍. param.PrecalcFeatures = 0 ' 4) 画像処理実行. parser.Execute() ' E) 確認用. Measure1_SaveImage(parser) Finally src.Dispose() result.Dispose() parser.Dispose() End Try End Sub ''' <summary> ''' 確認用 ''' </summary> Private Sub Measure1_SaveImage(parser As FVIL.Blob.CFviBlob) Dim src As FVIL.Data.CFviImage = parser.SrcImages(0) ' 画像表示の準備. Dim display As New FVIL.GDI.CFviDisplay() display.Image = src display.DisplayRect = src.Window ' オーバレイの生成. Dim pOverlay0 As New FVIL.GDI.CFviOverlay() pOverlay0.Scaling = True display.Overlays.Add(pOverlay0) ' 有効ブローブの取得. Dim list As FVIL.Blob.CFviBlobList = parser.Result.GetBlobList() Dim data As New FVIL.Blob.CFviBlobData() For Each item As Object In list data.CopyFrom(item) ' 特徴量の取得. Dim center As FVIL.Data.CFviPoint = data.Center ' 重心. Dim ellipse As FVIL.Data.CFviEllipse = data.EquivalentEllipse ' 慣性等価楕円. Dim strBlobNo As System.String = System.[String].Format("{0}", data.BlobNo) ' ブローブ番号. ' 描画用: 重心. Dim _center As New FVIL.GDI.CFviGdiPoint(center) _center.Size = New Size(5, 3) _center.Angle = ellipse.Angle _center.Pen.Color = Color.FromArgb(&Hff, &H0, &H0) ' 描画用: 慣性等価楕円. Dim _ellipse As New FVIL.GDI.CFviGdiEllipse(ellipse) _ellipse.Pen.Color = Color.FromArgb(&H0, &H0, &Hff) ' 描画用: ブローブ番号. Dim _blobno As New FVIL.GDI.CFviGdiString() _blobno.Text = strBlobNo _blobno.Position = center _blobno.Align = FVIL.GDI.TextAlign.Left Or FVIL.GDI.TextAlign.Top _blobno.BkMode = FVIL.GDI.BkMode.Transparent _blobno.Color = Color.FromArgb(&H3f, &H3f, &Hff) ' 追加. pOverlay0.Figures.Add(_center) pOverlay0.Figures.Add(_ellipse) pOverlay0.Figures.Add(_blobno) Next ' 保存. Using canvas As New FVIL.Data.CFviImage() display.SaveImage(canvas, display.DisplayRect, 1.0) canvas.Save(Defs.ResultDir & "/Blob.Measure1.png") End Using End Sub End Class End Namespace |