36 共焦点結像とフォーカスバリエーション
本パート(Part VIII)のこの地点までに、先行する5種類の3次元結像技術はそれぞれ幾何学的または光学的な制約を利用して、高さを測定可能な画像量に変換してきた。ステレオビジョンは視差に、構造化光と位相シフト法は位相に、レーザー三角法は変位に、照度差ステレオは輝度に依存する。これらには共通点が1つある。いずれもレンズの被写界深度(depth of field)をできるだけ大きいほど望ましい味方として扱い、測定範囲全体が鮮明であることを望んでいることだ。本章ではその逆を行い、被写界深度が有限であるという「欠点」を測定手段に転換する。レンズは正確に合焦した物体面のみを鮮明に結像するため、光軸に沿って層ごとに走査し、各ピクセルがどの層で最も鮮明になるかを確認すれば、その層のZ位置が当該点の高さとなる。一言で言えば「最も鮮明になるとき、物体はその高さに存在する」ということである。これがフォーカスバリエーション(focus variation、Shape from Focusとも呼ばれる)であり、同じ起源を持ちピンホールで物理的に非合焦光を除去する共焦点顕微鏡(confocal microscopy)である。これらは速度が遅く視野が狭いものの、顕微鏡スケールの形状測定の主力である。表面粗さ、工具の刃先円弧、微小構造の段差高さなどをサブミクロン単位で測定する際には、この一連の手法が利用される。
図 36.1 は本章の出発点であり、同じ段差面を3つの合焦高さで撮影したスライスである。観察すると、合焦面が上昇するにつれて左、中、右の3つの段差が順に鮮明になる一方、図中の常に滑らかでぼやけた領域は、本章後半で詳しく議論する「不感領域」であることがわかる。
36.1 フォーカスバリエーションの原理
チャプター 3 での被写界深度と鮮明度に関する議論を思い出そう。物体点は合焦面付近の被写界深度範囲内にある場合に限り、像面上で鮮明な点に収束する。合焦面からのずれが大きいほど錯乱円は大きくなり、画像はぼやける。これを定量化すると、物体点の高さを\(h\)、合焦面の位置を\(z\)とすると、非合焦量\(|z-h|\)が大きいほど当該点の近傍の高周波の詳細が平滑化される。本章の合成データはまさにこの物理モデルに基づいて作成されている。各スライスでは、10 μmの非合焦ごとに標準偏差\(\sigma=0.4\,\text{px}\)の空間変動ガウスぼかしを各ピクセルに適用し、合焦位置では\(\sigma\to 0\)となってテクスチャが最も鮮鋭になる。
これにより測定の手順が明確になる。光軸方向に一定間隔で一連の画像を取得し、フォーカススタック(focus stack)を構成する。各ピクセルについて層ごとに鮮明度(focus measure)の数値を計算し、\(z\)に沿った鮮明度曲線を得る。曲線のピーク位置に対応する\(z\)が当該ピクセルの高さとなる。
鮮明度演算子は「この近傍がどれほど鮮鋭か」を答えるものであり、本質的に局所的な高周波エネルギーを計測している。これは@sec-edge_detection の勾配演算子と同じ起源を持つ。工学的には2種類が一般的に用いられる。Tenengrad(Sobel勾配の二乗和)と修正ラプラシアン和(sum of modified Laplacian, SML)である。本章の実装では後者を採用している。まず各ピクセルについてx方向とy方向の2階差分の絶対値の和を計算する。
\[ \text{ML}(x,y) = \big|\,2I(x,y) - I(x{-}1,y) - I(x{+}1,y)\,\big| + \big|\,2I(x,y) - I(x,y{-}1) - I(x,y{+}1)\,\big|, \]
通常のラプラシアンのように直接加算するのではなく、絶対値を取ってから加算する理由は、x方向とy方向の曲率が逆符号の場合に互いに打ち消し合うことを避けるためである。次に各ピクセルの周囲\(9\times 9\)の窓内でMLを合計し、当該ピクセルの当該層での鮮明度を得る。窓での合計は重要な手順である。単一ピクセルの2階差分はノイズに非常に敏感であるため、近傍での集約によって鮮明度曲線を「平滑化」し、ピークを安定させる必要がある。
なぜフォーカスバリエーションは外部の校正スケールを必要とせず、スタックに対する相対的な高さのみを測定するのか。それは「この点はカメラからどれほど離れているか」ではなく「この点はどの層で最も鮮明か」を問うているためである。層番号に既知のスライス間隔を乗じたものが物理的な高さとなる。したがってZ軸の精度は完全に走査ステージのステップ精度によって決まり、レンズの横方向のキャリブレーションとは無関係である。これが顕微鏡スケールで容易にサブミクロンの精度を達成できる理由でもある。機械的なステップ量を正確にすることは、結像系全体の幾何を正確にキャリブレーションするよりもはるかに容易である。
図 36.2 はこの鮮明度曲線をプロットしたものである。青色の曲線はテクスチャを持つ鮮明なピクセル(C平坦部、真の高さ100 μm)に由来する。鮮明度は\(z\)に伴って上昇した後に下降し、\(z\approx 100\,\mu\text{m}\)付近で明確な尖鋭なピークを形成する。ピークがある位置が高さとなる。灰色の曲線については@sec-cf-texture で議論する。
36.2 量子化とサブピクセル
「最も鮮明度の高い層」を直接高さとして採用すると、すぐに精度の上限に突き当たる。スライス間隔自体が量子化(quantization)のステップとなるためである。本章のスタックは21層で間隔が10 μmであるため、粗い高さは…、90、100、110…といった10の整数倍(ステージ原点のオフセットとして−7 μmが重畳される)にしかならず、高さの差が10 μm未満の細部はすべて同一層に併合されてしまう。図 36.3 は粗い高さマップをプロットしたものであり、連続的に遷移するはずの斜面部が幅10 μmの等高段丘(terracing)に切断され、等高線地形図のようになっている。これが量子化誤差の形状そのものである。
量子化を突破する方法は、本書で繰り返し登場するサブピクセルトライアドの考え方である(チャプター 14 のエッジ、チャプター 20 のキャリパーでも使用されている)。真のピークはほとんどの場合サンプル点に正確に位置しないが、ピーク付近の曲線の形状に真の位置が隠されている。具体的な手順は、ピーク層\(k_p\)とその左右2つの隣接層の鮮明度\((f_{k_p-1}, f_{k_p}, f_{k_p+1})\)に放物線をフィッティングし、頂点をサブ層のピーク位置とすることである。
\[ \delta = \frac{1}{2}\,\frac{f_{k_p-1} - f_{k_p+1}}{f_{k_p-1} - 2f_{k_p} + f_{k_p+1}}, \qquad h = (k_p + \delta)\cdot \Delta z + z_0, \]
ここで\(\delta\in[-1,1]\)はピーク層に対するサブ層のオフセットであり、\(\Delta z=10\,\mu\text{m}\)はスライス間隔である。この手順により、高さが「10 μmの整数倍」の制約から解放され連続値となる。図 36.4 は微調整後の高さマップであり、段丘が消滅し、斜面部は滑らかな遷移に回復し、3つの平坦部も鮮明になっている。
数値は正直である。3つの平坦な平坦部では、高さのRMS誤差が量子化時の3.000 μmからサブピクセル時の0.342 μmに減少し、8.8倍の改善となった。右側の斜面部では2.933 μmから0.442 μmに減少し、6.6倍の改善となった。段差高さ(3つの平坦部のサブピクセル高さの平均の差)はB−A = 49.935 μm、C−B = 50.044 μm、C−A = 99.980 μmと測定され、真値の50 / 50 / 100 μmとほぼ正確である。サブミクロンの段差測定は、このように10 μmの量子化格子から「補間」によって引き出されるのである。
放物線補間の前提は、ピーク付近の曲線が近似的に対称で2階微分可能であることである。スライスのサンプリングが疎すぎる(ピークが2~3層にしかまたがない)場合や、曲線がノイズでギザギザになっている場合には、この仮定が緩み、\(\delta\)の推定値が歪む。工学的には2つの対策がある。走査時にスライス間隔を密にする(ピークが5層以上にまたがるようにする)、および鮮明度曲線に事前に軽度の平滑化を施してから補間することである。本章の1.5階調の読み出しノイズは、このサブピクセルによるゲインがノイズに耐えうることを確認するために意図的に導入されたものである。ノイズのない清浄な合成データは真の精度を過大評価してしまうためである。
36.3 テクスチャ依存性
フォーカスバリエーションには致命的な前提が1つあり、図 36.2 の灰色の曲線が既にそれを予告している。鮮明度曲線にピークが生まれるためには、まずテクスチャが存在しなければならないことである。鮮明度演算子は局所的な高周波エネルギーが非合焦に伴って減衰する様子を計測している。しかし、あるピクセルの近傍にそもそも高周波の内容がない場合——均一で研磨されたテクスチャのない表面——には、合焦しているかどうかにかかわらず、その鮮明度は低く平坦な定数に近いままとなる。曲線にピークがなければ「ピーク位置 = 高さ」という論理連鎖全体が断絶する。アルゴリズムはノイズの中からランダムに最大値を選んでピークとするしかなく、得られる高さは完全にランダムなものとなる。
図 36.5 は信頼度マスクである。ピークの顕著度(正規化されたピーク高さ)0.5を閾値として、信頼できないピクセルを黒く塗りつぶしている。結果は直感的であり、B平坦部内のテクスチャの乏しい領域が全体的にマスクされている。定量的な対比も同様に明確である。テクスチャの乏しい領域の有効率はわずか18.7%(1232/6600)であるのに対し、通常の花崗岩状の手続き型テクスチャを持つ領域の有効率は100%(14700/14700)に達する。この不感領域は作為的に作られた反例ではなく、同一の立体表面上のテクスチャのない領域に過ぎない。現実には研磨面、鏡面、大面積の平滑な塗装面など、至る所にこのような領域が存在する。
「テクスチャなし → 不適」は本書の3次元部分全体を通じて共通の障壁であり、ただ3つの異なる姿を持って現れるだけである。チャプター 31 のステレオビジョンはテクスチャのない領域で左右の対応を見つけられず、深度マップに穴が開く。チャプター 32 は構造化光の縞模様のテクスチャを能動的に表面に「印刷」することでこの障壁を回避する。本章のフォーカスバリエーションはテクスチャのない領域で鮮明度のピークを得られない。3者の不適となる物理的な機構は異なる(対応の曖昧さ / 受動的テクスチャの欠如 / 減衰させるべき高周波の欠如)が、根本的な原因は同一である。表面にアルゴリズムが「掴む」ための局所構造が存在しないことである。この同型性を覚えておけば、滑らかな表面に遭遇したときに「私のテクスチャはどこから来るのか」と反射的に問うことができるようになる。
対策はステレオビジョンや構造化光と同様に2つしかない。1つは能動的にテクスチャを作り出すこと——構造化照明を投影する、つや消し剤を噴霧する、表面に高周波を「植え付ける」。もう1つは正直に不適を認めること——信頼度の閾値を用いて信頼できない点を除外し、ランダムなピーク位置が下流の測定を汚染しないようにすることである。テクスチャのない領域のゴミのような高さを真として受け入れることは、穴を残すよりもはるかに危険である。
36.4 共焦点における光学的層切り
前節まではすべてフォーカスバリエーションについて述べてきたが、これはアルゴリズムによって事後的にフォーカススタックから鮮明度のピークを探す手法である。真の共焦点(confocal)は光学物理のレベルで同じ問題を解決するものであり、両者は正直に区別されなければならない。本章の実験は前者を行っており、本節で記述する後者には対応するシミュレーションは存在しない。
共焦点の核心は一対の共役ピンホール(conjugate pinhole)である。点光源がピンホールを通して照明され、物体面上の1点に集束する。その点から反射または蛍光によって発せられた光は対物レンズによって集束され、照明用ピンホールと光学的に共役な検出用ピンホールを通過して初めて検出器に到達する。鍵となるのは、合焦面上の点からの光のみが検出用ピンホールに正確に集束してスムーズに通過することである。合焦面の上方または下方からの非合焦光はピンホール面上で錯乱円を形成し、大部分はピンホールによって遮断される。これにより検出器が受け取る信号は、現在合焦している薄い1層からのものにほぼ限定される。これが光学的層切り(optical sectioning)である。点ごとに走査し(点走査共焦点はガルバノミラーまたはスピニングディスクによって視野全体を掃引する)、層ごとに合焦面の高さを変えることで、3次元構造を層ごとに「切り出す」ことができる。
フォーカスバリエーションと比較すると、その違いは一目瞭然である。共焦点はピンホールによって光路内で非合焦光を物理的に除去するため、各層の信号自体に合焦面の情報しか含まれず、軸方向の分解能は光学的な回折限界によって決まり、サブミクロン以上に達することができる。一方フォーカスバリエーションは非合焦光を含む完全な画像からアルゴリズムによって事後的に鮮明度のピークを探すため、非合焦光が常に結像に関与し、精度は鮮明度演算子とテクスチャの品質によって制約される。それぞれに適した用途がある。共焦点は精度が高く層切りが鮮明だが、点走査は遅く装置も高価であり、被測定面が十分な信号を返すことも依然として必要である。フォーカスバリエーションは通常の顕微鏡とZ走査ステージがあれば利用でき、エリアセンサによって1層全体を一度に結像するためはるかに高速であるが、代償として表面のテクスチャに強く依存する。一言で言えば——精度優先なら共焦点、速度優先で表面にテクスチャがあるならフォーカスバリエーションを選ぶのである。
36.5 SciVision実装
特筆に値する点がある。本書の3次元部分で「モジュールが無出力のまま沈黙 / クラッシュ」を繰り返した一連のSDK(位相測定、レーザー三角法、照度差ステレオはいずれも使用不能)の後、SCIMV::SciSv3DFocusは稀な使用可能な事例である——実際に有効な深度マップを返してくれた。手順は2段階である。まずCalGradArrayがフォーカススタックを層ごとに勾配(鮮明度)マップのスタックに計算し、次にCalDepthMapByFocusStackがそれに基づいてSciRangeImage形式の深度マップを出力する。
SCIMV::SciSv3DFocus fo;
SciImageArray grad;
fo.CalGradArray(arr, 21, &grad); // フォーカススタックの層ごとの鮮明度(勾配)マップ、meanSize=21
SciRangeImage depth; SciImage color;
fo.CalDepthMapByFocusStack(arr, grad, 31, 31, // 平滑化窓 31×31
1.0, 1.0, ZSTEP, // x/y分解能、zスライス間隔(μm)
0, false, 1,
&depth, &color);
double z = depth.GetValue(row, col) * depth.ResolutionZ() + depth.OffsetZ();しかし明確な欠点が1つある。深度が最も近いスライスに量子化されており、サブピクセル処理がないことである。サンプル点で検証すると、SDKが出力する高さは10 / 60 / 110といったスライスの整数倍に正確に位置しており、セクション 36.2 のサブ層補間が全く行われていないことがわかる。これは正直かつ稀な有利な対照となる。手書きの放物線補間(サブミクロン)はSDKの10 μm量子化出力を厳密に上回る——SDKがクラッシュしたのではなく、単に「最も近い層を採用する」段階までしか実装されていなかっただけである。したがって本章のコードは2つの足で歩んでいる。SDKによってスタックによる測高の経路が機能することを検証し、次に手書きの鮮明度演算子とピーク補間によって精度をサブミクロンに引き上げている。以下に手書き部分の2つの核心——鮮明度(SMLの窓内合計)とピークの放物線補間——を示す。
// 修正ラプラシアン:x/yの2階差分の絶対値を取ってから加算(逆符号による打ち消しを回避)
float lx = std::fabs(2.0f*I[c] - I[c-1] - I[c+1]);
float ly = std::fabs(2.0f*I[c] - I[c-W] - I[c+W]);
ml[c] = lx + ly; // 9×9の窓内で合計してSML鮮明度を得る
// 放物線の頂点 → サブ層のピーク位置 δ ∈ [-1,1]
double den = a - 2*b + c; // a,b,c = ピーク左/ピーク/ピーク右の3層の鮮明度
if (std::fabs(den) > 1e-9) delta = 0.5*(a - c)/den;
double h = (kp + delta)*ZSTEP + ZBASE; // 連続的な高さ(μm)産業事例:工具刃先の微小測定
超硬合金製フライスの刃先品質は切削寿命を直接決定するため、刃先の円弧半径と欠けをミクロン単位で測定する必要がある。ある生産ラインではフォーカスバリエーションを用いて顕微鏡下で刃先のフォーカススタックを高速に作成し、数秒で高さマップを出力した。このタクトは点ごとの共焦点走査よりもはるかに優れていた。問題は研磨された刃先の裏面で生じた。そこでは表面が平滑で局所的なテクスチャが不足しており、鮮明度曲線が平坦であるため、高さマップにランダムな変動の塊が出現し、本来平滑なはずの刃面に存在しない溝が「測定」されてしまうことであった。対策は2段階に分けられる。1つ目は刃口に構造化照明のビームを照射し、平滑な面に鮮明度演算子が抽出可能な高周波テクスチャを投影することである。2つ目は、それでも信頼できない点を峰の有意度の閾値で除外し、ゴミデータを出力するよりも空値として残すことである。得られた教訓は明確である——フォーカスバリエーションの速度優位性はテクスチャを前提としており、テクスチャのない箇所に遭遇した場合は、テクスチャを作製するか共焦点に切り替えるかのいずれかである。
36.6 小結
本章では「被写界深度の制限」を欠点から高さ測定の手段へと転換した。要点は以下の通りである。
- ピークが高さである。光軸に沿ってフォーカススタックを取得し、各画素について層ごとの鮮明度曲線を算出し、ピーク位置に対応するZが高さとなる。鮮明度演算子(Tenengrad / 改良ラプラシアン)は本質的に局所的な高周波エネルギーの指標であり、エッジ勾配と同じ起源を持つ。
- スライス間隔が量子化ステップである。直接ピーク層を選択すると10 μmの整数倍の階段状の高さしか得られないが、ピーク付近の3層に放物線補間を適用することで層内のピーク位置が得られる。本章の実測では、平坦領域のRMSが3.000 μmから0.342 μm(8.8倍)に低下し、段差測定は49.935 / 50.044 / 99.980 μmの精度で達成された。
- フォーカスバリエーションはテクスチャに強く依存する。テクスチャのない領域の鮮明度曲線は平坦でピークがなく、ピーク位置はノイズによって決定される(テクスチャの乏しい領域の有効率は18.7%であるのに対し、テクスチャのある領域は100%)。これは信頼度閾値で除外するか、能動的にテクスチャを投影して補償する必要がある——これはステレオや構造化光のテクスチャレスでの不適と同じ課題である。
- 共焦点とフォーカスバリエーションは起源を同じくするが経路が異なる。共焦点は共役ピンホールによって光学的に非合焦光を排除して硬い層選別を行うため、精度はサブミクロンであるが遅い。フォーカスバリエーションは事後的にアルゴリズムで鮮明度のピークを探すため、高速であるがテクスチャに依存する。精度優先の場合は前者を、速度優先でテクスチャが存在する場合は後者を選択する。
- 稀な使用可能なSDKの事例。
SciSv3DFocusは有効な深度マップを返すが、最も近いスライスに量子化されサブピクセル処理がない——手書きのピーク補間は明らかに優れており、誠実で好都合な比較対照となっている。
フォーカス法の基礎的な研究はNayarとNakagawaによって提案されたShape from Focusである(Nayar と Nakagawa 1994)。各種の鮮明度(フォーカス測度)演算子の体系的な比較と評価についてはPertuzらの研究を参照されたい(Pertuz, Puig, と Garcia 2013)。フォーカスバリエーションと共焦点に関する体系的な解説(鮮明度演算子の比較、共焦点光学の詳細)については、さらにStegerらの著作を参照できる(Steger, Ulrich, と Wiedemann 2018)。
これをもってパートVIIIの6種類の三次元撮像技術がすべて完了した。ステレオとフォーカスバリエーションはパッシブ/弱アクティブであり、構造化光、レーザー三角測量、照度差ステレオ、位相偏折はアクティブである。レーザー三角測量と構造化光はマクロなミリメートルスケールを対象とし、共焦点はミクロンスケールを専門とする。最初の5種はいずれも拡散反射面を対象とするのに対し、位相偏折のみが鏡面を担当する。この6種の技術のいずれも万能ではない——それぞれに不適となる境界(テクスチャなし、鏡面の相互反射、オクルージョン、非ランバート、透明、速度)が存在し、三次元技術の選定の本質は、まず対象とするワークがどの境界の外側に位置するかを見極めることである。




