輝度統計クラス
Namespace: FVIL.MeasureAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviStatisticsEx : CFviImageParser |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviStatisticsEx Inherits CFviImageParser |
Remarks
画像の輝度統計を算出します。
以下のいずれかのメソッドで処理を実行できます。
入力画像の単一のチャネル(またはカラーコンポーネント)に対して処理します。
Channel で処理対象のチャネルを指定してください。
入力画像が RGB24 または RGB32 の時は、チャネル 0 の RGB カラーコンポーネントを示します。
0,1,2 はそれぞれ R,G,B を示します。
実行結果は Result に設定されたオブジェクトに格納されます。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 0 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像種別は以下の通りです。
初期値と範囲:
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
Channel | 0 | 0~(Channel-1) | 処理対象チャネル指標 |
Result | Statistics の初期値 | Statistics のインスタンス | 処理結果格納用オブジェクト |
処理対象画像の有効性検査と有効化:
-
入力画像の有効性検査
このクラスの CheckValidity(CFviImage) 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。 -
入出力画像の整合性検査
このクラスの IsValid()()()() メソッドで入出力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。 -
出力画像の有効化
このクラスでは有効化はサポートしていません。
Validate()()()() または Validate(Int32) メソッドを実行した場合は常に例外を発行します。
Examples
下図の2値画像を2値ブローブ解析して得られたリージョンにより処理対象画像の輝度統計を算出する処理です。
処理時間:
処理結果:
ソースコード:
【処理対象】 | 【2値画像】 |
【リージョン】 | |
処理時間:
0.085 msec : FVIL.Blob.CFviBlob 0.089 msec : FVIL.Blob.CFviBlobResult.GetBlobList 0.007 msec : FVIL.Blob.CFviBlobList.SortList 0.166 msec : FVIL.Measure.CFviStatisticsEx
処理結果:
No. ,Count, Sum, Mean, Min, Max, Sigma, Var [000] 2320, 349602, 150.691, 75.000, 237.000, 23.030, 530.361 [001] 1967, 203810, 103.615, 75.000, 222.000, 16.912, 285.999 [002] 1874, 221519, 118.207, 75.000, 238.000, 19.180, 367.871 [003] 2341, 308658, 131.849, 75.000, 220.000, 24.010, 576.476 [004] 420, 61335, 146.036, 75.000, 236.000, 23.031, 530.430 [005] 428, 63780, 149.019, 75.000, 249.000, 29.004, 841.210 [006] 426, 53726, 126.117, 75.000, 205.000, 17.404, 302.906
ソースコード:
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 StatisticsEx() { 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 画像統計量. 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"); msec = 0; for (int i = 0; i < bloblist.Count; i++) { FVIL.Measure.CFviStatisticsEx parser = new FVIL.Measure.CFviStatisticsEx(src, 0); // 計測. watch.Start(); { data.BlobNo = bloblist.Numbers[i]; FVIL.Data.CFviRegion region = data.GetRegion(); parser.Execute(region, FVIL.OriginMode.Image); } msec += watch.Stop(); FVIL.Statistics stat = parser.Result; 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); } times["FVIL.Measure.CFviStatisticsEx"] = msec; #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 StatisticsEx() 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 "画像統計量." 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") msec = 0 For i As Integer = 0 To bloblist.Count - 1 Dim parser As New FVIL.Measure.CFviStatisticsEx(src, 0) ' 計測. watch.Start() If True Then data.BlobNo = bloblist.Numbers(i) Dim region As FVIL.Data.CFviRegion = data.GetRegion() parser.Execute(region, FVIL.OriginMode.Image) End If msec += watch.[Stop]() Dim stat As FVIL.Statistics = parser.Result 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 times("FVIL.Measure.CFviStatisticsEx") = msec '#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 |
Inheritance Hierarchy
System..::..Object
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Measure..::..CFviStatisticsEx
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Measure..::..CFviStatisticsEx