関数 | |
INT FVALGAPI | fnFIE_lut_convert (const FHANDLE hSrc, FHANDLE hDst, const INT *iaConvertTable, const UINT uiTableSize) |
ルックアップテーブルによる濃度変換フィルタ | |
INT FVALGAPI | fnFIE_lut_convert_ch (const FHANDLE hSrc, FHANDLE hDst, const INT **ppiConvertTable, const UINT uiTableSize) |
ルックアップテーブルによる濃度変換フィルタ(チャネル別) | |
INT FVALGAPI | fnFIE_lut_set_gamma (const UINT uiInImageType, const UINT uiOutImageType, const DOUBLE dGamma, INT **ppiConvertTable, UINT *puiTableSize) |
ガンマ変換用ルックアップテーブルの作成 | |
INT FVALGAPI | fnFIE_gamma_convert (const FHANDLE hSrc, FHANDLE hDst, const DOUBLE dGamma) |
ガンマ変換フィルタ | |
INT FVALGAPI | fnFIE_histogram_equalization (const FHANDLE hsrc, UINT src_bpp, FHANDLE hdst, UINT dst_bpp) |
ヒストグラムの平坦化 | |
INT FVALGAPI | fnFIE_histogram_normalization (const FHANDLE hsrc, UINT src_bpp, FHANDLE hdst, UINT dst_bpp, INT min_thr, INT min_den, INT max_den) |
ヒストグラムの正規化 |
INT FVALGAPI fnFIE_lut_convert | ( | const FHANDLE | hSrc, | |
FHANDLE | hDst, | |||
const INT * | iaConvertTable, | |||
const UINT | uiTableSize | |||
) |
ルックアップテーブルによる濃度変換フィルタ
与えられたルックアップテーブルに基づいて濃度変換を施します。 被処理画像と処理後画像は同一サイズ、かつ同一チャネル数でなければなりません。 ただし画素タイプは、被処理画像と処理後画像で異なっていても構いません。 すべての画素タイプ間で変換が可能です。
この関数は、入力画素の濃度値を 、出力画素の濃度値を
とすると、
という処理を行います。 複数のチャネルがあった場合、全てのチャネルにおいて、同じテーブルを用いて濃度変換を行います。 入力画像がF_IMG_S16形式のときは
が
の値を参照するように内部でオフセットを追加しています。 このときの変換式は
となっています。
この関数は、与えられたテーブルに従って濃度変換をするだけで、サチュレーションやスケーリングは行っていません。 なお濃度テーブルのサイズ( uiTableSize )は、入力画像 hSrc の画素タイプにより決定されます。 下記の条件を満たさない場合は、F_ERR_INVALID_PARAM が返されます。
[in] | hSrc | 被処理画像ハンドル(type: uc8, us16, s16) |
[out] | hDst | 処理後画像ハンドル(type: uc8, us16, s16) |
[in] | iaConvertTable | 濃度テーブル |
[in] | uiTableSize | 濃度テーブルサイズ |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像が渡された もしくは、入出力の画像サイズが違う、など | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_lut_convert_ch | ( | const FHANDLE | hSrc, | |
FHANDLE | hDst, | |||
const INT ** | ppiConvertTable, | |||
const UINT | uiTableSize | |||
) |
ルックアップテーブルによる濃度変換フィルタ(チャネル別)
与えられたルックアップテーブルに基づいて濃度変換を施します。 fnFIE_lut_convert() と本関数の違いは複数チャネルの画像を処理する際に、 fnFIE_lut_convert() では単一のルックアップテーブルしか指定できないのに対し、 本関数ではチャネル毎に指定することが可能な点です。 また、画素タイプが F_IMG_RGBQUAD の画像も処理することが可能です。 処理対象画像が F_IMG_RGBQUAD の場合と、その他の場合で処理可能な条件が 異なるため、それぞれに分けて説明します。
[in] | hSrc | 被処理画像ハンドル(type: uc8, us16, s16, rgbq) |
[out] | hDst | 処理後画像ハンドル(type: uc8, us16, s16, rgbq) |
[in] | ppiConvertTable | 濃度テーブル |
[in] | uiTableSize | 濃度テーブルサイズ |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像が渡された もしくは、入出力の画像サイズが違う、など | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMOY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい。 #include "oal_aloc.h" #include "fie.h" INT main() { FHANDLE hsrc, hdst; INT width = 100, height = 100, channel = 3; INT **table, *tred, *tgreen, *tblue; // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); // 画像を確保します hsrc = fnFIE_img_root_alloc( F_IMG_UC8, channel, width, height ); hdst = fnFIE_img_root_alloc( F_IMG_UC8, channel, width, height ); // ここでhsrcに処理したい画像を読み込みます。 // ルックアップテーブルを確保します。 tred = ( INT * )fnOAL_calloc( UC8_MAX + 1, sizeof( INT ) ); tgreen = ( INT * )fnOAL_calloc( UC8_MAX + 1, sizeof( INT ) ); tblue = ( INT * )fnOAL_calloc( UC8_MAX + 1, sizeof( INT ) ); table = ( INT ** )fnOAL_calloc( channel, sizeof( INT * ) ); table[0] = tred; table[1] = tgreen; table[2] = tblue; // ここでtr, tg, tbにテーブルの値を書き込みます。 // 濃度変換を実施します。 fnFIE_lut_convert_ch( hsrc, hdst, table, UC8_MAX + 1 ); fnFIE_free_object( hsrc ); fnFIE_free_object( hdst ); fnOAL_free( tred ); fnOAL_free( tgreen ); fnOAL_free( tblue ); fnOAL_free( table ); // 終了処理 fnFIE_teardown(); return 0; }
INT FVALGAPI fnFIE_lut_set_gamma | ( | const UINT | uiInImageType, | |
const UINT | uiOutImageType, | |||
const DOUBLE | dGamma, | |||
INT ** | ppiConvertTable, | |||
UINT * | puiTableSize | |||
) |
ガンマ変換用ルックアップテーブルの作成
ユーザが任意に設定したガンマ値で、ルックアップテーブルを生成します。
関数エントリー時、ルックアップテーブルのポインタ *ppiConvertTable は NULL でなければなりません。本関数は必要なテーブルに必要なメモリを 内部で確保し、そのポインタを *ppiConvertTable に代入して返します。 ユーザーはテーブルが不要になった時点で fnOAL_free() にて解放する必要があります。
確保されるテーブルのサイズは uiInImageType にて指定される 入力画像タイプに依存し、下記の通りになります。
・indexが32768以上65535以下の場合は
上式の通り、ガンマ変換をした後に、出力画像型の最大値でスケーリングし、四捨五入しています。
[in] | uiInImageType | 入力画像タイプ(入力値:F_IMG_UC8, F_IMG_US16, F_IMG_S16) |
[in] | uiOutImageType | 出力画像タイプ(入力値:F_IMG_UC8, F_IMG_US16, F_IMG_S16) |
[in] | dGamma | ガンマ値(0 < dGamma) |
[out] | ppiConvertTable | 濃度値テーブル先頭アドレスへのポインタ 関数エントリー時 *ppiConvertTable はNULLでなければなりません。 |
[out] | puiTableSize | 濃度値テーブルサイズ |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ確保に失敗した | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_gamma_convert | ( | const FHANDLE | hSrc, | |
FHANDLE | hDst, | |||
const DOUBLE | dGamma | |||
) |
ガンマ変換フィルタ
与えられたガンマ値を基に被処理画像を濃度値変換し、処理画像へ書き込みます。
上式をガンマ関数と呼び、これで濃度値を変換することをガンマ変換といいます。 入力の濃度値を に正規化して、ガンマ関数で変換し、 出力側に合わせてスケーリングし、四捨五入します。
以下に、変換例を挙げます。
また、入力の濃度値がマイナスの場合は出力は0に固定されます。 被処理画像 hSrc と処理後画像 hDst は同一サイズ、かつ同一チャネル数でなければなりません。 ガンマ値 dGamma は0よりも大きい値を設定する必要があります。
[in] | hSrc | 被処理画像(type: uc8, us16, s16) |
[out] | hDst | 処理後画像(type: uc8, us16, s16) |
[in] | dGamma | ガンマ値(dGamma > 0) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像が渡された もしくは、入出力の画像サイズが違う、など | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_histogram_equalization | ( | const FHANDLE | hsrc, | |
UINT | src_bpp, | |||
FHANDLE | hdst, | |||
UINT | dst_bpp | |||
) |
ヒストグラムの平坦化
本関数は内部で処理対象画像のヒストグラムを作成し、 このヒストグラムが平坦化されるように濃度値を変換します。 なお、濃度値の変換には fnFIE_lut_convert() が利用されています。 処理はチャネル毎に実行されます。
入力画像と出力画像は同じサイズ、チャネル数である必要があります。 画像型は、色深度が条件を満たしていれば、どの組合せでも許可されます。
[in] | hsrc | 入力画像( type : uc8, us16 ) |
[in] | src_bpp | 入力画像の色深度(BPP)
|
[out] | hdst | 出力画像( type : uc8, us16 ) |
[in] | dst_bpp | 出力画像の色深度(BPP)
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_histogram_normalization | ( | const FHANDLE | hsrc, | |
UINT | src_bpp, | |||
FHANDLE | hdst, | |||
UINT | dst_bpp, | |||
INT | min_thr, | |||
INT | min_den, | |||
INT | max_den | |||
) |
ヒストグラムの正規化
本関数は内部で処理対象画像のヒストグラムを作成し、 このヒストグラムが正規化されるように濃度値を変換します。 なお、濃度値の変換には fnFIE_lut_convert() が利用されています。 処理はチャネル毎に実行されます。
ヒストグラムを作成したら、下記の処理を行い、最大濃度値と最小濃度値を決定します。
下図のヒストグラム例では、 min_thr に 200、 min_den に 0、 max_den に 255 を指定して処理を行うと、入力濃度値 87〜199 が出力濃度値にて最小〜最大となるよう正規化されます。
ただし、 min_thr 、 min_den 、 max_den は、以下の条件を満たす必要があります。
[in] | hsrc | 入力画像( type : uc8, us16 ) |
[in] | src_bpp | 入力画像の色深度(BPP)
|
[out] | hdst | 出力画像( type : uc8, us16 ) |
[in] | dst_bpp | 出力画像の色深度(BPP)
|
[in] | min_thr | 入力画像の最小ヒストグラム頻度値( 0以上 ) |
[in] | min_den | 入力画像の最小濃度値 |
[in] | max_den | 入力画像の最大濃度値 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |