全焦点画像生成
[ビジョンツール]


列挙型

enum  f_allinfocus_mode { F_ALLINFOCUS_LOG = 1, F_ALLINFOCUS_DOA = 2 }
 全焦点画像生成の手法 [詳細]

関数

INT FVALGAPI fnFIE_allinfocus (FHANDLE hstack, FHANDLE hdst_allinfocus, FHANDLE hdst_index, INT mode, DOUBLE param1, DOUBLE param2)
 全焦点画像生成

列挙型

全焦点画像生成の手法

全焦点画像生成の手法を決める定数です。

参照:
fnFIE_allinfocus()
列挙型の値:
F_ALLINFOCUS_LOG  LoGフィルタ利用
F_ALLINFOCUS_DOA  DoAフィルタ利用


関数

INT FVALGAPI fnFIE_allinfocus ( FHANDLE  hstack,
FHANDLE  hdst_allinfocus,
FHANDLE  hdst_index,
INT  mode,
DOUBLE  param1,
DOUBLE  param2 
)

全焦点画像生成

画像スタックから全焦点画像を得ます。 カメラのピント位置を変更して撮像された同一被写体を写した複数の画像から、 各画素において、焦点が合っている画像の画素値を採用し全焦点画像を得ます。 各画像の被写体は同じ位置にある必要があります。

引数 hstack で画像スタックを指定します。 画像スタックでないオブジェクトを指定した場合、不正なオブジェクトが渡された、となります。 画像スタックは以下の条件を全て満たすものを指定して下さい。

  • スタックは画像オブジェクトを少なくとも二つ含む。
  • スタック内の画像は、全て型、サイズ、チャネルが同一である。
  • スタック内の画像の画像型はUC8型またはDOUBLE型である。

引数 mode にて全焦点画像を得る手法を指定します。種類は以下の値にて指定してください。

  • F_ALLINFOCUS_LOG

LoGフィルタを利用することで合焦度が高い画素値を選択し、全焦点画像を得ます。

  • F_ALLINFOCUS_DOA

DoAフィルタを利用することで合焦度が高い画素値を選択し、全焦点画像を得ます。

引数 param1mode によって意味が異なります。

  • F_ALLINFOCUS_LOGを選択した場合、内部で利用されるLoGフィルタ( fnFIE_LoG_2Dfilter() )のdsigma の値になります。dsigma が大きいほど平滑化の度合も大きくなります。0.6以上の数値を入力してください。

  • F_ALLINFOCUS_DOAを選択した場合、内部で利用されるDoAフィルタ( fnFIE_DoA_2Dfilter() )のsize_m0 =size_n0 の値を決めるパラメータです。入力値は四捨五入された整数値がsize_m0 の値として処理されます。1以上かつ四捨五入後の値が奇数なるような数値を入力してください。そうでない場合はパラメータ異常となります。推奨値:5

引数 param2mode によって意味が異なります。

  • F_ALLINFOCUS_LOGを選択した場合、無視されます。
  • F_ALLINFOCUS_DOAを選択した場合、内部で利用されるDoAフィルタ( fnFIE_DoA_2Dfilter() )のsize_m1 =size_n1 の値を決めるパラメータです。入力値は四捨五入された整数値がsize_m1 の値として処理されます。1以上かつ四捨五入後の値が奇数なるような数値を入力してください。そうでない場合はパラメータ異常となります。推奨値:3

F_ALLINFOCUS_DOAを選択した場合、フィルタサイズは画像のサイズ以下でなければいけません、 すなわちparam1param2 は四捨五入後の整数値が、どちらも画像の幅、高さ以下の奇数でなければいけません。

またF_ALLINFOCUS_DOAを選択した場合、param1param2 について、四捨五入後の整数値が同じになる値を入力した場合はパラメータ異常となります。

引数 hdst_allinfocus は出力画像であり、指定された手法で計算された全焦点画像を出力します。入力画像スタックに含まれる画像と同じ型、サイズ、チャネルの画像でなければいけません。不要な場合はNULLを指定できます。

引数 hdst_index は出力画像であり、各画素において、出力全焦点画像の画素値として入力画像スタックの何枚目の画像が採用されたのかを出力します。出力画像について、入力画像スタックに含まれる画像と同じサイズで、画像型はDOUBLE型またはUC8、チャネル数は1chの画像でなければいけません。不要な場合はNULLを指定できます。 なお hdst_index がUC8型の場合は飽和処理を行った値が格納されます。

引数 hdst_allinfocushdst_index の両方がNULLの場合は F_ERR_INVALID_IMAGE エラーを返します。

引数:
[in] hstack 入力画像スタック ( type: double, uc8 )
[out] hdst_allinfocus 出力画像(全焦点画像) ( type: double, uc8 )
[out] hdst_index 出力画像(インデックス画像) ( type: double, uc8 / ch: 1 )
[in] mode 全焦点画像を得る手法。下記のいずれかを指定。
  • F_ALLINFOCUS_LOG LoGフィルタを利用した手法
  • F_ALLINFOCUS_DOA DoAフィルタを利用した手法
[in] param1 パラメータ( mode によって意味が異なります )
[in] param2 パラメータ( mode によって意味が異なります )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT 不正なオブジェクトが渡された
F_ERR_INVALID_IMAGE 不正な画像ハンドルが渡された
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
処理結果例:
fie_allinfocus_circuit_board_src_01.png

入力画像スタック(一枚目)

fie_allinfocus_circuit_board_src_02.png

入力画像スタック(二枚目)

fie_allinfocus_circuit_board_dst_LoG.png

出力全焦点画像(LoG版)

使用例
#include "fie.h"
#include "oal_aloc.h"

INT do_allinfocus() {

    // 画像のパス
    const CHAR* file_names[] = {
        "input_img_files/00.bmp",
        "input_img_files/01.bmp"
    };

    INT status = F_ERR_UNKNOWN;

    INT img_num = -1;

    FHANDLE imgstack = NULL;
    FHANDLE hdst_allinfocus = NULL;

    FHANDLE himg_temp = NULL;

    INT width, height;
    INT dst_allinfocus_type;
    INT dst_allinfocus_ch;

    INT width_temp, height_temp;
    INT ch_temp, type_temp;

    INT mode;
    DOUBLE param1, param2;

    INT i;

    img_num = sizeof(file_names) / sizeof(file_names[0]);

    if (img_num < 2) {
        status = F_ERR_INVALID_IMAGE;
        goto EXIT;
    }

    //最初の一枚目の画像読み込み(これを基準にする)
    {
        status = fnFIE_load_img_file(file_names[0], &himg_temp, F_COLOR_IMG_TYPE_UC8);
        if (status != F_ERR_NONE) { goto EXIT; }

        status = fnFIE_img_get_params(himg_temp, &ch_temp, &type_temp, NULL, &width_temp, &height_temp);
        if (status != F_ERR_NONE) { goto EXIT; }

        fnFIE_free_object(himg_temp);
        himg_temp = NULL;

    }

    //入力画像スタック作成
    {
        imgstack = fnFIE_imgstack_alloc(F_IMGSTACK_ROOT_MODE, TRUE);
        if (imgstack == NULL) {
            status = F_ERR_NOMEMORY;
            goto EXIT;
        }

        for (i = 0; i < img_num; i++) {

            status = fnFIE_load_img_file(file_names[i], &himg_temp, F_COLOR_IMG_TYPE_UC8);
            if (status != F_ERR_NONE) { goto EXIT; }

            status = fnFIE_imgstack_push_back(imgstack, himg_temp);
            if (status != F_ERR_NONE) { goto EXIT; }
            fnFIE_free_object(himg_temp);
            himg_temp = NULL;

        }

    }

    //出力画像準備
    {
        width = width_temp;
        height = height_temp;
        dst_allinfocus_ch = ch_temp;
        dst_allinfocus_type = type_temp;

        hdst_allinfocus = fnFIE_img_root_alloc(dst_allinfocus_type, dst_allinfocus_ch, width, height);
        if (hdst_allinfocus == NULL) {
            status = F_ERR_NOMEMORY;
            goto EXIT;
        }

    }

    //全焦点画像生成:mode=LoGの場合
    {
        mode = F_ALLINFOCUS_LOG;
        param1 = 2.0;
        param2 = 0;

        status = fnFIE_allinfocus(imgstack, hdst_allinfocus, NULL, mode, param1, param2);
        if (status != F_ERR_NONE) { goto EXIT; }

        //結果画像保存
        status = fnFIE_save_png("allinfocus_LoG.png", hdst_allinfocus, -1);
        if (status != F_ERR_NONE) { goto EXIT; }
    }

EXIT:
    fnFIE_free_object(imgstack);
    fnFIE_free_object(hdst_allinfocus);
    fnFIE_free_object(himg_temp);

    return status;
}

INT main() {

    INT status = F_ERR_UNKNOWN;

    // FIEライブラリのセットアップ
    fnFIE_setup();

    //全焦点画像生成
    status = do_allinfocus();

    // ライブラリの終了処理
    fnFIE_teardown();

    return status;
}


Documentation copyright © 2009-2026 TOKYO ELECTRON DEVICE LIMITED.
Generated on Tue Mar 24 10:11:00 2026 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2