Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviHistogram : CFviImageParser |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviHistogram Inherits CFviImageParser |
Remarks
このクラスの Execute()()()() メソッドは、 SetParallelNum(Int32) によって設定されたスレッド数に従って、 自動的に処理を並列化します。 マルチコア環境においては、処理を並列化する事によりレーテンシを短縮できる場合があります。 詳しくは、 SetParallelNum(Int32) の説明をご参照ください。
画像ヒストグラムを計測するクラスです。
入力画像のチャネル数が1以上の場合は、指定チャネル のヒストグラムのみを作成します。
計測結果は、Result に格納されます。
結果を格納する前に、画像種別に合わせて必要な要素数に変更されます。
画像種別 | チャネル数 | 要素数 |
---|---|---|
UC8 | 1~16 | 256 |
S16 | 1~16 | 65536 |
US16 | 1~16 | 65536 |
RGB24 | 1 | 256 |
RGB32 | 1 | 256 |
FVIL.ImageType.S16(16ビット符号付き整数) の場合、 ヒストグラムテーブルの最初の位置は、濃度値 System.Int16.MinValue に対応し、 最後の位置は、濃度値 System.Int16.MaxValue に対応しています。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 0 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
- FVIL.ImageType.UC8
- FVIL.ImageType.S16
- FVIL.ImageType.US16
- FVIL.ImageType.RGB24 (x1ch)
- FVIL.ImageType.RGB32 (x1ch)
初期値と範囲:
プロパティ | 初期値 | 範囲 |
---|---|---|
Channel | 0 | 0~(Channel-1) |
Result | CFviHistogramResult の初期値 | CFviHistogramResult のインスタンス |
トピック:
構成:
この機能は、画像のヒストグラム計測を行う本体のクラスとデータ構造クラスで構成されます。
-
本体(クラス)
クラス 内容 CFviHistogram 画像のヒストグラム計測を行うクラスです。 -
データ構造
クラス データID 内容 CFviHistogramResult 1000 ヒストグラム計測結果を格納するオブジェクトです。
クラスの使用方法:
本体のヒストグラム計測クラス(CFviHistogram)は、
計測対象の画像(CFviImage)を要求し、
計測結果を格納するオブジェクト(CFviHistogramResult)を提供します。
実行前に、計測対象の画像を SrcImages[0] に設定する必要があります。
計測対象の画像が複数チャネルを持つ場合は、計測を実行する前にチャネルを指定してください。
チャネルの指定は、 Channel プロパティを使用します。
本体の Execute()()()() メソッドを実行すると、
計測結果を CFviHistogramResult オブジェクトに格納します。
このオブジェクトは Result プロパティから取得できます。
CFviHistogramResult は、
画像オブジェクトの単一のチャネルの計測結果をテーブル形式に格納しています。
ある濃度値の計測結果を取得するには、
CFviHistogramResult の
Item[([( Int32])]) を使用します。
Examples
【処理対象】
【処理結果】
ソースコード:
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 Measure { /// <summary> /// ヒストグラム計測. /// </summary> [FvPluginExecute] public void Histogram() { System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod(); Console.WriteLine("{0}.{1}", method.DeclaringType.FullName, method.Name); // (!) 注: サンプルの為、最大3チャネルに限定します. const uint _CHANNEL_MAX = 3; // 1) インスタンスの準備. FVIL.Measure.CFviHistogram parser = new FVIL.Measure.CFviHistogram(); FVIL.Measure.CFviHistogramResult[] result = { new FVIL.Measure.CFviHistogramResult(), new FVIL.Measure.CFviHistogramResult(), new FVIL.Measure.CFviHistogramResult(), }; FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(); // 2) 処理対象画像の取り込み. FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/floppy_RGB.jpg", src, FVIL.PixelMode.Unpacking); if( !(src.Channel<=_CHANNEL_MAX) ) { Console.WriteLine("Invalid channel num. ({0})", src.Channel); return; } // 3) 処理対象画像の有効性検査. if( FVIL.ErrorCode._SUCCESS != FVIL.Measure.CFviHistogram.CheckValidity( src ) ) return; // 4) 画像処理準備. parser.SrcImages[0] = src; // ※ チャネル毎に処理します. for( int ch=0 ; ch<src.Channel ; ch++ ) { // 5) パラメータ設定. switch( src.ImageType ) { default: Console.WriteLine("Invalid image type. ({0})", src.ImageType); return; case FVIL.ImageType.UC8: result[ch].Resize( 256 ); break; case FVIL.ImageType.S16: case FVIL.ImageType.US16: result[ch].Resize(65535); break; } parser.Result = result[ch]; parser.Channel = (uint)ch; // 6) 画像処理実行. parser.Execute(); } // (!) 注: サンプルの為、UC8 (256色) に限定します. switch( src.ImageType ) { case FVIL.ImageType.UC8: break; default: case FVIL.ImageType.S16: case FVIL.ImageType.US16: Console.WriteLine("[warning] omit to save image."); return; } // E) 確認用. { // 描画色. System.Drawing.Color[] color = { System.Drawing.Color.FromArgb(0xFF, 0x00, 0x00), // R System.Drawing.Color.FromArgb(0x00, 0xFF, 0x00), // G System.Drawing.Color.FromArgb(0x00, 0x00, 0xFF) // B }; // 背景(黒) int horz = 256; int vert = 192; FVIL.Data.CFviImage bg = new FVIL.Data.CFviImage( horz, vert, FVIL.ImageType.UC8, 1 ); Rectangle rect = new Rectangle( 0, 0, horz, vert ); // 画像表示の準備. FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay(); display.Image = bg; display.DisplayRect = rect; // オーバレイの生成. FVIL.GDI.CFviOverlay pOverlay0 = new FVIL.GDI.CFviOverlay(); pOverlay0.Scaling = false; display.Overlays.Add(pOverlay0); // 折れ線. for( int ch=0 ; ch<src.Channel ; ch++ ) { FVIL.GDI.CFviGdiPolyline poly = new FVIL.GDI.CFviGdiPolyline(); poly.Resize(horz); poly.Close = false; // false=開. uint freq_min = result[ch].MinFrequency; uint freq_max = result[ch].MaxFrequency; for( int i=0 ; i<result[ch].Count ; i++ ) { double freq = result[ch][i]; double ratio = freq / freq_max; poly[i] = new FVIL.Data.CFviPoint(i, vert-(vert*ratio)); } poly.Pen.Color = color[ch]; // 追加. pOverlay0.Figures.Add( poly ); } // 保存. FVIL.Data.CFviImage canvas = new FVIL.Data.CFviImage(); display.SaveImage( canvas, display.DisplayRect, 1.0 ); FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Measure.Histogram.png", canvas); } } }; } |
Visual Basic | Copy |
---|---|
' $Revision: 1.3 $ Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli ' FvPluginXXXX attribute requires fvalgcli Namespace SampleCode Public Partial Class Measure ''' <summary> ''' ヒストグラム計測. ''' </summary> <FvPluginExecute()> _ Public Sub Histogram() Dim method As System.Reflection.MethodBase = System.Reflection.MethodBase.GetCurrentMethod() Console.WriteLine("{0}.{1}", method.DeclaringType.FullName, method.Name) ' (!) 注: サンプルの為、最大3チャネルに限定します. Const _CHANNEL_MAX As UInteger = 3 ' 1) インスタンスの準備. Dim parser As New FVIL.Measure.CFviHistogram() Dim result As FVIL.Measure.CFviHistogramResult() = {New FVIL.Measure.CFviHistogramResult(), New FVIL.Measure.CFviHistogramResult(), New FVIL.Measure.CFviHistogramResult()} Dim src As New FVIL.Data.CFviImage() ' 2) 処理対象画像の取り込み. FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/floppy_RGB.jpg", src, FVIL.PixelMode.Unpacking) If Not (src.Channel <= _CHANNEL_MAX) Then Console.WriteLine("Invalid channel num. ({0})", src.Channel) Return End If ' 3) 処理対象画像の有効性検査. If FVIL.ErrorCode._SUCCESS <> FVIL.Measure.CFviHistogram.CheckValidity(src) Then Return End If ' 4) 画像処理準備. parser.SrcImages(0) = src ' ※ チャネル毎に処理します. For ch As Integer = 0 To src.Channel - 1 ' 5) パラメータ設定. Select Case src.ImageType Case FVIL.ImageType.UC8 result(ch).Resize(256) Exit Select Case FVIL.ImageType.S16, FVIL.ImageType.US16 result(ch).Resize(65535) Exit Select Case Else Console.WriteLine("Invalid image type. ({0})", src.ImageType) Return End Select parser.Result = result(ch) parser.Channel = CUInt(ch) ' 6) 画像処理実行. parser.Execute() Next ' (!) 注: サンプルの為、UC8 (256色) に限定します. Select Case src.ImageType Case FVIL.ImageType.UC8 Exit Select Case FVIL.ImageType.US16 Console.WriteLine("[warning] omit to save image.") Return Case FVIL.ImageType.S16 Console.WriteLine("[warning] omit to save image.") Return Case Else Console.WriteLine("[warning] omit to save image.") Return End Select ' E) 確認用. If True Then ' 描画色. ' R ' G ' B Dim color As System.Drawing.Color() = {System.Drawing.Color.FromArgb(&HFF, &H0, &H0), System.Drawing.Color.FromArgb(&H0, &HFF, &H0), System.Drawing.Color.FromArgb(&H0, &H0, &HFF)} ' 背景(黒) Dim horz As Integer = 256 Dim vert As Integer = 192 Dim bg As New FVIL.Data.CFviImage(horz, vert, FVIL.ImageType.UC8, 1) Dim rect As New Rectangle(0, 0, horz, vert) ' 画像表示の準備. Dim display As New FVIL.GDI.CFviDisplay() display.Image = bg display.DisplayRect = rect ' オーバレイの生成. Dim pOverlay0 As New FVIL.GDI.CFviOverlay() pOverlay0.Scaling = False display.Overlays.Add(pOverlay0) ' 折れ線. For ch As Integer = 0 To src.Channel - 1 Dim poly As New FVIL.GDI.CFviGdiPolyline() poly.Resize(horz) poly.Close = False ' false=開. Dim freq_min As UInteger = result(ch).MinFrequency Dim freq_max As UInteger = result(ch).MaxFrequency For i As Integer = 0 To result(ch).Count - 1 Dim freq As Double = result(ch)(i) Dim ratio As Double = freq / freq_max poly(i) = New FVIL.Data.CFviPoint(i, vert - (vert * ratio)) Next poly.Pen.Color = color(ch) ' 追加. pOverlay0.Figures.Add(poly) Next ' 保存. Dim canvas As New FVIL.Data.CFviImage() display.SaveImage(canvas, display.DisplayRect, 1.0) FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Measure.Histogram.png", canvas) End If End Sub End Class End Namespace |