実行
[照度差ステレオ]


関数

INT FVALGAPI fnFIE_ps_curvature (FHANDLE hsrc, FHANDLE hdst, DOUBLE normal_thresh, INT curvature_type)
 曲率画像生成
INT FVALGAPI fnFIE_ps_frankot_chellappa (FHANDLE hsrc, FHANDLE hdst, DOUBLE normal_thresh)
 Frankot-Chellappa法による高さ画像生成
INT FVALGAPI fnFIE_ps_horn_brooks (FHANDLE hsrc, FHANDLE hdst, DOUBLE normal_thresh, INT niter)
 Horn-Brooks法による高さ画像生成
INT FVALGAPI fnFIE_ps_woodham (FHANDLE hsrc, DOUBLE *slant, DOUBLE *tilt, FHANDLE hdst_normal, FHANDLE hdst_albedo)
  [[OSS]] Woodhamによる法線画像生成

関数

INT FVALGAPI fnFIE_ps_curvature ( FHANDLE  hsrc,
FHANDLE  hdst,
DOUBLE  normal_thresh,
INT  curvature_type 
)

曲率画像生成

法線画像から曲率画像を計算します。

引数 hsrc で法線画像を指定します。DOUBLE型3チャネルで、0,1,2チャネルにそれぞれx,y,z方向となる法線画像を入力します。 fnFIE_ps_woodham() で作成した画像が利用出来ます。

引数 curvature_type で曲率の種類を指定します。種類は以下の値にて指定してください。

  • F_CURVATURE_GAUSSIAN

ガウス曲率を計算します。本関数では以下の式に従い計算します。

\[ \textrm{gaussian curvature}=\dfrac {Z_{xx}Z_{yy}-Z_{xy}Z_{yx}}{({Z_x}^2+{Z_y}^2+1)^2} \]

  • F_CURVATURE_MEAN

平均曲率を計算します。本関数では以下の式に従い計算します。

\[ \textrm{mean curvature}=\dfrac {Z_{xx}(1+{Z_y}^2)-Z_{xy}Z_{x}Z_{y}-Z_{yx}Z_{x}Z_{y}+Z_{yy}(1+{Z_x}^2)}{2({Z_x}^2+{Z_y}^2+1)^{\frac {3} {2}}} \]

ここで$ Z=Z(x,y) $は法線画像の(x,y)の位置での高さを意味し、$ Z_{x} $は高さ$ Z $のxに関する偏微分を指します。$ Z_{xy} $は高さのxに関する偏微分を、yに関して偏微分したものを指します。他の記号についても同様です。

引数 normal_thresh は法線画像のZ成分が小さい場合の閾値です。 normal_thresh は法線:$ (n_{x},n_{y},n_{z})$ のZ成分が小さすぎる場合、勾配:$ (Z_{x},Z_{y})=(-\dfrac{n_{x}}{n_{z}},-\dfrac{n_{y}}{n_{z}})$ が計算出来なくなることを防ぐため、$ n_z $ を指定された値に置き換えて計算します。0より大きい数値を入力してください。(推奨値:単位法線ベクトル画像の場合、0.1)

境界部分処理について
画像の周囲1画素については、本関数ではボーダー拡張を行い擬似的に周囲1画素の結果値を出力します。
引数 hdst は出力画像であり、指定された曲率の種類で計算された曲率画像を出力します。DOUBLE型1チャネル画像でなければいけません。

入力画像と出力画像の幅、高さは同じでなければなりません。

引数:
[in] hsrc 入力画像 ( type: double / ch: 3 )
[out] hdst 出力画像(曲率画像) ( type: double / ch: 1 )
[in] normal_thresh 法線のZ成分が小さい場合の閾値
[in] curvature_type 曲率の種類。下記のいずれかを指定。
  • F_CURVATURE_GAUSSIAN ガウス曲率
  • F_CURVATURE_MEAN 平均曲率
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_IMAGE 不正な画像ハンドルが渡された。
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
処理結果例:
fie_ps_sample_code_normal.png

入力法線画像

fie_ps_sample_code_curvature_gaussian.png

出力画像(ガウス曲率)

fie_ps_sample_code_curvature_mean.png

出力画像(平均曲率)

INT FVALGAPI fnFIE_ps_frankot_chellappa ( FHANDLE  hsrc,
FHANDLE  hdst,
DOUBLE  normal_thresh 
)

Frankot-Chellappa法による高さ画像生成

法線画像からFrankot-Chellappa法を用いて高さ画像を計算します。

引数 hsrc で法線画像を指定します。DOUBLE型3chで、0,1,2chにそれぞれx,y,z方向となる法線画像を入力します。 fnFIE_ps_woodham() で作成した法線画像などが利用できます。

引数 normal_thresh は法線画像のZ成分が小さい場合の閾値です。 normal_thresh は法線:$ (n_{x},n_{y},n_{z})$ のZ成分が小さすぎる場合、勾配:$ (Z_{x},Z_{y})=(-\dfrac{n_{x}}{n_{z}},-\dfrac{n_{y}}{n_{z}})$ が計算出来なくなることを防ぐため、$ n_z $ を指定された値に置き換えて計算します。0より大きい数値を入力してください。(推奨値:単位法線ベクトル画像の場合、0.1)

引数 hdst は出力画像であり、Frankot-Chellappa法で計算された高さ画像を出力します。

高さ画像は値が大きいほどカメラに近いことを意味し、撮像した画像中で最も高さが低い箇所を0となるようにした高さを出力します。 高さ画像に出力される数値の単位は入力画像のxやyと同一のサイズである画素となります。 一般には本ライブラリでの座標系 の高さの値と一致しません。

入力画像と出力画像の幅、高さは同じでなければなりません。

法線を得ることが難しいため、高さ画像を得ることも難しい場合があります。例として、本ライブラリ座標系でのxy平面に対して垂直な段差を持つ物体で高さ画像を計算する場合、段差の高さは高さ画像に反映されません。 詳しくは説明:注意 をご覧ください。

引数:
[in] hsrc 入力法線画像 ( type: double / ch: 3 )
[out] hdst 出力高さ画像 ( type: double / ch: 1 )
[in] normal_thresh 法線のZ成分が小さい場合の閾値
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_IMAGE 不正な画像ハンドルが渡された。
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参考文献:
  • Robert T. Frankot, Rama Chellappa(1988), "A Method for Enforcing Integrability in Shape from Shading Algorithms"
処理結果例:
fie_ps_sample_code_normal.png

入力法線画像

fie_ps_sample_code_frankot_chellappa.png

出力画像

INT FVALGAPI fnFIE_ps_horn_brooks ( FHANDLE  hsrc,
FHANDLE  hdst,
DOUBLE  normal_thresh,
INT  niter 
)

Horn-Brooks法による高さ画像生成

法線画像からHorn-Brooks法を用いて高さ画像を計算します。

引数 hsrc で法線画像を指定します。DOUBLE型3chで、0,1,2chにそれぞれx,y,z方向となる法線画像を入力します。 fnFIE_ps_woodham() で作成した法線画像などが利用できます。

引数 normal_thresh は法線画像のZ成分が小さい場合の閾値です。 normal_thresh は法線:$ (n_{x},n_{y},n_{z})$ のZ成分が小さすぎる場合、勾配:$ (Z_{x},Z_{y})=(-\dfrac{n_{x}}{n_{z}},-\dfrac{n_{y}}{n_{z}})$ が計算出来なくなることを防ぐため、$ n_z $ を指定された値に置き換えて計算します。0より大きい数値を入力してください。(推奨値:単位法線ベクトル画像の場合、0.1)

引数niter でHorn-Brooks法のイテレーション数を指定します。0以上の整数を入力してください。

100程度で輪郭強調の効果があります。イテレーション数が多い方が高さは正確になりますが、処理時間も増えます。

引数 hdst は出力画像であり、Horn-Brooks法で計算された高さ画像を出力します。

高さ画像は値が大きいほどカメラに近いことを意味し、撮像した画像中で最も高さが低い箇所を0となるようにした高さを出力します。 高さ画像に出力される数値の単位は入力画像のxやyと同一のサイズである画素となります。 一般には本ライブラリの座標系 での高さの値と一致しません。

入力画像と出力画像の幅、高さは同じでなければなりません。 また、入出力画像の幅、高さはともに3以上である必要があります。

法線を得ることが難しいため、高さ画像を得ることも難しい場合があります。例として、本ライブラリ座標系でのxy平面に対して垂直な段差を持つ物体で高さ画像を計算する場合、段差の高さは高さ画像に反映されません。 詳しくは説明:注意 をご覧ください。

引数:
[in] hsrc 入力法線画像 ( type: double / ch: 3 )
[out] hdst 出力高さ画像 ( type: double / ch: 1 )
[in] normal_thresh 法線のZ成分が小さい場合の閾値
[in] niter イテレーション数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_IMAGE 不正な画像ハンドルが渡された。
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参考文献:
  • K. Ikeuchi(1983), "Constructing a Depth Map from Images"
  • Berthold K.P Horn, Michael J Brooks(1986), "The variational approach to shape from shading"
  • Y. Queau, Jean-Denis Durou, Jean-Francois Aujol(2018), "Normal Integration: A Survey"
処理結果例:
fie_ps_sample_code_normal.png

入力法線画像

fie_ps_sample_code_horn_brooks.png

出力画像(niter=100)

fie_ps_sample_code_horn_brooks_iter10000.png

出力画像(niter=10000)

INT FVALGAPI fnFIE_ps_woodham ( FHANDLE  hsrc,
DOUBLE *  slant,
DOUBLE *  tilt,
FHANDLE  hdst_normal,
FHANDLE  hdst_albedo 
)

[[OSS]] Woodhamによる法線画像生成

Woodham の手法を用いて法線画像を計算します。相異なる光源ベクトルの照明を用いて撮像された画像たちから物体の表面の法線を推定します。本手法では光源ベクトルは3つ以上必要で、光源ベクトルたちは全て同一平面上に存在してはいけません。手法や推奨環境について、詳しくは説明 をご覧ください。 手法の性質上、法線を得ることが難しい場合があります。詳しくは説明:注意 をご覧ください。

slant, tilt光源ベクトル の情報を格納する配列です。入力画像のcチャネルに格納されている画像を撮像した際の光源ベクトルの情報をslant[c],tilt[c]に格納します。slant, tilt の要素の単位は度(°)です。 slanttilt について、直接計測が難しい場合のための補助関数があります。

fnFIE_ps_woodham_calc_light_from_pos()

fnFIE_ps_woodham_calc_light_ring()

入力画像は複数枚撮像した画像を統合し一枚の画像にして入力します。 詳しくはサンプルコード をご覧ください。また各画像での光源は同一の輝度である前提です。

出力画像について、本関数では法線画像とアルベド画像を計算できます。

  • 法線画像は各点について法線ベクトルのノルムが1になるよう正規化され、x成分、y成分、z成分がそれぞれ法線画像の0ch、1ch、2chに格納されます。
  • アルベド画像は入射光輝度について、入力画像の型がF_IMG_UC8型の場合はUC8_MAX,F_IMG_US16型の場合はUS16_MAX,DOUBLE型の場合は1である、としたものが計算されます。

出力画像について、法線画像かアルベド画像で不要なものがある場合NULLを指定出来ます。

入力画像と出力画像は下記の条件を全て満たしていなければいけません。

  • 入力画像の型はF_IMG_UC8,F_IMG_US16,F_IMG_DOUBLEのいずれか
  • 入力画像がF_IMG_DOUBLE型の場合、全ての画素値が0以上
  • 入力画像のチャネル数は3以上16以下
  • 出力画像の型はF_IMG_DOUBLE型
  • 出力画像のチャネル数について、法線画像は3、アルベド画像は1
  • 入力画像の幅と高さは出力画像と等しい

引数:
[in] hsrc 入力画像 ( type: uc8, us16, double )
[in] slant 光源ベクトルの情報であるslantの配列
[in] tilt 光源ベクトルの情報であるtiltの配列
[out] hdst_normal 出力法線画像 ( type: double, / ch: 3 )
[out] hdst_albedo 出力アルベド画像 ( type: double, / ch: 1 )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_IMAGE 不正な画像ハンドルが渡された。
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参考文献:
  • Rober J.Woodham(1980) ,"Photometric method for determining surface orientation from multiple images"
処理結果例:
fie_ps_sample_code_input_00.png

入力画像0チャネル

fie_ps_sample_code_input_01.png

入力画像1チャネル

fie_ps_sample_code_input_02.png

入力画像2チャネル

fie_ps_sample_code_input_03.png

入力画像3チャネル

fie_ps_sample_code_input_04.png

入力画像4チャネル

fie_ps_sample_code_input_05.png

入力画像5チャネル

fie_ps_sample_code_input_06.png

入力画像6チャネル

fie_ps_sample_code_input_07.png

入力画像7チャネル

fie_ps_sample_code_normal.png

出力法線画像


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2