はじめに
第2章では、レーザーのスペックルのせいでラインの位置そのものが揺らぐことを説明しました。D435 の基準の配置(作動距離 200mm、三角測量角 30°)では、その大きさは列ごとに約 0.09 ピクセル(px)です。
では、実際に画像からラインの中心を求めるときは、どの手法を使えばよいのでしょうか。手法によって、結果はどれくらい変わるのでしょうか。
第3章では、ラインの中心を1画素より細かく求める4つの手法を、シミュレーションで比べます。正解が分かっている画像を使うので、手法の誤差を直接測れます。次の問いに答えます。
- 4つの手法は、それぞれ何をしているのか
- スペックルがなければ、手法の差はどれくらいあるのか
- スペックルがあると、どの手法が第2章の限界に近づけるのか
- ガウス関数の当てはめには、何点の画素が必要なのか
- 線の方向に平均すると、何が変わるのか
- どんな装置なら手法の差が効き、どの手法を選べばよいのか
なお、第2章の次回予告では Steger 法を挙げましたが、検討の結果、実用でよく使われる「傾きの0交差」に替えました。理由は次の節で説明します。
シリーズの構成
| 章 | 内容 | 使うもの |
|---|---|---|
| 第1章 | 光切断法とは:仕組みと三角測量の関係 | 理論 |
| 第2章 | 精度はどこで決まるか:スペックルと開口数 | 理論+シミュレーション |
| 第3章(今回) | ラインの中心をサブピクセルで求める:4つの手法の比較 | シミュレーション |
| 第4章 | 実機編:D435 の赤外線カメラでラインを撮る | 実測 |
| 第5章 | レーザーの面を校正する | 実測 |
| 第6章 | 段差を測る:実測と理論の限界の比較 | 実測 |
| 第7章 | 市販品との差を分解する | 理論+実測 |
| 補足 | 外光とバンドパスフィルタ、高速化 | 実測 |
| 続編(予定) | センサーを傾けたカメラを自作して、市販品にどこまで迫れるか | 実測 |
4つの手法
第1章で説明したとおり、光切断法では画像の列ごとにラインの位置(何行目に写っているか)を求めます。図1 は、1つの列の明るさの分布と、各手法が見ている所を示したものです。

| 手法 | 何をしているか | 使う画素 |
|---|---|---|
| 最大値 | 最も明るい画素の位置を答えにする。画素単位でしか決まらない。比較の基準 | 1画素 |
| 重心 | 窓の中の画素の位置を、明るさで重みを付けて平均する | 窓の中のすべて |
| ガウス(3点) | 山の形がガウス関数だと仮定し、頂上の3画素の明るさから山の頂上を計算する | 3画素 |
| ガウス(当てはめ) | 窓の中の画素に、ガウス関数を最小二乗で当てはめる | 窓の中のすべて |
| 傾きの0交差 | 明るさを平滑化し、傾きが 0 になる位置を山の頂上として求める(図2) | 平滑化の範囲のすべて |
重心は、式で書くと次のようになります。
重心 =(位置 × 明るさ の合計)÷(明るさ の合計)
ガウス関数を使う手法は、使う画素の数が違う2つの版を比べます。3点の版は簡単な式で計算できます。当てはめの版は、山の高さ、中心、幅、背景の明るさの4つを同時に求めるので、計算量は多くなります。
このような手法の比較には、Fisher と Naidu の研究などがあります[1]。この章では、スペックルの入った画像で比べ、第2章の限界と並べます。
重心と傾きの0交差は、実用のソフトウェアでも使われています。たとえば画像処理ライブラリの Open eVision には、ラインの抽出方法として、最大値、傾きの符号が変わる位置を使うピーク検出、重心の3つが用意されています[2]。傾きの0交差と同じ考え方の方法は、Blais と Rioux の検出器としても知られています[3]。
文献では Steger 法もよく使われています[4, 5]。この手法は、まず画像の縦と横の明るさの変化から、その場所で線がどちらを向いているかを求めます。次に、線に垂直な向きに沿って、明るさの頂上を探します。そのため、線が斜めでも曲がっていても使えます。ただし計算量が多く、500×250 の画像で重心の約 0.006 秒に対して約 2.8 秒という報告があります[5]。この連載ではラインがほぼ水平なので、線に垂直な向きは列の方向だと最初から分かっています。線の向きを求める必要がないので、比較には入れていません。
傾きの0交差の仕組み
傾きの0交差は、明るさの山の頂上を次のように探します。
山を左から右へ歩くところを想像してください。頂上までは上り坂で、頂上を過ぎると下り坂です。頂上のちょうど真上では、上りでも下りでもなく、平らになります。そこで、坂が上りから下りに変わる場所を探せば、そこが頂上です。
この坂の急さを傾きと呼びます。その位置で右へ進むと明るくなるならプラス(上り坂)、暗くなるならマイナス(下り坂)で、平らな頂上では 0 です。図2 と次の表は、同じラインの例です(明るさは頂上を 100 にそろえています)。

| 位置(画素) | −2 | −1 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|---|
| 平滑化した明るさ | 58.1 | 83.6 | 98.8 | 95.9 | 76.5 | 50.1 |
| 傾き | +26.9 | +22.2 | +6.8 | −12.3 | −24.8 | −26.1 |
(傾きは、おおよそ「右隣と左隣の明るさの差の半分」です)
手順は次の3つです。
- 平滑化する。 画素の明るさは階段状で、凸凹もあるので、ガウス関数でぼかして、なめらかな山にします(図2(a))。
- 傾きを計算する。 表では、位置 0 の傾きは +6.8(まだ上り坂)、位置 1 の傾きは −12.3(もう下り坂)です。頂上は、位置 0 と 1 の間にあります(図2(b))。
- 2点を直線で結び、傾きが 0 になる位置を求める。 傾きは1画素の間に +6.8 から −12.3 まで下がるので、0 になるのは位置 0 から 6.8 ÷(6.8 + 12.3)≈ 0.36 画素だけ右です。これが求める中心です(図2(c))。この例の本当の中心は 0.35 です。
平滑化には列の中の多くの画素が使われるので、ガウス(3点)のように、少数の画素の凸凹に振り回されにくくなります。平滑化の幅(ガウス関数の σ)は、自分で選びます。
シミュレーションの条件
第2章と同じ方法でスペックルの入った画像を計算し、そこにカメラのノイズを加えます。スペックルの計算方法は、付録で詳しく説明する予定です。
ノイズとは
この連載で「ノイズ」と書くときは、撮るたびに値が変わる、時間的にランダムな誤差を指します。主に次の3つです。
| 成分 | 原因 | 大きさ | 効く場面 |
|---|---|---|---|
| ショットノイズ | 光が粒(光子)として届くので、届く数が毎回ばらつく | 光の粒の数の平方根 | 明るい画素 |
| 読み出しノイズ | センサーの回路の雑音 | 光の量によらず一定 | 暗い画素 |
| 量子化 | 明るさを 8bit(0〜255)の整数に丸める | 1段階の約 0.3倍 | 信号が数段階しかないとき |
信号とノイズの比(S/N)は、信号の大きさをノイズの大きさで割ったものです。S は信号(Signal)、N はノイズ(Noise)の略です。信号の大きさは、1画素に届いた光の粒の数です(正確には、光が変わった電子の数です。量子化はここでは除きます)。
ショットノイズの大きさ = √(信号)
ノイズ全体の大きさ = √(ショットノイズの2乗 + 読み出しノイズの2乗)
S/N = 信号 ÷ ノイズ全体の大きさ
互いに無関係なばらつきを合わせるときは、大きさをそのまま足すのではなく、2乗して足してから平方根をとります。ばらつきの2乗(分散)が足し算になるためです。たとえば信号が 120 で読み出しノイズが 5 なら、次のようになります。
- ショットノイズ = √120 ≈ 11
- ノイズ全体 = √(11² + 5²) ≈ 12
- S/N = 120 ÷ 12 = 10
| 信号(光の粒の数) | ショットノイズ | 読み出しノイズ | ノイズ全体 | S/N |
|---|---|---|---|---|
| 約 120 | 11 | 5 | 12 | 10 |
| 約 920 | 30 | 5 | 31 | 30 |
| 約1万 | 100 | 5 | 100 | 100 |
明るくなるほど読み出しノイズは効かなくなり、S/N はショットノイズだけで決まります(S/N ≈ √(信号))。光の量を4倍にしても、S/N は2倍にしかなりません。
D435 のセンサーについて、1画素にためられる光の量や読み出しノイズの値は、公開情報では見つけられませんでした。そこで S/N を1つに決めず、10、30、100 と変えて比べます。ここでの S/N は、ラインの山の明るさ(スペックルを平均した値)での値です。
条件
| 項目 | 値 |
|---|---|
| 光学系 | D435 相当(NA 約 0.0024、物の上での1画素 約 0.47mm、波長 650nm、C = 1) |
| ラインの太さ | 2、4、8 画素(明るさが山の約 14% になる幅。第2章と同じ) |
| カメラ | 読み出しノイズ 5電子(仮定)、8bit、ラインの山を 128 段階に合わせる |
| 重心の窓 | 明るさの山を中心に、± ラインの太さ |
| ガウス(当てはめ)の窓 | 重心と同じ(太さ 2 画素のときは 5 点、4 画素で 9 点、8 画素で 17 点) |
| 傾きの0交差の平滑化 | σ = ラインの太さの半分 |
| 誤差の測り方 | 本当の中心とのずれの RMS(2乗平均の平方根)。スペックルありは約 1000 列 |
スペックルがない場合:手法の癖
まず、スペックルがない場合を見ます。図3 は、スペックルもノイズもない画像で、本当の中心を画素の中で動かしたときの、求めた中心のずれです。

- 最大値は、本当の中心が画素のどこにあっても同じ画素を答えるので、ずれは ±0.5px まであります。RMS は 0.29px(1/√12)です。
- 太さ 4 画素では、重心とガウスの2つの版のずれは、ほぼ 0 です。太さ 2 画素でも、重心は ±0.002px、ガウスは ±0.005px 程度と、とても小さくなります。
- 傾きの0交差には、太さ 2 画素で ±0.02px、4 画素で ±0.01px のずれが残ります。傾きの曲線を、2点の間で直線とみなすためです(図2(c))。
- 太さ 1 画素では、最大値以外のどの手法にもS字のずれが出ます(重心と傾きの0交差は ±0.09px、ガウスは ±0.045px)。ラインが細すぎて、山の形を画素で十分に表せないためです。重心と傾きの0交差では、求めた中心が画素の中心に引き寄せられます。これを画素への張り付きと呼びます。ガウスでは逆に遠ざかります。ガウス(当てはめ)は、画素の境界付近で不安定にもなります。光が入っている画素が2〜3個しかないのに、4つの値を求めようとするためです。
次に、カメラのノイズを加えます。

| 太さ | S/N | 最大値 | 重心 | ガウス(3点) | ガウス(当てはめ) | 傾きの0交差 |
|---|---|---|---|---|---|---|
| 2 画素 | 30 | 0.29 | 0.019 | 0.018 | 0.018 | 0.022 |
| 2 画素 | 10 | 0.30 | 0.078 | 0.067 | 0.144 | 0.063 |
| 4 画素 | 30 | 0.29 | 0.025 | 0.041 | 0.027 | 0.024 |
| 4 画素 | 10 | 0.33 | 0.107 | 0.126 | 0.088 | 0.085 |
| 8 画素 | 30 | 0.35 | 0.036 | 0.141 | 0.038 | 0.033 |
| 8 画素 | 10 | 0.55 | 0.144 | 0.384 | 0.117 | 0.114 |
(スペックルなし、誤差の RMS、単位 px)
- S/N 30 なら、最大値と太いラインのガウス(3点)を除いて、誤差は 0.02〜0.04px です。 第2章の限界(約 0.09px)より十分小さい値です。
- ガウス(3点)は、太いラインで悪くなります。 山の頂上付近が平らになり、3画素の明るさの差がノイズに埋もれるためです。
- ノイズが大きいと、傾きの0交差は重心より良くなります(S/N 10、太さ 4 画素で 0.085px に対して重心は 0.107px)。太さ 4 画素以上では、ガウス(当てはめ)も重心より良くなります。重心では、中心から遠い暗い画素のノイズも、距離に比例して大きく効くためです。
- 点が少なすぎると、当てはめは不安定です。 太さ 2 画素、S/N 10 では、5点で4つの値を求めるので、3点の版より悪くなります(0.144px に対して 0.067px)。
- 重心の誤差は、おおよそ次の式で表せました(S/N 20〜100、シミュレーションの結果から)。
重心のノイズによる誤差(px)≈ 0.4 × √ラインの太さ(画素)÷ S/N
スペックルがある場合:差はスペックルへの強さで決まる
図4 は、手法ごとに誤差の内訳を並べたものです。
- ① スペックルだけのときの誤差
- ② カメラのノイズだけのときの誤差
- ③ 両方あるときの誤差(実際に起きる誤差)

図4 から、次のことが分かります。
- どの手法でも、③は①にほぼ重なります。 S/N 30 なら、ノイズはほとんど効かず、誤差はスペックルで決まっています。
- 重心が最も良く、太さ 2 画素で約 0.10px です。 これは第2章の式の値(0.092px)に近い値です。高さに直すと約 90µm です(基準の配置では 1px が高さ約 0.94mm に当たります)。
- 手法の差は、ノイズへの強さではなく、スペックルへの強さで出ます。 ガウス(3点)は太さ 4 画素で、ノイズだけなら 0.041px なのに、スペックルがあると 0.29px に増えます。頂上の3画素しか見ないので、スペックルによる明るさの凸凹を、そのまま山の形だと受け取ってしまうためです(図1 の下段)。
- ラインが太いほど悪くなります。 重心でも、太さ 2、4、8 画素で約 0.10、0.12、0.17px です。第2章の図2 と同じ傾向です。重心では中心から遠い画素のむらほど大きく効くので、遠くの画素まで光が届く太いラインは不利になります。むらが画素ごとに独立だと仮定して見積もると、誤差は太さの平方根にほぼ比例し、太さ 2、4、8 画素で 0.094、0.125、0.173px となります(シミュレーションでは 0.096、0.115、0.160px)。
ガウスの点数はどこまで増やせばよいか
ガウス(3点)が弱いのは、ガウス関数を使うからではなく、3点しか使わないからです。当てはめに使う点数を変えて比べました。

| 太さ | 条件 | 3点 | 少なめ | ± ラインの太さ | 多め |
|---|---|---|---|---|---|
| 4 画素 | スペックルのみ | 0.284 | 0.213(5点) | 0.187(9点) | 0.182(13点) |
| 4 画素 | ノイズのみ S/N 30 | 0.041 | 0.027(5点) | 0.027(9点) | 0.027(13点) |
| 8 画素 | スペックルのみ | 0.735 | 0.315(9点) | 0.274(17点) | 0.270(25点) |
| 8 画素 | ノイズのみ S/N 30 | 0.142 | 0.038(9点) | 0.037(17点) | 0.037(25点) |
(誤差の RMS、単位 px。3点の欄は簡単な式の版、それ以外は最小二乗の当てはめ)
点数を増やすと大きく改善し、窓を ± ラインの太さ(太さの2倍+1点)にしたあたりで頭打ちになります。 太さ 8 画素のスペックルのみでは、0.74px から 0.27px まで下がります。
それでも、スペックルがあると、太さ 4 画素以上では当てはめの誤差は重心の約 1.6〜1.7 倍です(太さ 2 画素では約 1.3 倍。図4)。これは点数を増やしても埋まりません。スペックルのむらは明るい画素ほど大きいのに、最小二乗の当てはめは、すべての画素を同じ重みで扱うためです。むらが画素ごとに独立で明るさに比例すると仮定して計算すると、当てはめの誤差は重心の √(2√2) ≈ 1.68 倍になり、シミュレーションとよく合います。
線の方向に平均すると
ここまでは、列ごとに独立に中心を求めてきました。隣の列の情報も使って、線の方向に平均すると何が起きるでしょうか。図5 は、すべての手法に同じ平滑化(線の方向だけのガウス平滑化)を前処理としてかけた結果です。

平滑化の幅 σ = 1 画素で、誤差はほぼ半分になります。 重心では、太さ 2 画素で 0.097px から 0.054px に、太さ 4 画素で 0.115px から 0.067px に下がりました。高さに直すと、太さ 2 画素で約 51µm です。手法の順位は、ほぼ変わりません。
第2章では「画像処理をどれだけ工夫しても、この揺らぎより細かくは測れません」と書きました。これは、列ごとに独立に中心を求める場合の話です。線の方向に平均すれば、第2章の値を下回れます。ただし、タダではありません。隣の列の情報を混ぜるので、線の方向の細かい形がつぶれます。σ = 1 画素で、線の方向の分解能の目安は約 1.1mm です。精度の限界がなくなったのではなく、線の方向の分解能と引き換えにしています。
もう1つ注意があります。手法を比べるときは、線の方向の平均の有無をそろえる必要があります。Steger 法のように画像を縦と横の両方に平滑化する手法では、線の方向にも平均していることになります。そのまま比べると、手法の差と平均の効果を取り違えます。
どんな条件なら手法の差が効くのか
ここまでの結論は、D435 の条件での話です。どちらの誤差が支配的かは、装置によって変わります。
2つの誤差は、それぞれ別のもので決まります。
スペックルによる誤差(px)≈ C × 波長 × F値 ÷(π × 画素の大きさ)
ノイズによる誤差(px)≈ 0.4 × √ラインの太さ(画素)÷ S/N(重心の場合)
スペックルによる誤差は、レンズの F値、画素の大きさ、光の波のそろい方で決まります。ノイズによる誤差を決める S/N は、1画素に届く光の量と、センサーの性能で決まります。光の量を決めるのは、レーザーの出力、表面の反射率、レンズの F値(F値の2乗に反比例)、画素の大きさ(面積に比例)、露光時間です。面の明るさが同じなら、作動距離を変えても、1画素に届く光の量はほとんど変わりません。

図6 のように、S/N を上げるとノイズによる誤差は下がりますが、スペックルによる誤差は変わりません。そのため、S/N が低いときはノイズが、高いときはスペックルが誤差を決めます。
D435 相当のスペックルでは、入れ替わるのは S/N 約 9 です。 スペックルが半分になる光学系では、S/N 約 15 に上がります。目安としては、次の関係です。
入れ替わる S/N ≈ 1 ÷ スペックルによる誤差(px)
S/N 10 は、ラインの山でも光の粒が約 120 個しかない暗い条件です。静止した物を十分な露光で撮るなら、これより高くなるはずです。そのため、この連載の D435 ではスペックルが支配的である可能性が高いと考えています。実際の S/N は、第4章で測って確かめます。
どちらが支配的かで、良い手法が変わります。
| 手法 | スペックルが支配的(D435 相当、S/N 30) | ノイズが支配的(スペックルなし、S/N 10) |
|---|---|---|
| 最大値 | 0.466 | 0.333 |
| 重心 | 0.117 | 0.107 |
| ガウス(3点) | 0.287 | 0.126 |
| ガウス(当てはめ) | 0.187 | 0.088 |
| 傾きの0交差 | 0.136 | 0.085 |
(太さ 4 画素、誤差の RMS、単位 px)
高速の検査のように光が足りない装置では、ノイズが支配的になり、傾きの0交差やガウス(当てはめ)が重心より良くなります。
装置の設計の選択が、2つの誤差と装置にどう影響するかを、次の表にまとめます。特に断らない限り、誤差は画像の上での値(px)で比べています。
| 設計の選択 | スペックルによる誤差 | ノイズによる誤差 | 装置としてのメリット | 装置としてのデメリット |
|---|---|---|---|---|
| レンズを絞る(F値を大きく) | 増える | 増える(光が減る) | 被写界深度が深く、高さ方向に広く測れる | 精度が落ちる。暗くなるので露光が長くなり、遅くなる |
| F値を小さく(明るいレンズ) | 減る | 減る(光が増える) | 精度が上がる。明るいので速くできる | 被写界深度が浅くなる(シャインプルーフ配置が必要)。レンズが大きく高価。校正が複雑 |
| 焦点距離を長く(F値は同じ) | 画素単位では変わらない(高さでは減る) | 画素単位では変わらない(高さでは減る) | 1画素が物の上で小さくなり、高さの精度が上がる | 視野が狭くなる。被写界深度が浅くなる(シャインプルーフ配置が必要)。レンズが大きくなる |
| 露光を短く | 変わらない(静止物) | 増える | 速く撮れる。動く物のぶれが減る | 精度が落ちる。補うにはレーザー出力が要る |
| レーザー出力を上げる | 変わらない | 減る | 速さと精度を両立しやすい | 目の安全の管理が必要になる(クラス3R以上)。発熱とコスト |
| 画素を小さく(高画素センサー) | 画素単位では増える(高さでは変わらない) | 増える(1画素の光が減る) | 横方向の分解能が上がる | 高さの精度はスペックルで頭打ちのまま。データ量と処理時間が増える |
| 干渉性の低い光源(LED など) | 減る[6] | 光源の明るさしだい | 精度が上がる | 細いラインに絞りにくい。レーザーほど遠くまで細いままにならない[7] |
| ラインを細く絞る | 減る | 減る(同じ出力で明るくなる) | 精度が上がる | 細くしすぎると画素に張り付く。細いまま保てる奥行きが短くなる |
| 三角測量角・作動距離(装置の大きさ) | 両方を同じ倍率で高さに換算するので、どちらが支配的かは変わらない | (同左) | 角度を大きく、距離を短くすると、高さの精度が上がる | 装置が大きくなる。陰で見えない部分が増える |
| 線の方向に平均する(処理) | 減る | 減る | 精度が上がる | 線の方向の分解能が落ちる |
| 何枚も撮って平均する(処理) | 変わらない(静止物) | 減る | 部品を足さずにノイズが減る | 遅くなる |
ここで大事なのは、「装置を小さくしたい」という要望は、高さの精度の値を変えても、スペックルとノイズのどちらが支配的かは変えないことです。三角測量角や作動距離は、どちらの誤差も同じ倍率で高さに換算するだけだからです。一方、「高速に測りたい」「目に安全な出力で測りたい」という要望はノイズの側を、「被写界深度を深くしたい」という要望はスペックルの側を大きくします。
なお、測る物の性質も効きます。黒い物は光が返らないのでノイズが増えます。鏡のような物は、光がカメラに返らず、そもそも測りにくくなります。
実際の装置での選び方
ここまでの結果を、目安としてまとめます。
スペックルが支配的な場合(D435 で静止物を測る場合など)
- 手法は、まず重心を使います。 窓は ± ラインの太さをとります。計算も簡単です。
- 傾きの0交差は、重心に次ぐ結果でした(誤差は重心より1〜2割大きい)。
- ガウス(当てはめ)は、点数を十分にとっても、太さ 4 画素以上では重心の 1.6〜1.7 倍です。 ガウス(3点)は、太さ 2 画素程度の細いラインに限ります。
ノイズが支配的な場合(光が足りない高速の検査など)
- 傾きの0交差を使います。 ガウス(当てはめ)も太さ 4 画素以上なら同じくらい良い結果ですが、計算量が多く、太さ 2 画素のように点が少ないときは不安定になります。
どちらの場合も
- 最大値は、サブピクセルの計測には使いません。
- ラインの太さは 2〜4 画素を目安にします。 1 画素では画素への張り付きが出て、8 画素ではスペックルの影響が増えます。
- 線の方向の平均は、必要な分解能と相談して決めます。 段差の縁のような細かい形を見たいときは、控えめにします。
- 線が大きく斜めだったり曲がったりする場合は、列ごとの計算では足りません。 そのときは、Steger 法のように線の向きも求める方法を検討します[4]。
この章の前提と限界
- D435 の実際の S/N は分かっていません。読み出しノイズ 5電子と 8bit の設定は仮定です。「D435 ではスペックルが支配的」という判断は、第4章で S/N を測るまでは条件つきです。
- 画素ごとの感度のばらつき(固定パターンノイズ)は入れていません。撮るたびに変わらないので、平均しても減らない点はスペックルと同じです。大きさは第4章で確かめます。
- 重心の窓の幅と傾きの0交差の平滑化の幅は、このシミュレーションで試して、良かった値を選びました。実際の画像では、最適な値が変わる可能性があります。
- ガウス(当てはめ)は、すべての画素を同じ重みで扱う最小二乗です。明るさに応じた重みを付けると、スペックルのある条件で改善する可能性がありますが、試していません。当てはめに失敗した列では、最も明るい位置を答えにしています。
- 傾きの0交差の平滑化には、ガウス関数を使っています。Blais と Rioux の検出器[3]とはフィルタが違います。この論文の本文は読めておらず、他の文献の説明で確認しました。
- どの手法が実用で最も多く使われているかを示す資料は、見つけられませんでした。市販のセンサーの内部で使われている手法は、公開されていないものが多いです。
- 「太さの平方根に比例」「1.68 倍」は、むらが画素ごとに独立だと仮定した筆者の見積もりで、文献では確認していません。
- ラインは水平な直線で、断面はガウス形、ピントは合っている、という理想的な条件です。段差の縁、斜めのライン、外からの光は入れていません。
- 物は静止しているとしています。露光中に物が動くと、動いた分だけスペックルが平均され、誤差が小さくなる可能性があります。
- スペックルの計算は乱数を使うので、同じ条件でも結果は1割程度変わることがあります。数値は目安として読んでください。
まとめと次回予告
- スペックルがなければ、最大値と太いラインのガウス(3点)を除いて、S/N 30 で誤差は 0.02〜0.04px と十分に小さい
- D435 相当のスペックルがあると、重心が最も良く、太さ 2 画素で約 0.10px。第2章の式の値(0.092px)に近い
- 手法の差は、ノイズへの強さではなくスペックルへの強さで出る
- ガウス(3点)が弱いのは点数が少ないから。当てはめの点数は ± ラインの太さで頭打ちになるが、スペックルがあると、太さ 4 画素以上で重心の 1.6〜1.7 倍のまま
- ラインの太さは 2〜4 画素が目安。細すぎると画素に張り付き、太すぎるとスペックルの影響が増える
- 線の方向に平均すれば第2章の値を下回れるが、線の方向の分解能と引き換えになる
- スペックルとノイズのどちらが支配的かは、F値、画素の大きさ、光の量で決まり、装置の大きさでは変わらない。スペックルが支配的なら重心、ノイズが支配的なら傾きの0交差
次回の第4章では、いよいよ実機を使います。D435 の左の赤外線カメラでラインを撮り、ピントが合っているか、ラインの太さは何画素か、実際の S/N はいくつかを確かめます。
参考
[1] R. B. Fisher and D. K. Naidu, “A comparison of algorithms for subpixel peak detection,” in Image Technology (J. L. C. Sanz, ed.), Springer, 1996.
[2] Euresys, Open eVision 2.8, Laser Line Extraction, https://documentation.euresys.com/Products/OPEN_EVISION/OPEN_EVISION_2_8/en-us/Content/03_Using_Open_eVision/F2_Using_3D_Toolset__Easy3D_/Laser_Line_Extraction.htm(2026年11月2日閲覧)
[3] F. Blais and M. Rioux, “Real-Time Numerical Peak Detector,” Signal Processing, 11, 145–155, 1986.
[4] C. Steger, “An unbiased detector of curvilinear structures,” IEEE Transactions on Pattern Analysis and Machine Intelligence, 20(2), 113–125, 1998.
[5] Y. Li, J. Zhou, F. Huang, and L. Liu, “Sub-Pixel Extraction of Laser Stripe Center Using an Improved Gray-Gravity Method,” Sensors, 17(4), 814, 2017.
[6] G. Häusler and F. Willomitzer, “Reflections about the holographic and non-holographic acquisition of surface topography: where are the limits?,” Light: Advanced Manufacturing, 3:25, 2022.
[7] F. Blais, “Review of 20 years of range sensor development,” Journal of Electronic Imaging, 13(1), 231–240, 2004.

コメント