関数 | |
INT FVALGAPI | fnFIE_img_histogram (FHANDLE hImg, FHANDLE hreg, INT iChaNo, UINT **unppHist, INT *ipHistLen) |
リージョン内の画像ヒストグラム作成 | |
INT FVALGAPI | fnFIE_img_sumpixel (FHANDLE himg, FHANDLE hreg, DOUBLE *sumpixel) |
画像特徴量:輝度値の総和 | |
INT FVALGAPI | fnFIE_img_minpixel (FHANDLE himg, FHANDLE hreg, DOUBLE *minpixel) |
画像特徴量:輝度値の最小値 | |
INT FVALGAPI | fnFIE_img_maxpixel (FHANDLE himg, FHANDLE hreg, DOUBLE *maxpixel) |
画像特徴量:輝度値の最大値 | |
INT FVALGAPI | fnFIE_img_meanpixel (FHANDLE himg, FHANDLE hreg, DOUBLE *meanpixel) |
画像特徴量:輝度値の平均値 | |
INT FVALGAPI | fnFIE_img_sumpixel_square (FHANDLE himg, FHANDLE hreg, DOUBLE *sumpixel2) |
画像特徴量:輝度値の2乗和 | |
INT FVALGAPI | fnFIE_img_sigmapixel (FHANDLE himg, FHANDLE hreg, DOUBLE *sigma) |
画像特徴量:輝度値の標準偏差 | |
INT FVALGAPI | fnFIE_img_pixelmoment1 (FHANDLE himg, FHANDLE hreg, DOUBLE *pixelsumx, DOUBLE *pixelsumy) |
画像特徴量:1次濃淡モーメント | |
INT FVALGAPI | fnFIE_img_pixelmoment2 (FHANDLE himg, FHANDLE hreg, DOUBLE *pixelsumx2, DOUBLE *pixelsumy2, DOUBLE *pixelsumxy) |
画像特徴量:2次濃淡モーメント | |
INT FVALGAPI | fnFIE_img_pixelcenter (FHANDLE himg, FHANDLE hreg, DOUBLE *centerx, DOUBLE *centery) |
画像特徴量:濃淡重心を求めます | |
INT FVALGAPI | fnFIE_img_pixelmoment (FHANDLE himg, FHANDLE hreg, DOUBLE orgnx, DOUBLE orgny, DOUBLE *M10, DOUBLE *M01, DOUBLE *M20, DOUBLE *M02, DOUBLE *M11) |
画像特徴量:指定座標を原点とする濃淡モーメント |
INT FVALGAPI fnFIE_img_histogram | ( | FHANDLE | hImg, | |
FHANDLE | hreg, | |||
INT | iChaNo, | |||
UINT ** | unppHist, | |||
INT * | ipHistLen | |||
) |
リージョン内の画像ヒストグラム作成
リージョン領域内の画像のヒストグラムを作ります。
作成されたヒストグラムは unppHist に出力されますが、 外部でヒストグラム用に確保したメモリのアドレスを *unppHist に指定した場合は、そのメモリに出力します。 逆に、メモリを確保せず *unppHist にNULLを渡した場合は、 関数内部で必要なメモリを確保して、そのアドレスを *unppHist に返します。 この場合は *unppHist に返されたメモリはユーザーが fnOAL_free() で解放しなければいけません。
ヒストグラム *unppHist に必要なメモリ量は、入力画像型によって異なり、それぞれ下記のようになります。
入力画像の型が F_IMG_S16 の場合、Histogramの最初の位置((*unppHist)[0])は 濃度値S16_MIN に対応し、 最後の位置((*unppHist)[65535])は 濃度値S16_MAX に対応しています。
入力画像のチャネル数が1以上の場合は、指定チャネルのヒストグラムのみを作成します。 また、ヒストグラムはUINT型にて作成されるため、入力画像サイズが2^32画素以上の場合には オーバーフローの可能性があります。
[in] | hImg | 入力画像のハンドル (type: uc8, s16, us16) |
[in] | hreg | リージョンのハンドル |
[in] | iChaNo | 処理したいチャネルの番号 |
[out] | unppHist | ヒストグラムのメモリ |
[in,out] | ipHistLen | メモリ確保した場合はそのメモリの量を入力(UINT数単位) メモリ確保しなかった場合は関数内部確保のメモリの量を出力(UINT数単位) |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足で確保に失敗した | |
F_ERR_INVALID_IMAGE | 不正な画像が渡された | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された( hreg が不正 ) | |
F_ERR_INVALID_PARAM | パラメータ不正 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_sumpixel | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | sumpixel | |||
) |
画像特徴量:輝度値の総和
画像と領域の共通部分で、画像の輝度総和を求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | sumpixel | 輝度総和 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_minpixel | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | minpixel | |||
) |
画像特徴量:輝度値の最小値
画像と領域の共通部分で、画像の輝度最小値を求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | minpixel | 輝度最小値 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_maxpixel | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | maxpixel | |||
) |
画像特徴量:輝度値の最大値
画像と領域の共通部分で、画像の輝度最大値を求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | maxpixel | 輝度最大値 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_meanpixel | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | meanpixel | |||
) |
画像特徴量:輝度値の平均値
画像と領域の共通部分で、画像の輝度平均値を求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | meanpixel | 輝度平均値 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
#include <stdio.h> #include "oal_aloc.h" #include "fie.h" /* このサンプルコードは入力画像内の特定部分の平均輝度を計算、その結果をもとに特定部分を白、それ以外を黒とする2値画像を生成します。 入力画像内の平均輝度を測りたい部分に収まるリージョンを作成します。 入力画像のリージョン部分の輝度の平均を求めます。 平均輝度±5の範囲に収まる画素は白、それ以外は黒になるように2値化します。 */ INT fnSMP_fie_img_meanpixel() { INT ret = F_ERR_UNKNOWN; //デフォルトは不明なエラー FHANDLE hsrc = NULL; //処理対象画像用のハンドル FHANDLE hbin = NULL; //2値画像用のハンドル FHANDLE hreg_rect = NULL; //長方形リージョン用のハンドル FHANDLE hreg_circle = NULL; //円形リージョン用のハンドル FHANDLE hreg_ellipse = NULL; //楕円形リージョン用のハンドル DOUBLE meanpixel_ave = 0; //平均輝度 BOX_T reg; //長方形リージョンの4点座標 DPNT_T dpntCenter; //円形リージョンの中心座標 DOUBLE dRadius; //円形リージョンの半径 DPNT_T dpntCenter2; //楕円形リージョンの中心座標 DOUBLE dMajor; //楕円長軸の半径 DOUBLE dMinor; //楕円短軸の半径 DOUBLE dTheta; //楕円回転角(ラジアン) INT width, height; //入力画像サイズ INT channels; //入力画像のチャンネル数 DOUBLE meanpixel; //平均輝度 //入出力ファイル名の設定 CHAR input_name[100] = "input.png"; //処理対象入力ファイル名 CHAR output_name[100] = "output.png"; //出力画像のファイル名 //hreg_rectの4点座標 reg.st.x = 123; reg.st.y = 116; reg.ed.x = 135; reg.ed.y = 124; //円形リージョンの中心座標と半径 dpntCenter.x = 245; dpntCenter.y = 172; dRadius = 6; //楕円形リージョンの中心座標と半径と回転角 dpntCenter2.x = 128; dpntCenter2.y = 243; dMajor = 16; dMinor = 6; dTheta = -PI / 9; // 入力画像の読み込み ret = fnFIE_load_img_file(input_name, &hsrc, F_COLOR_IMG_TYPE_UC8); if (ret != F_ERR_NONE) goto EXIT; //入力画像のサイズ取得 ret = fnFIE_img_get_params(hsrc, &channels, NULL, NULL, &width, &height); if (ret != F_ERR_NONE) goto EXIT; //2値化用 hbin = fnFIE_img_root_alloc(F_IMG_BIN, 1, width, height); if (hbin == NULL) { ret = F_ERR_NOMEMORY; goto EXIT; } //リージョン生成 hreg_rect = fnFIE_create_region_rect(reg.st.x, reg.st.y, reg.ed.x - reg.st.x, reg.ed.y - reg.st.y); if (hreg_rect == NULL) { ret = F_ERR_NOMEMORY; goto EXIT; } hreg_circle = fnFIE_create_region_circle(dpntCenter, dRadius); if (hreg_circle == NULL) { ret = F_ERR_NOMEMORY; goto EXIT; } hreg_ellipse = fnFIE_create_region_ellipse(dpntCenter2, dMajor, dMinor, dTheta); if (hreg_ellipse == NULL) { ret = F_ERR_NOMEMORY; goto EXIT; } //リージョン内の平均輝度を計算 ret = fnFIE_img_meanpixel(hsrc, hreg_rect, &meanpixel); if (ret != F_ERR_NONE) goto EXIT; meanpixel_ave = meanpixel_ave + meanpixel; ret = fnFIE_img_meanpixel(hsrc, hreg_circle, &meanpixel); if (ret != F_ERR_NONE) goto EXIT; meanpixel_ave = meanpixel_ave + meanpixel; ret = fnFIE_img_meanpixel(hsrc, hreg_ellipse, &meanpixel); if (ret != F_ERR_NONE) goto EXIT; meanpixel_ave = meanpixel_ave + meanpixel; meanpixel_ave = meanpixel_ave/3; //平均輝度値の±5の範囲で2値化 ret = fnFIE_band_threshold(hsrc, hbin, meanpixel_ave -5, meanpixel_ave +5); if (ret != F_ERR_NONE) goto EXIT; //結果画像の保存 ret = fnFIE_save_png(output_name, hbin, -1); if (ret != F_ERR_NONE) goto EXIT; EXIT: //メモリの開放 fnFIE_free_object(hsrc); fnFIE_free_object(hbin); fnFIE_free_object(hreg_rect); fnFIE_free_object(hreg_circle); fnFIE_free_object(hreg_ellipse); return ret; } INT main() { INT ret = F_ERR_UNKNOWN; //デフォルトは不明なエラー // FIEライブラリの使用前に必ずコールする必要がある fnFIE_setup(); ret = fnSMP_fie_img_meanpixel(); // 終了処理 fnFIE_teardown(); return ret; }
![]() 入力画像 | ![]() リージョンを白で描画した画像 | ![]() 出力画像 |
INT FVALGAPI fnFIE_img_sumpixel_square | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | sumpixel2 | |||
) |
画像特徴量:輝度値の2乗和
画像と領域の共通部分で、画像の輝度値の2乗和を求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | sumpixel2 | 輝度2乗和 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_sigmapixel | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | sigma | |||
) |
画像特徴量:輝度値の標準偏差
画像と領域の共通部分で、画像の輝度値の標準偏差を求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | sigma | 標準偏差 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_pixelmoment1 | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | pixelsumx, | |||
DOUBLE * | pixelsumy | |||
) |
画像特徴量:1次濃淡モーメント
画像と領域の共通部分で、1次の濃淡モーメントを求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | pixelsumx | X方向1次濃淡モーメント |
[out] | pixelsumy | Y方向1次濃淡モーメント |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_pixelmoment2 | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | pixelsumx2, | |||
DOUBLE * | pixelsumy2, | |||
DOUBLE * | pixelsumxy | |||
) |
画像特徴量:2次濃淡モーメント
画像と領域の共通部分で、2次の濃淡モーメントを求めます。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | pixelsumx2 | X方向2次濃淡モーメント |
[out] | pixelsumy2 | Y方向2次濃淡モーメント |
[out] | pixelsumxy | XY方向濃淡モーメント |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_pixelcenter | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE * | centerx, | |||
DOUBLE * | centery | |||
) |
画像特徴量:濃淡重心を求めます
画像と領域の共通部分の濃淡重心を求めます。 X方向1次濃淡モーメントをpsumx、Y方向1次濃淡モーメントをpsumy、輝度総和をMとすると、 centerx = psumx/M, centery = psumy/M で輝度重心を求めます。 なお、輝度総和が0の時はエラー終了となります。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[out] | centerx | 濃淡重心のX座標 |
[out] | centery | 濃淡重心のY座標 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_img_pixelmoment | ( | FHANDLE | himg, | |
FHANDLE | hreg, | |||
DOUBLE | orgnx, | |||
DOUBLE | orgny, | |||
DOUBLE * | M10, | |||
DOUBLE * | M01, | |||
DOUBLE * | M20, | |||
DOUBLE * | M02, | |||
DOUBLE * | M11 | |||
) |
画像特徴量:指定座標を原点とする濃淡モーメント
画像と領域の共通部分で、指定座標を原点とする1次・2次濃淡モーメントを求めます。 原点として指定する座標の値を変えても画像と領域の共通部分は変わりません。
[in] | himg | 処理対象画像( type: uc8, s16, us16, double ) |
[in] | hreg | 領域 |
[in] | orgnx | 濃淡モーメントを求めるときに原点とするX座標 |
[in] | orgny | 濃淡モーメントを求めるときに原点とするY座標 |
[out] | M10 | X方向1次濃淡モーメント |
[out] | M01 | Y方向1次濃淡モーメント |
[out] | M20 | X方向2次濃淡モーメント |
[out] | M02 | Y方向2次濃淡モーメント |
[out] | M11 | XY方向2次濃淡モーメント |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクト | |
F_ERR_INVALID_OBJECT | 領域が不正なハンドル | |
F_ERR_CALC_IMPOSSIBLE | 計算不能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |