WIL説明書(C++)  3.0.0
ヒストグラム計測

この機能は、画像のヒストグラム計測を行う本体のクラスとデータ構造クラスで構成されます。

クラス 内容
CFvHistogram 画像のヒストグラム計測を行うクラスです。
CFvHistogramResult ヒストグラム計測結果を格納するオブジェクトです。

本体のヒストグラム計測クラス(FVCL::Measure::CFvHistogram)は、計測対象の画像(FVCL::Data::CFvImage)と 計測結果を格納するオブジェクト(FVCL::Measure::CFvHistogramResult)を要求します。 これら2つは、実行前にユーザが設定する必要があります。

計測対象の画像が複数チャネルを持つ場合は、計測を実行する前にチャネルを指定してください。 チャネルの指定は、 FVCL::Measure::CFvHistogram::SetChannel メソッドを使用します。

本体の FVCL::Measure::CFvHistogram::Execute を実行すると、 計測結果を FVCL::Measure::CFvHistogramResult のオブジェクトに格納します。 FVCL::Measure::CFvHistogramResult は、画像オブジェクトの単一のチャネルの計測結果をテーブル形式に格納しています。 ある濃度値の計測結果を取得するには、 FVCL::Measure::CFvHistogramResult::GetValue を使用します。

サンプルコード:
【処理対象】 【処理結果】
floppy_RGB.jpg
Measure_Histogram.png
ソースコード:
// $Revision: 1.1 $
void Histogram()
{
// (!) 注: サンプルの為、最大3チャネルに限定します。
const UINT _CHANNEL_MAX = 3;
// 1) インスタンスの準備
FVCL::Measure::CFvHistogramResult result[_CHANNEL_MAX];
// 2) 処理対象画像の取り込み
INT status = FVCL::File::LoadImageFile( _T("floppy_RGB.jpg"), &src );
if( status != FVCL_ErrorCode::_SUCCESS )
{
_tprintf(_T("%s: Failed to load image file. code=%d\n"), __TFUNCTION__, status);
return;
}
if( !(src.GetChannel()<=_CHANNEL_MAX) )
{
_tprintf(_T("%s: Invalid channel num. (%d)\n"), __TFUNCTION__, src.GetChannel());
return;
}
// 3) 処理対象画像の有効性検査
return;
// 4) 画像処理準備
parser.SetSrcImage( 0, &src );
// ※ チャネル毎に処理します。
for( UINT ch=0 ; ch<src.GetChannel() ; ch++ )
{
// 5) パラメータ設定
switch( src.GetImageType() )
{
default:
_tprintf(_T("%s: Invalid image type. (%d)\n"), __TFUNCTION__, src.GetImageType());
return;
result[ch].SetTableSize( 256 );
break;
result[ch].SetTableSize( 65535 );
break;
}
parser.SetResult( &result[ch] );
parser.SetChannel( ch );
// 6) 画像処理実行
if( ! parser.Execute() )
{
_tprintf(_T("%s: Failed to execute. code=%d\n"), __TFUNCTION__, parser.GetErrorCode());
return;
}
}
// (!) 注: サンプルの為、UC8 (256色) に限定します。
switch( src.GetImageType() )
{
break;
default:
_tprintf(_T("%s: [warning] omit to save image.\n"), __TFUNCTION__);
return;
}
// E) 確認用
{
// 描画色
COLORREF color[_CHANNEL_MAX] =
{
RGB(0xFF, 0x00, 0x00), // R
RGB(0x00, 0xFF, 0x00), // G
RGB(0x00, 0x00, 0xFF) // B
};
// 背景(黒)
INT horz = 256;
INT vert = 192;
RECT rect = { 0, 0, horz, vert };
// 画像表示の準備
display.Create( 1 );
display.SetImage( &bg );
display.SetDisplayRect( rect );
// オーバレイの生成
FVCL::GDI::CFvOverlay* pOverlay0 = display.GetOverlay(0);
pOverlay0->SetScaling( false );
// 折れ線
poly.SetSize( horz );
poly.SetClose( false ); // false=開
for( UINT ch=0 ; ch<src.GetChannel() ; ch++ )
{
UINT freq_min, freq_max;
result[ch].GetFrequency( &freq_min, &freq_max );
for( UINT i=0 ; i<result[ch].GetTableSize() ; i++ )
{
DOUBLE freq = result[ch].GetValue(i);
DOUBLE ratio = freq / freq_max;
poly.SetPoint( i, FVCL::Data::CFvPoint(i, vert-(vert*ratio)) );
}
poly.GetPen().SetColor( color[ch] );
// 追加
pOverlay0->DrawFigure( poly );
}
// 保存
display.SaveImage( &canvas, display.GetDisplayRect(), 1.0 );
FVCL::File::SaveImageFile(_T("Measure.Histogram.png"), canvas);
}
}

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2023年11月02日(木) 10時12分56秒 for WIL説明書(C++) by doxygen 1.8.11