濃度投影クラス
Namespace: FVIL.MeasureAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviProjection : CFviImageParser |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviProjection Inherits CFviImageParser |
Remarks
画像の濃度投影を取得するクラスです。
以下のいずれかのメソッドで処理を実行できます。
入力画像の単一のチャネル(またはカラーコンポーネント)に対して処理します。
Channel で処理対象のチャネルを指定してください。
入力画像が RGB24 または RGB32 の時は、チャネル 0 の RGB カラーコンポーネントを示します。
0,1,2 はそれぞれ R,G,B を示します。
実行結果は Result に設定されたオブジェクトに格納されます。
要素数は実行時に内部で確保されます。
Direction に指定された計測方向と計測範囲によって要素数は異なります。
計測方向が X方向 の場合、計測範囲の高さに設定されます。
計測方向が Y方向 の場合、計測範囲の幅に設定されます。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 0 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
- FVIL.ImageType.UC8
- FVIL.ImageType.S16
- FVIL.ImageType.US16
- FVIL.ImageType.D64
- FVIL.ImageType.RGB24 (x1ch)
- FVIL.ImageType.RGB32 (x1ch)
初期値と範囲:
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
Channel | 0 | 0~(Channel-1) | 処理対象チャネル指標 |
Direction | X | FVIL.Measure.Direction.XFVIL.Measure.Direction.Y | 計測方向 |
Result | CFviProjectionResult の初期値 | CFviProjectionResult のインスタンス | 処理結果格納用オブジェクト |
Examples
下図の2値画像を2値ブローブ解析して得られたリージョンにより処理対象画像の濃度投影を取得する処理です。
処理時間:
ソースコード:
【処理対象】 | 【2値画像】 |
【リージョン】 | |
処理時間:
0.392 msec : FVIL.Blob.CFviBlob 0.089 msec : FVIL.Blob.CFviBlobResult.GetBlobList 0.037 msec : FVIL.Blob.CFviBlobList.SortList 1.663 msec : FVIL.Measure.CFviProjection.Execute
ソースコード:
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace User.SampleCode { public partial class Measure { /// <summary> /// 濃度投影 /// </summary> [FvPluginExecute] public void Projection2() { FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(Defs.TestImageDir + "/key_UC8_M.png"); FVIL.Data.CFviImage bin = new FVIL.Data.CFviImage(Defs.TestImageDir + "/key_BIN_M.png"); FVIL.CFviTimeCounter watch = new FVIL.CFviTimeCounter(); double msec = 0; Dictionary<string, double> times = new Dictionary<string, double>(); #region 2値ブローブ解析. FVIL.Blob.CFviBlobResult result = new FVIL.Blob.CFviBlobResult(); { watch.Start(); FVIL.Blob.CFviBlob parser = new FVIL.Blob.CFviBlob(bin, result); FVIL.Blob.CFviBlobParam param = parser.Param; param.ColorMode = FVIL.Blob.ObjectColor.WhiteFG; parser.Execute(); msec = watch.Stop(); times["FVIL.Blob.CFviBlob"] = msec; } #endregion #region 2値ブローブ解析結果のフィルタリングとソート. FHANDLE hresult = result.Handle; FVIL.Blob.CFviBlobData data = new FVIL.Blob.CFviBlobData(hresult, 0); FVIL.Blob.CFviBlobList bloblist; { { watch.Start(); FVIL.Blob.CFviBlobFilterRange[] filters = new FVIL.Blob.CFviBlobFilterRange[] { new FVIL.Blob.CFviBlobFilterRange(FVIL.Blob.FeatureType.AREA, 100, int.MaxValue) }; bloblist = result.GetBlobList(filters); msec = watch.Stop(); times["FVIL.Blob.CFviBlobResult.GetBlobList"] = msec; } { watch.Start(); bloblist.SortList(FVIL.Blob.FeatureType.RECT1AREA, FVIL.Blob.SortDirect.Descending); msec = watch.Stop(); times["FVIL.Blob.CFviBlobList.SortList"] = msec; } } #endregion #region 画像統計量. { FVIL.Measure.CFviProjectionResult result_x = new FVIL.Measure.CFviProjectionResult(); FVIL.Measure.CFviProjection parser = new FVIL.Measure.CFviProjection(src, 0, FVIL.Measure.Direction.X, result_x); // 計測. watch.Start(); { data.BlobNo = bloblist.Numbers[0]; FVIL.Data.CFviRegion region = data.GetRegion(); parser.Execute(region, FVIL.OriginMode.Image, FVIL.Measure.FeatureType.Rect2, 0.0); } msec = watch.Stop(); times["FVIL.Measure.CFviProjection.Execute"] = msec; // 出力(X 方向) Console.WriteLine( "{0,-5},{1,5},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9}", "No.", "Count", "Sum", "Mean", "Min", "Max", "Sigma", "Var"); for (int i = 0; i < result_x.Count; i++) { FVIL.Statistics stat = result_x[i]; Console.WriteLine( "[{0:000}] {1,5:0},{2,9:0},{3,9:0.000},{4,9:0.000},{5,9:0.000},{6,9:0.000},{7,9:0.000}", i, stat.Count, stat.Sum, stat.Mean, stat.Min, stat.Max, stat.Sigma, stat.Variance); } } #endregion Console.WriteLine(""); foreach (KeyValuePair<string, double> item in times) { Console.WriteLine("{0,9:0.000} msec : {1}", item.Value, item.Key); } } } } |
Visual Basic | Copy |
---|---|
Imports System Imports System.Collections.Generic Imports System.Text Imports fvalgcli Namespace SampleCode Partial Public Class Measure ''' <summary> ''' 濃度投影 ''' </summary> <FvPluginExecute()> _ Public Sub Projection2() Dim src As New FVIL.Data.CFviImage(Defs.TestImageDir + "/key_UC8_M.png") Dim bin As New FVIL.Data.CFviImage(Defs.TestImageDir + "/key_BIN_M.png") Dim watch As New FVIL.CFviTimeCounter() Dim msec As Double = 0 Dim times As New Dictionary(Of String, Double)() '#Region "2値ブローブ解析." Dim result As New FVIL.Blob.CFviBlobResult() If True Then watch.Start() Dim parser As New FVIL.Blob.CFviBlob(bin, result) Dim param As FVIL.Blob.CFviBlobParam = parser.Param param.ColorMode = FVIL.Blob.ObjectColor.WhiteFG parser.Execute() msec = watch.[Stop]() times("FVIL.Blob.CFviBlob") = msec End If '#End Region '#Region "2値ブローブ解析結果のフィルタリングとソート." Dim hresult As FHANDLE = result.Handle Dim data As New FVIL.Blob.CFviBlobData(hresult, 0) Dim bloblist As FVIL.Blob.CFviBlobList If True Then If True Then watch.Start() Dim filters As FVIL.Blob.CFviBlobFilterRange() = New FVIL.Blob.CFviBlobFilterRange() _ {New FVIL.Blob.CFviBlobFilterRange(FVIL.Blob.FeatureType.AREA, 100, Integer.MaxValue)} bloblist = result.GetBlobList(filters) msec = watch.[Stop]() times("FVIL.Blob.CFviBlobResult.GetBlobList") = msec End If If True Then watch.Start() bloblist.SortList(FVIL.Blob.FeatureType.RECT1AREA, FVIL.Blob.SortDirect.Descending) msec = watch.[Stop]() times("FVIL.Blob.CFviBlobList.SortList") = msec End If End If '#End Region '#Region "画像統計量." If True Then Dim result_x As New FVIL.Measure.CFviProjectionResult() Dim parser As New FVIL.Measure.CFviProjection(src, 0, FVIL.Measure.Direction.X, result_x) ' 計測. watch.Start() If True Then data.BlobNo = bloblist.Numbers(0) Dim region As FVIL.Data.CFviRegion = data.GetRegion() parser.Execute(region, FVIL.OriginMode.Image, FVIL.Measure.FeatureType.Rect2, 0.0) End If msec = watch.[Stop]() times("FVIL.Measure.CFviProjection.Execute") = msec ' 出力(X 方向) Console.WriteLine( _ "{0,-5},{1,5},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9}", _ "No.", "Count", "Sum", "Mean", "Min", "Max", "Sigma", "Var") For i As Integer = 0 To result_x.Count - 1 Dim stat As FVIL.Statistics = result_x(i) Console.WriteLine( _ "[{0:000}] {1,5:0},{2,9:0},{3,9:0.000},{4,9:0.000},{5,9:0.000},{6,9:0.000},{7,9:0.000}", _ i, stat.Count, stat.Sum, stat.Mean, stat.Min, stat.Max, stat.Sigma, stat.Variance) Next End If '#End Region Console.WriteLine("") For Each item As KeyValuePair(Of String, Double) In times Console.WriteLine("{0,9:0.000} msec : {1}", item.Value, item.Key) Next End Sub End Class End Namespace |