41 3D計測
点群が位置合わせされ(チャプター 39)、フィルタリングでクリーンアップされた(チャプター 37)後、生産ラインが実際に求めるのは見栄えの良い点の集まりではなく数値である——このワークの段差は何mmか、円形台座は十分に大きいか、接合面は平らか、局部的な凸欠陥はないか。これらの数値を算出し、それに基づいて合否を判定することが3D計測の役割である。本章は チャプター 21 の2次元計測手法論の3次元版である:計測チェーンは依然として点群 → 当てはめたプリミティブ → 幾何量 → 判定であり、各段階の役割、誤差の伝播方法、帯状公差と寸法公差が統計的に異なる理由はいずれも2次元の場合と一対一に対応する——ただしプリミティブが直線や円から平面に昇格し、評価単位がピクセルからミリメートルに変わるだけである。
実験対象(図 41.1)は実際のSmart3距離画像(sample/height01.srt、1600×1600、SDKの「高さ計測」サンプルソリューションから取得)である:精密機械加工された部品で、上面視で約19.2×19.2 mm、横方向分解能は\(0.012\) mm/ピクセル、縦方向分解能は\(0.001\) mm/カウントである。表面構造は沈み込んだ格子状溝の底面(floor)であり、その上に隆起した円形台座(boss lands)のアレイが配置されている。各台座には2つの小さな凹みがあり、そのうち1つの台座には明らかな局部凸欠陥(bump)が存在する。これは実際のスキャンデータである:解析的な真値ラベルは存在せず、すべての数値は計測値として忠実に報告される。約26万個の未命中ピクセル(生カウントが0)は背景の無効領域であり、点ごとにスキップされる。
41.1 当てはめプリミティブ:平面と円
2次元計測のプリミティブは直線と円であるが(チャプター 14)、3次元の主力プリミティブは平面である。当てはめの前に、点群全体を各特徴面にセグメンテーションする必要がある(図 41.2)。本例の段差(≈4.4 mm)はステージ上でのワークの冶具による傾き(±0.6 mm)よりもはるかに大きいため、1つの大域的高さ閾値\(z=33.5\) mmで溝の底面(約31.2 mm)と台座(約35.6 mm)を明確に二分できる;実際の生産ラインでは、領域成長、法線クラスタリング、または位置合わせされたCADモデルへの最近接面割り当てによって同じ手順を実行する。分割後には遷移壁と飛び点を除去する必要がある:台座から溝への側壁ピクセルは分割閾値付近に跨るため、一度当てはめを行った後、残差が\(0.1\) mmを超える点を削除して再当てはめを行う。残った点がクリーンな平面点集合となる。
最小二乗平面フィッティング(least-squares plane fit) は1つの面の点群を\(z=ax+by+c\)にフィッティングする手法であり、3つの係数は1組の\(3\times3\)正規方程式(normal equations)から一度に解かれる:
\[ \begin{bmatrix}\sum x^2 & \sum xy & \sum x\\ \sum xy & \sum y^2 & \sum y\\ \sum x & \sum y & N\end{bmatrix} \begin{bmatrix}a\\b\\c\end{bmatrix}= \begin{bmatrix}\sum xz\\ \sum yz\\ \sum z\end{bmatrix}. \]
これはまさに チャプター 2 の「超定方程式の最小二乗解」を3次元に適用したものであり、未知数は2次元直線の2個から3個に増えている。係数を解いた後、平面の単位法線ベクトルは\(\mathbf n=(-a,-b,1)/\sqrt{a^2+b^2+1}\)であり、切片は重心によって定まる。フィッティングされた溝の底面は\(z=-0.0151x+0.0250y+31.217\)であり、法線は鉛直方向から1.675°傾いている——これはステージ上での工作物の実際の治具による傾きであり、実データでは必ず存在する。後述する段差や平行度の測定では、この傾きを結果に持ち込まないよう、\(z\)軸に沿うのではなく基準面の法線に沿って処理する必要がある。
平面フィッティングのロバスト性は2次元の場合と同じ起源を持つ:少数の外れ値(飛び点、側壁の画素)が最小二乗基準を引きずって歪めるため、工業的な実装では一般に反復重み付け(IRLS)やRANSACによる事前選別を重ねる。本章では最も単純な「フィッティング→残差閾値による除外→再フィッティング」を2回行うだけで、溝底面のRMSを19.0 µmまで抑えることが十分に可能である。
円フィッティングと「距離画像が見えるもの」 円形の台座の直径はKasa円フィッティング(circle fit)で測定される:台座の連結成分の外郭点を\(xy\)平面に投影し、平面フィッティングと同型の\(3\times3\)正規方程式系を解くことで、中心と半径を一度に得る。ここに実データに関する重要な認識がある——距離画像は2.5D高さ場であり、上向きの表面しか見えず、鉛直な側壁は見えない。そのため台座は距離画像内に円形の輪郭(直径をフィッティング可能)を残すだけで、円筒の一部としての側面は全くサンプリングされない;真の3次元円筒(軸+半径、5個の未知数)をフィッティングするには多視点スキャンまたは完全な点群が必要であり、1枚の俯瞰距離画像では不可能である。本例では縁に接しない面積最大の内部台座を選び、角度ごとにビン分割して各方向で半径最大の外郭点のみを残し(2箇所の内部凹みの境界をきれいに除外)、直径6.8608 mm(半径3.4304 mm)、真円度(径方向の山谷差)86.4 µmとフィッティングされた(図 41.3)。
41.2 段差、平行度と高さ測定
プリミティブが得られれば、幾何量は閉形式の公式となり、それ自体が新たな誤差を生み出すことはない(チャプター 21 と同様である)。
段差(平面間距離)——これこそが本サンプルの「高さ測定」の核心である。 溝底面に対する台座の高低差は、台座の重心から溝底面の法線に沿って底面までの符号付き垂距離に等しい。実測値は 4.3915 mm である。2つの面はそれぞれ百万点近くでフィッティングされており、段差はそれらのサブミクロンオーダーの安定性を完全に継承している。強調すべき点は、「\(z\) 軸に沿って」ではなく「法線に沿って」であることだ:ワークの取り付け傾きは 1.675° であり、鉛直方向の高低差を直接採用すると \(\cos\theta\) の因子分だけ誤差が生じる(約 4 µm の系統誤差)ため、工学的に段差を評価する際は常に基準面の法線に沿った垂距離を用いるのが正しい手順である。
面間角 / 平行度。 2つの平面のなす角はそれらの法線ベクトルの内積から求められ、\(\theta=\arccos\lvert\mathbf n_1\!\cdot\!\mathbf n_2\rvert\) である——これは チャプター 21 の線間角の3次元版に相当する(平面にとっての法線ベクトルは、直線にとっての方向ベクトルと同じ役割を持つ)。溝底面と台座の法線のなす角の実測値は 0.1085° で 0 に近く、この機械加工部品の上下2組の面が確かに平行であることを裏付けている——つまり、1.675° の全体的な傾きは取り付けによって生じた剛体姿勢であり、両方の面に共通して含まれるため、差を取る際に相殺され、段差に影響を与えない。この「面間の差を取る際に同相の傾きが自動的に相殺される」という性質が、3次元測定において世界座標系ではなく基準面を基準に評価を行う根本的な理由である。
台座アレイのうち欠陥の頂点を通る行の \(x\)–\(z\) 断面を描画すると(図 41.4)、段差と凸部が一目瞭然である:黒い折れ線は台座の高さ(緑線)と溝底面の間で約 4.4 mm の昇降を繰り返しており、中央で緑線の上に膨らんだドーム状の部分が凸欠陥である。
測定された幾何量をまとめる(表 41.1)。ここで2種類の量を区別する必要がある:段差や直径のような平均型の量は点数が増えるにつれて単調に安定し、偏差は \(\sigma/\sqrt N\) の底値に収束する;一方、次節で扱う平面度や真円度のような帯域型の量は正反対の振る舞いを示し、点数が増えるほどレンジの期待値が大きくなるため、サンプリング密度によって値が押し上げられる。同じ点群、同じノイズであっても、これら2種類の量は「点数」に対して完全に逆方向の応答を示す——これは3次元測定報告書で最も誤読されやすい点であり、帯域型の量を報告する際は常にサンプリング条件を併記しなければならない理由でもある。
| 幾何量 | 実測値 | 備考 |
|---|---|---|
| 段差 / 溝底面→台座(mm) | 4.3915 | 基準面の法線に沿った値、本サンプルの主測定項目 |
| 平行度 底面∠台座(°) | 0.1085 | ≈0、両面が平行であることを確認 |
| 取り付け傾き(°) | 1.675 | 底面の法線と鉛直方向のなす角、剛体姿勢 |
| 円形台座の直径(mm) | 6.8608 | 外輪郭をKasa法で円フィッティング |
| 台座の真円度(半径方向P2V、µm) | 86.4 | RMS 12.0 |
| 溝底面の平面度 最小二乗P2V(µm) | 225.5 | RMS 19.0 |
| 溝底面の平面度 最小領域法(µm) | 194.3 | ≤ 最小二乗法の値 |
| 台座アレイの平面度 最小二乗P2V(µm) | 255.4 | RMS 22.3 |
| 台座アレイの平面度 最小領域法(µm) | 234.2 | ≤ 最小二乗法の値 |
| 凸欠陥の台座からの突出量(mm) | 2.5180 | 横方向のスケール ≈3.44 mm |
41.3 平面度、真円度とGD&T
寸法に加えて、図面には幾何公差(GD&T、geometric dimensioning and tolerancing)の枠も記載されている。これらは「測定値がいくつか」ではなく、公差領域(tolerance zone) を規定するものである:測定対象面は全体が特定の厚さの帯の内部に収まらなければならない。これは(チャプター 21 で述べた)2次元における「平行度/真円度/真直度」の公差領域の考え方と完全に一致しており、帯が2次元の2本の線の間から3次元の2つの面の間に昇格したものに過ぎない。平面度(flatness) の公差領域は2枚の平行平面の間の厚さであり、測定対象面のすべての点がその間に挟まれる必要がある;真円度(roundness) の公差領域は2つの同心円の間の環状領域である。この表現の出発点は組立機能である:測定対象面が全体として帯の内部に収まっていれば、その面の具体的な凹凸形状にかかわらず、相手部品との密着性が保証される。これらを視覚で評価する一般的な手法は2次元の場合と同じである:測定点群を取得し、評価基準に対する偏差を計算し、最大値−最小値が点群を包容するのに必要な最小の帯幅 となる。
平面度。 近似平面を基準とし、各点の符号付き垂直距離の最大値−最小値が山から谷までの値(P2V)である。溝の底面の実測値は 225.5 µm(最小二乗法による評価、RMSはわずか19.0 µm)であり、台座アレイは 255.4 µm(RMS 22.3 µm)である——台座アレイの値がやや大きいのは、互いに独立した複数の台座をまとめて評価しているため、単一台座の機械加工による凹凸だけでなく、台座間の共平面性誤差が含まれるからである。図 41.5 は2つの面の残差を発散ヒートマップ(±60 µm)として描画している:溝の底面(左)の赤から青への長距離の勾配は大スケールの平面うねりであり、各台座(右)の赤と青の同心リングは各台座のわずかな中心隆起である——これらはランダムノイズではなく、機械加工とスキャンの両方によって残された真の形状である。平面度は極値統計量であることに注意されたい:RMSはわずか20数µmであるのにP2Vは200µm台に達するのは、面全体の最も極端な2点によって値が決まるためであり、サンプリングが密であるほど極端な点を捕捉する確率が高まり、値が大きくなる。
真円度と凸状欠陥。 前節の台座の外郭の真円度は 86.4 µm である(図 41.3)——外郭の点は一様に近似円に沿っており、系統的な楕円形や多角形は見られないことから、台座の外縁が真円であることが確認できる。一方、その凸状欠陥は別の判定基準を用いる:そのピーク画素は台座の基準面から 2.5180 mm 高く(横方向のスケールは約3.44 mm)、連結成分分割によって位置を特定し、成分内の最高点の台座法線方向に沿った垂直距離として求められる。このような局所的な隆起は組立時に相手面を直接押し上げるため、平面度のような全体的な帯幅の量とは別の観点で、個別に報告する必要のある欠陥量である。
基準依存性。 同じ点群でも、評価基準を変えると平面度の値は変化する:溝の底面のP2Vは、最小二乗(least-squares) 平面を基準とすると 225.5 µm であるのに対し、最小領域(minimum zone) 基準(平面の傾きを微調整して包容帯を最も薄くする)では 194.3 µm となる;台座アレイの対応する値は 255.4 µm と 234.2 µm である。これは チャプター 21 で述べた2次元における「真円度の基準論争」の3次元版である——最小領域は定義上最も薄い帯を与え、GD&Tのセマンティクスの本体である;最小二乗法は最もロバストであるが、帯幅は系統的に大きくなる。そのためいかなる幾何公差を報告する場合も、評価方法と併せて報告しなければならない、そうでなければ2つの装置の測定値に比較可能性はない。
最小領域 ≤ 最小二乗、常に成立する。 最小領域基準は、可能なすべての基準平面の中から包容帯を最も薄くするものを専門的に選択したものであり、最小二乗平面はそのうちの1つの特解に過ぎない。そのため最小領域による評価値は最小二乗法による評価値を上回ることはない(本章の溝の底面 194.3 ≤ 225.5、台座アレイ 234.2 ≤ 255.4 の両方の組でこの不等式が検証されている)。
41.4 SciVision の実装
実距離画像は Sci3DFileOperation::LoadRangeImage で読み込む(Sci3DFileOperation.lib をリンクし、rc=0 で成功となる。stderr に無害な “Directory does not exist.” が出力されることがある)。GetValue(row,col) は生カウント値を返し、ResolutionZ() を乗じることで物理的な高さ(単位:mm)が得られる。カウント値が 0 の場合は無効ピクセルである。幾何量は SciSv3DGeometryMeasure により、幾何公差は SciSv3DGDTTools により提供される。2D と比較して、忠実に記載しなければならない重要な差異が1つある:3D の GDTTools は真の mm 単位の偏差値を返すのであり、隣接する章 チャプター 42 の 2D 版 SciSvGDTTools のような \([0,1]\) に正規化されたスコアではない。本章の ChebyshevFlatness が返す 0.19731、Parallelism が返す 0.26143 はいずれも正真正銘のミリメートル単位の偏差であり、図面公差に対して直接閾値を設定できる。
API ごとの実機での測定状況(3D モジュール全体がクラッシュしやすい、または無応答になりやすいため、詳細は工程規約を参照のこと。すべての SDK 呼び出しには、手書きの主鎖と同じくロバストな除外処理を施した点群を入力している):
- 使用可能で手書き版と一致:
LeastSquarePlaneFit(溝底面の meanErr 0.01905 mm = 19.0 µm、手書きの RMS と4桁まで一致。台座では 0.02229 mm)、AngleFromPlanes(0.10861°、手書きの平行度 0.1085° と4桁まで一致)、ChebyshevFlatness(最小領域 0.19731 mm = 197.3 µm、手書きの最小領域 194.3 µm との差がわずか 3 µm であり、強力な交差検証となっている)、Parallelism(0.26143 mm = 261.4 µm、手書きの台座平面度 255.4 µm と同程度の値)。 - 失敗:
PlanesDistanceはエラーコード 123501017 を返し、値として 0 を出力する(厳密平行公差判定の不具合)。そのため段差は手書きで算出することとする(台座の重心を溝底面の法線方向に沿った垂距は 4.3915 mm)。 - 無応答で出力なし:
ResidualFlatnessは 0 を返し、使用不可能である。
本機では3Dモジュールは広範囲でクラッシュしやすいか、無応答で0を返す傾向がある。そのためSDK呼び出しは一律でサブプロセスプローブ内に配置する:主プロセスが図と数値を出力した後、system() で自身の sdkprobe ブランチを再起動してSDKを操作する。クラッシュしてもサブプロセスが終了するだけで、主鎖を崩壊させることはない。この「主鎖を手書き、SDKを傍証とする」位相分離は、本書Part IXの各3D章で共通の工程戦略である。
SciRangeImage ri; SCIMV::Sci3DFileOperation fop;
SciVar path("sample\\height01.srt");
long rc = fop.LoadRangeImage(path, &ri, false); // rc=0 で成功
double z_mm = ri.GetValue(row, col) * ri.ResolutionZ(); // 生カウント → 物理的高さ mm(0は無効)
SCIMV::SciSv3DGeometryMeasure gm;
Sci3DPlane floorPlane, bossPlane; double meF = 0;
rc = gm.LeastSquarePlaneFit(floorA, 5.0, 5.0, 1, &floorPlane, &meF); // meanErr 0.01905 mm
double ang = 0; // 平行度:法線ベクトルの内積の逆余弦
rc = gm.AngleFromPlanes(floorPlane, bossPlane, &ang); // 0.10861°(≈ 手書き 0.1085)
SCIMV::SciSv3DGDTTools gdt;
double fCheb = 0, par = 0;
rc = gdt.ChebyshevFlatness(floorA, 1, 0.0, &fCheb); // 最小領域 0.19731 mm ≈ 手書き 0.1943
rc = gdt.Parallelism(bossA, floorPlane, 0, 0.0, &par); // 0.26143 mm(真の mm 単位)
// 段差:PlanesDistance 失敗(123501017) → 手書きで台座重心の法線方向垂距 = 4.3915 mm工程戦略は2Dと一致する:測定の主鎖はすべて手書きの最小二乗法を使用する(平面/円のフィッティングは決定論的で再現可能な「数学的実体」である)。SDKはサブプロセスプローブに配置して傍証とする。この方法には2つの利点がある:1つ目は、手書きの実装は決定論的で再現可能であり、3Dモジュールのクラッシュの影響を受けないため、主鎖は常に数値を出力できること。2つ目は、使用可能なSDK APIを独立した第2の実装として交差検証に利用できることである。ChebyshevFlatness は手書きとは完全に異なるコードパスで最小領域平面度を独立して再現し(197.3 µm 対 194.3 µm)、LeastSquarePlaneFit の meanErr は手書きの RMS と 19.0 µm で完全に一致する。この「2つの実装が独立して一致する」ことは、単一の実装による自己証明よりもはるかに信頼できる。完全なプロジェクト(5枚の図の生成、サブプロセスプローブの全出力を含む)は code/3d_measurement/ に格納されている。
産業事例:結合面の平面度検収
ある機械加工された結合面は平面度が数十µmレベルであることが要求されていたが、検収は度々揉め事になっていた。供給者はまず三次元測定機(CMM)で打点して検収を行った:サンプリングが疎(数十点)であったため結合面縁部の局所的な反りが見落とされ、報告された平面度は楽観的な値に偏り、合格と判定された。顧客は3D面スキャンによる全領域サンプリングに切り替え、反りは捉えられたものの、数十万点の中にスキャナのノイズフロアと治具による傾きが混入し、極値統計によって平面度が引き上げられてしまった——本章の実サンプルのように、溝底面のRMSはわずか19µmであるのにP2Vは225µmに達し、面全体に1.675°の治具による傾きが存在するため、基準面の法線方向に沿って評価しなければさらに系統偏差が重畳してしまう。さらに厄介なのは評価手法である:顧客は最小領域法(194µm)を用い、供給者は最小二乗法(225µm)を用いたため、同一の面から2つの数値が算出された。最終的な解決策はアルゴリズムではなくプロトコルにあった——検査プロトコルに、評価手法(最小領域法対最小二乗法)、サンプリング密度(点間隔の上限)、フィルタ遮断周波数の3つを明記したのである。教訓は一言に尽きる:3D計測報告書には数値、評価手法、サンプリング/フィルタ条件の3点セットが必須であり、1つでも欠ければ、その数値には比較可能性がない。
41.5 まとめ
- 計測鎖は2Dと同型である:点群 → フィッティングされたプリミティブ(平面/円)→ 幾何量(段差/角度/直径)→ 判定(平面度/真円度/欠陥);幾何量の段階は厳密な数式であり新たな誤差は生じず、精度はすべて単点のノイズから\(1/\sqrt N\)のフィッティングを介して伝搬される。本章では実際のSmart3距離画像を使用しており、真値ラベルが存在しないため、すべて計測値のまま忠実に報告している。
- 距離画像は2.5Dであり、上向きの面しか見えない:円形台座は直径(6.8608mm)をフィッティング可能な平面視輪郭しか残さず、その円筒側面はサンプリングされない——真の3D円筒フィッティングには多視点または完全な点群が必要であり、単一の平面視距離画像では実現できない。
- 面間で差分をとる際に同相傾きは相殺される:ワークの1.675°の治具による傾きは上下面で共有されており、底面法線方向に沿って段差を垂距離(4.3915mm)として求めることも、平行度を0.1085°とすることも、この傾きをきれいに相殺する——これが3D計測において世界座標系ではなく基準面に対して評価を行う根本的な理由である。
- 帯域幅量は極値統計である:平面度(溝底面225.5µm / 台座255.4µm、いずれもRMSは20数µmにすぎない)、真円度86.4µmはいずれもサンプリング密度に敏感であり、「点が多いほど精度が高まる」寸法量とは逆の性質を持つ。
- 基準依存性は評価手法と併せて報告しなければならない:同一の面に対し、最小二乗法では225.5µm、最小領域法では194.3µmとなり(最小領域法 ≦ 最小二乗法が常に成り立つ)、SDKの
ChebyshevFlatnessは独立したコードパスで最小領域法の値(197.3µm)を再現している——評価手法を記載せずに幾何公差を報告することは、報告しないことと同値である。 - 3D SDKの次元は2Dと異なる:3D GDTToolsは実際のmm値を返す(2Dの正規化された\([0,1]\)のスコアではない);使用可能なAPIは手書き実装と一致しているが(平面フィッティングのmeanErr 19.0µm、挟角0.10861°、最小領域平面度197.3µm)、
PlanesDistanceは失敗しResidualFlatnessは不活性であるため、主たる計算経路は依然として手書きの最小二乗法を使用し、SDKは傍証として用いている。
3D幾何量の不確かさ解析と最小領域評価に関する系統的な解説については、Stegerらの著作(Steger, Ulrich, と Wiedemann 2018)をさらに参照されたい。本章で使用した幾何公差の記号言語と公差帯の定義は、幾何寸法公差(GD&T)規格によって規定されており、国際体系はISO 1101(International Organization for Standardization 2017)に記載されている;単一面の平面度については、ISO 12781が用語とパラメータ(最小領域、最小二乗などの基準面定義を含む)をさらに規定しており(International Organization for Standardization 2011b)、円筒度の対応する規格はISO 12180(International Organization for Standardization 2011a)に記載されている。本章で繰り返し触れた「最小二乗法対最小領域法」の基準をめぐる議論は、形状誤差フィッティングの文献で専門的に論じられており、MoroniとPetroは各種最小領域フィッティングアルゴリズムの原理とコストを比較している(Moroni と Petrò 2008)。




