21  幾何計測

チャプター 14 でフィッティングされた直線と円は、生産ラインから見れば単なる中間産物である。検査報告書に署名されて承認されるのは「直線の方向ベクトル」や「円のパラメータ」ではなく、カメラ孔から上辺まで47.8 px、孔の真円度0.25 px、カバー四隅の直角度(直角誤差0.09°) といった、図面公差と直接比較して合否を判定できる数値である。幾何プリミティブからこれらの数値に至るには、もう一段階の処理が必要である:幾何計測(geometric measurement)——フィッティングで得られた点、直線、円に対して正確な幾何学公式を適用して距離、角度、交点を求め、さらに幾何公差の定義に従って平行度、真円度、真直度を評価する処理である。完全な計測チェーンは「画像 → エッジ点 → 幾何プリミティブ → 幾何量 → 合否判定」である。本章では2つの事柄に着目する:各段階の誤差が最終的な数値にどのように伝搬するか、および「帯域」型の幾何公差量と「位置」型の寸法量の統計的性質に根本的な違いがあるかどうかである。

実験対象(図 21.1)は実物のスマートフォンカバーガラスである(Smart3「幾何関係例示スキーム」のサンプル画像、2592×1944 シングルチャネルグレースケール):白色背景上に垂直に置かれた矩形のカバーで、外輪郭は暗色のベゼルであり、4本の明瞭な直線状の辺が四隅で実際のR面取りで接続されている。上部ベゼルには円形のカメラ孔と細長いイヤホン孔が埋め込まれ、底部にはHomeボタン貼り合わせ領域がある。これは民生電子分野で極めて一般的な受入検査部品であり——生産ラインが計測しなければならないのは、まさに孔位置、辺クリアランス、カバーの内外寸法、四隅の直角度、孔の真円度である。本章では セクション 21.2 の一連の幾何学公式をこの実部品上で実行する。合成シーンとは異なり、実部品には解析的な真値が存在しないため、以下ではすべて実測値で記述し、部品自身の幾何的自己整合性(4辺が略矩形を構成するはずであること)を計測の正しさの交差検証として用いる。

図 21.1: 実物のスマートフォンカバーガラスのサンプル画像(2592×1944):白色背景上の暗色矩形カバー。4本の直線状の辺は実際のR面取りで接続されている。上部ベゼルには円形のカメラ孔と細長いイヤホン孔があり、底部はHomeボタン貼り合わせ領域である。本章ではその辺、孔、角点の間の幾何関係を計測する。

21.1 計測チェーンと誤差伝搬

計測チェーンを段階的に展開すると:エッジ点レベルの誤差は画像ノイズとエッジモデルの不整合に由来する;プリミティブレベルは多点フィッティングによる統計平均を行う;幾何量レベルは決定論的な閉形式の公式で構成されており、それ自体新たな誤差を生まない——入力されたプリミティブの誤差がそのまま出力される幾何量の誤差となる;判定レベルでは幾何量を図面公差と比較し、前3段階で蓄積された誤差予算が判定の信頼度(および公差に設けるガードバンドの幅)を直接決定する。したがって、ビジョン計測システムの精度を分析する際には、すべての労力が最初の2段階の誤差伝搬(error propagation)に費やされる。

第1段階はエッジ点である。投影平均と放物線補間(詳細は チャプター 14チャプター 20 を参照)の後、単一エッジ点の法線方向における残留ノイズを \(\sigma_e\) と記す。本例ではフィッティング残差から直接その上界を読み取ることができる:上辺の60個のエッジ点に対する FitLine 最小二乗直線の全点RMSEはわずか0.103 pxである(左、右の長辺はそれぞれ0.137、0.211 px)。このRMSEにはセンサノイズと直線状の辺自身の微少な形状起伏の両方が含まれるため、\(\sigma_e \lesssim 0.1\) px は保守的な上界である——一連のパイプラインを経て、画素スケールの撮像ノイズが1/10画素以下に抑圧されている。

第2段階はフィッティングである。\(N\)個の独立した点で直線をフィッティングすると、パラメータ誤差は \(1/\sqrt N\) に比例して減少する;さらに方向に関しては2つ目のレバー——点集合のスパン\(L\)——が存在する。スパン\(L\)上に一様に分布する\(N\)個の点に対し、最小二乗直線の方向の標準偏差はおよそ

\[ \sigma_\theta \approx \frac{\sigma_e}{L}\sqrt{\frac{12}{N}}, \]

となり、\(L\)が分母に位置する:同じ点でも、長いスパンで計測するほど角度は正確になる。本例の長辺(\(\sigma_e\lesssim0.1\) px、\(N=90\)\(L\approx1060\) px)を代入すると、単一線の \(\sigma_\theta\approx 0.002^\circ\) が得られ、2本の独立した線の挟角にはさらに \(\sqrt2\) が乗じられるため、計測ノイズフロアは約 \(0.003^\circ\) となる。このフロアが重要なのは:実測された左右の長辺の挟角が0.065°、上下の短辺の挟角が0.237°——いずれも \(0.003^\circ\) のノイズフロアよりはるかに大きい——ことから、これらは実部品の辺が厳密には平行でないこと(カバーの打ち抜き/貼り合わせによる真の幾何偏差)によるものであり、計測ノイズによるランダムな揺らぎではないことが示される点である。計測によって部品の真の形状が分離されたことになり、これこそが誤差予算分析の用途である:ノイズフロアがどこにあるかを知って初めて、読み取り値が真の信号かノイズかを判断できるのである。

画素と物理量:本章のすべての読み取り値は画素(px)を単位とする。ミリメートルへの換算にはカメラキャリブレーションのスケールファクタ(1画素あたりの物理寸法)を乗じる必要があるが、これは チャプター 5 の内容である。実際のサンプル画像にはキャリブレーション情報が付属していないため、本章では画素領域内で幾何関係と公差帯域幅の相対評価のみを行い、物理的な真値を作り出すことはしない。

プリミティブ抽出自体は チャプター 14 のパイプラインを再利用する:上辺と下辺の短辺にはそれぞれ60本の探索線で点を抽出した後 FitLine 最小二乗フィッティングを行う;左辺と右辺の長辺にはそれぞれ90本の探索線を用い、x/y交換手法でフィッティングする(理由は セクション 21.4 を参照);4辺のROIはいずれも四隅のR面部を避け、直線状の本体部分にのみ設定する。カメラ孔は EllipseLocator によって48本の放射状探索線に沿って一括で位置決めされ、孔縁は白い孔(内側)と暗いベゼル(外側)の明→暗のエッジである。

21.2 距離、角度、交点

基礎的な幾何量に必要な公式は3つだけである。点 \(\mathbf p\) から、2点 \(\mathbf a\)\(\mathbf b\) を通る直線 \(L\) までの点線間距離

\[ d(\mathbf p, L)=\frac{\lvert(\mathbf p-\mathbf a)\times(\mathbf b-\mathbf a)\rvert}{\lVert\mathbf b-\mathbf a\rVert}; \]

方向ベクトル \(\mathbf u\)\(\mathbf v\) を持つ2本の直線の挟角(直線には向きがないため、鋭角をとる):

\[ \theta=\arccos\frac{\lvert\mathbf u\cdot\mathbf v\rvert}{\lVert\mathbf u\rVert\,\lVert\mathbf v\rVert}\in[0^\circ,90^\circ]; \]

交点は2本の直線のパラメトリック方程式を連立させた2×2の線形方程式の解であり、係数行列式がゼロに近づくことは2直線が略平行で交点計算が劣条件であることを意味する——そのため工学的なインターフェースにはいずれも平行判定の閾値が設けられている。

中でも「角点」には補足が必要である。このカバーの四隅は実際のR面取りであり、画像内に直接位置決め可能な鋭い角点の画素は存在しない。工業的な標準的な手法では、角点を2本のフィッティングされた直線状の辺の仮想交点(virtual intersection)として定義する——これは部品上に物理的に存在する必要はなく、R面取り後の理論上の角点も計測可能である。各辺は数十個のエッジ点から平均化されており、交点はそれらの精度を完全に継承する。本例ではこれらの公式一式をカバー全体で用いる:上下短辺の挟角、左右長辺の挟角、上辺と左辺の交点から求めた左上角点、カメラ孔心から上辺と右辺までの辺クリアランス、角点から孔心までの部品横断距離、および点集合から対辺までの距離の平均から求めたカバーの内外幅と高さ(図 21.2)である。すべての実測値は 表 21.1 に示す。

図 21.2: 計測重ね合わせ図(コントラスト描画:明部は黒、暗部は白で描画):4本のフィッティングされた辺がカバーの外輪郭に沿って延長されている。上部右側はカメラのフィッティング円(中心十字付き)。左上の十字は上辺と左辺の仮想交点(角点)。孔心から引かれた短い線分は孔心→上辺、孔心→右辺の垂線距離、長い対角線は角点→孔心の部品横断距離である。
表 21.1: 実物カバーガラスの幾何計測結果(実測値、部品には解析的真値なし;単位 px / °)
幾何量 実測値 説明
上下短辺挟角(°) 0.2365 真の非平行性(≫0.003° ノイズフロア)
左右長辺挟角(°) 0.0647 真の非平行性
上辺⊥左辺直角誤差(°) 0.0947 90°−89.9053°、左上の直角度
左上角点(px) (957.475, 121.435) 2直線の仮想交点
孔心→上辺距離(px) 47.769 カメラ上辺クリアランス
孔心→右辺距離(px) 129.780 カメラ右辺クリアランス
角点→孔心距離(px) 765.908 部品横断点間距離
カメラ孔心(px) (1721.930, 168.594) 48点フィッティングによる円中心
カメラ孔半径(px) 17.051 フィッティング円半径
カバー幅 左↔︎右(px) 893.020 点集合から対辺までの距離の平均
カバー高 上↔︎下(px) 1744.362 点集合から対辺までの距離の平均

この表の信頼性は幾何的自己整合性に由来する:4辺間で対に測定された挟角——上下0.24°、左右0.06°、上辺⊥左辺直角誤差0.09°、上辺⊥右辺0.16°——はいずれも0.数度の範囲内であり、独立にフィッティングされた4辺が確かに略矩形を囲んでいることを確認している;カバー幅893 px、高さ1744 pxも輪郭の暗領域のスパンと一致している。距離量は真の受入寸法である:カメラ孔の上辺クリアランス47.8 px、右辺クリアランス129.8 pxは、まさにこの種のカバーを組み立てる際にカメラ開口の位置合わせで管理しなければならない重要な隙間である。すべての読み取り値は画素領域に留まっており——物理寸法への換算にはカメラキャリブレーションのスケールファクタを乗じる必要がある(チャプター 5)。強調すべきは:幾何計測の段階は正確な公式であり、表中のすべての数値の不確かさはエッジ点ノイズ \(\sigma_e\) がフィッティングを介して伝搬したものに完全に由来し、公式自体に誤差はないことである。

21.3 平行度、真円度、真直度

寸法に加えて、図面には幾何寸法公差(GD&T, geometric dimensioning and tolerancing)の枠内に記述される別の種類の要求事項が存在する。それらの言語は「どれだけ測定されたか」ではなく公差帯(tolerance zone)である:被測定要素は指定された幅の領域内に完全に含まれなければならない——平行度(parallelism)の帯は基準線と平行な2直線の間、真直度(straightness)の帯は2本の平行な直線の間、真円度(roundness)の帯は2つの同心円の間の輪帯である。この言語の出発点は組立機能である:被測定要素が全体的に帯内にある限り、その具体的な形状がどうであれ、相手部品との組立は保証される。ビジョン計測でこれらを評価する一般的な手法は同じである:被測定要素のエッジ点集合を取り、評価基準に対する偏差を計算し、max−minが点集合を包含するのに必要な最小帯域幅となる。実部品の優れた点は:これらの帯域幅には真の形状偏差が含まれており、人為的に欠陥を注入する必要がないことである。

平行度。左長辺のフィッティング線を基準とすると、右長辺の90個のエッジ点から基準線までの距離のmax−minは1.487 pxである(スパン約1060 px);上辺を基準とすると、下辺の平行度は2.790 pxである(スパン約670 px)。これら2つの数値は分解して読み取ることができる:上下短辺の平行度のほぼすべては0.237°の真の挟角に由来する——\(670\times\tan(0.237^\circ)\approx2.77\) pxであり、実測値の2.790 pxとの差はわずか0.02 pxで、残りは下辺自身の形状起伏によるものである;左右長辺の1.487 pxのうち、挟角の寄与は \(1060\times\tan(0.0647^\circ)\approx1.20\) pxであり、残りの約0.29 pxは長辺自身の反りに由来する。平行度は体系的な傾きと局所的な形状の和であり、max−minで極値をとるため、基準のフィッティング誤差もすべて含まれる。

真円度。孔径と真円度は組立部品で最も一般的な判定項目の対である:前者ははめあい隙間を決定し、後者は開口位置合わせと負荷の均一性を決定する。本例のカメラ孔の48個の孔縁エッジ点の、フィッティング円(半径17.05 px)に対する径方向偏差のmax−minは0.252 pxである——これは真の微少な真円狂いであり、合成された欠陥ではない。図 21.3 は径方向偏差を60倍に拡大して公称円上に描画したもので、真の孔縁が完全な円ではないことがわかる:偏差は低次の起伏が主体であり(わずかな楕円化に局所的な凹凸が加わったもの)、下方と左下の弧がわずかに外側に膨らんでいる。この「低次が主体」の真円狂い形状は、打ち抜き/レーザー穴開け加工の典型的な痕跡である。評価基準の役割について注意が必要である:最小二乗円はサンプリングノイズに対して最もロバストであるが、基準が局所的な凹凸によって全体的に引っ張られるため、真円狂いの「負債」が不均一に各弧に分配される——ある弧に明らかな圧痕がある場合、隣接する無傷の弧が新しい基準に対して外側に膨らみ、正反対の弧が内側に引っ込むことになる(セクション 21.4 の工業事例では、これによって引き起こされた判定紛争について詳述している)。

ISOの真円度評価には複数の基準円が存在する:最小二乗円(least-squares circle, LSC)最小領域(minimum zone)円、最小外接円、最大内接円である。最小領域円は定義上最小の帯域幅を与え、GD&Tセマンティクスの本質である;最小二乗円は計算が最もロバストでサンプリングノイズに最も感度が低いが、帯域幅が体系的に大きく、基準が局所的な欠陥によって引っ張られる。真円度を報告する際にはどちらを用いたかを明記しなければならない。

真直度。左長辺の法線方向偏差のmax−minは0.624 px、右長辺は0.872 pxである(いずれも90点、スパン約1060 px)。図 21.4 の偏差プロファイル(×40)は2本の辺の真の形状を示している:左辺(上)は比較的真っ直ぐで、わずかな高周波起伏のみが見られる;右辺(下)は緩やかな弓形の反りに局所的な小さな膨らみが加わっている。いずれも部品の真の辺形状であり、人為的な段差は存在しない——右辺がより反っていることは、前節の「左右平行度1.487 pxのうち約0.29 pxが辺形状に由来する」部分を直接説明している。

帯域幅量は極値統計である:サンプリング点が多いほど、ノイズのレンジの期待値は大きくなり、max−minも緩やかに増加する——これは中心や角度などの平均型の量が「点数が多いほど正確になる」のとはちょうど逆である。そのため真円度、真直度の検査プロトコルにはサンプリング点数を明記しなければならない;そうでなければ2台の装置の数値には比較可能性がない。

図 21.3: 真円度極座標偏差図(径方向偏差 ×60 を公称円に重ね合わせ):灰色が公称円、黒色が実際のカメラ孔縁(max−min = 0.252 px、48点);真円狂いは低次の起伏が主体で、下方と左下の弧がわずかに外側に膨らんでいる。
図 21.4: 真直度偏差プロファイル(法線方向偏差 ×40、横軸は辺に沿った位置):上が左長辺(0.624 px、比較的真っ直ぐ)、下が右長辺(0.872 px、緩やかな弓形の反りと局所的な小さな膨らみあり)。

21.4 SciVision実装

基礎的な幾何量は SCIMV::SciSvGeometryMeasure から提供され、各APIは セクション 21.2 の1つの公式に対応する:

SCIMV::SciSvGeometryMeasure gm;
double angleDeg = 0, d = 0;
rc = gm.IncludedAngle(t1, t2, l1, l2, /*mode 直線挟角*/1, &angleDeg);  // 上辺⊥左辺直角度
rc = gm.PointToLineDistance(holeCenter, t1, t2, &d);                  // 孔心→上辺
SciPoint corner;
rc = gm.LinesIntersection(t1, t2, /*lineType 直線*/0, l1, l2, 0,
                          /*parallelThresh*/7, &corner);              // R面取り部の仮想角点
double dMin = 0, dMax = 0; SciPoint pNear, pFar;
rc = gm.PointsToLineDistance(rightPts, l1, l2, &dMin, &dMax, &pNear, &pFar);
double width = 0.5 * (dMin + dMax);    // カバー幅(平均値)
double parallelism = dMax - dMin;      // 左|右平行度帯域幅

直線は一律に2つの端点(SciPoint の組)で表現される。IncludedAnglemode=1 は直線間の挟角を返し、結果は [0°, 90°] の範囲に収まる——上辺と左辺が略垂直な場合に約89.9°を返し、直角度は90°からその値を引いたものとなる。LinesIntersectionparallelThresh=7 は平行判定閾値である:2直線の方向が近すぎる場合に交点計算が劣条件となるため、インターフェースは交点の出力を直接拒否する——本例では上辺と左辺が略垂直であり、この閾値から遠い位置にある。PointsToLineDistance は1回の呼び出しで点集合から直線までの距離の最小値、最大値、および対応する点を返す:平均値は対辺の公称距離(カバー幅/高さ)、max−minは平行度帯域幅となる。穴は SciSvEllipseLocator::EllipseLocator で一括して位置決めされ、4つの出力点配列(フィッティング点/有効点/除外点)にはすべて実体を渡す必要があり、そうでない場合rc=120001015となる。

2つの工学的注意点がある。1つ目は、SciSvGDTToolsRoundness/Straightness は正規化された[0,1]のスコアを返し(1に近いほど「良好」)、GD&Tの公差帯域幅ではない点である:本章で実測されたカメラ孔の真円度スコアは0.9964である;また左、右の長辺の真直度スコアはいずれも1.000000である——それらの真の帯域幅は明らかに0.624 pxと0.872 pxで40%近く異なるにもかかわらず、正規化スコアは両者を同じ飽和値に平準化してしまうため、図面の「真直度 ≤0.02 mm」といった記載に対して閾値を設定することが全くできない。スコアと帯域幅の間に公開された換算公式も存在しない;それらは同型の部品間の相対的な傾向の参照にしか使用できず、監視に使用する必要がある場合はまず、帯域幅既知の標準サンプルを用いて「スコア—帯域幅」対応曲線をキャリブレーションしなければならない。公差判定に使用する帯域幅の値は、すべて点配列から max−min として独自に計算する(本章本文中のすべての数値はこの方法で算出されたものである)。第二に、FitLine の出力距離配列 dstPtPositionArr各点から返された直線への符号付き垂直距離ではなく、その意味論は不透明であるため、真直度については独自に「点から直線への符号付き距離」(devToLine)を実装したうえでその範囲を求める必要がある。ついでに古い落とし穴を1つ説明しておくと、FitLine は厳密に垂直な点集合に対して縮退した結果を返すため、左右2つの垂直な長辺についてはすべての点のx/yを入れ替えてから直線を当てはめ、その後得られた直線の端点を元に戻す処理を行っている。本章のすべての画像と数値を生成する完全なプロジェクトは code/geometric_measurement/ に格納されている。

産業事例:真円度評価の基準をめぐる論争

ある軸受工場の軌道輪真円度判定がかつて膠着状態に陥った。顧客の受入検査では真円度計を用いて数千点を密にサンプリングし、最小領域法で評価していたのに対し、生産ラインの視覚システムでは数十個のエッジ点を用いて最小二乗円で評価していた。同一のワークで2つの数値が得られ——生産ラインの値は系統的に約15%小さく(疎なサンプリングが山と谷を見逃して測定値を押し下げる効果が、最小二乗基準自体が系統的に帯域幅を大きくする逆の効果を上回った)、生産ラインで合格と判定されたワークが顧客によって不合格とされ、双方が数カ月にわたって言い分を曲げなかった。最終的な解決策はアルゴリズムではなくプロトコルにあった。検査プロトコルに評価方法(最小領域法 vs 最小二乗法)とサンプリング点数を明記し、生産ラインの値に対してキャリブレーション済みの換算マージンを設定したのである。教訓は一言に尽きる。真円度や真直度といった帯域幅量には、評価方法から切り離された「真値」は存在しない——幾何量を報告する際には、評価方法とサンプリング条件を併せて報告しなければならない

21.5 まとめ

  • 測定連鎖は「画像 → エッジ点 → プリミティブ → 幾何量 → 判定」である:幾何測定の段階は厳密な数式に基づき新たな誤差を生まない。最終的な精度はすべて、エッジ点のノイズ \(\sigma_e\) が当てはめ処理(\(1/\sqrt N\))を経て伝播したものに由来する。本章では実際のカバープレート上で、エッジ当てはめのRMSEが≲0.1~0.28 pxであることを測定した。
  • まずノイズフロアを定め、次に真の信号を判定する:長辺の方向誤差は \(\sigma_\theta\approx(\sigma_e/L)\sqrt{12/N}\approx0.003^\circ\) である。実測された左右辺の非平行度0.065°、上下辺の非平行度0.24°はいずれもノイズフロアをはるかに上回っており、ジッタではなく実際の部品の幾何偏差である。
  • 仮想交点によって面取りされた部品の角点を測定する:カバープレートの4つの角は実際に丸みを帯びた面取りであり、角点は上辺と左辺の仮想交点 (957.5, 121.4) によって与えられ、両辺のそれぞれ数十点の平均による精度を継承している。
  • 帯域幅量(平行度/真円度/真直度)は極値統計量であり、形状の実態を反映している:左右の平行度1.487 pxは、角度による寄与1.20 pxと辺の形状による寄与0.29 pxに分解できる。カメラ穴の実際の真円度は0.252 px、左右の長辺の実際の真直度は0.624/0.872 pxであり——これらはすべて部品自体に由来するものであり、合成欠陥によるものではない。
  • 重要な量は生の点配列から独自に再計算する:SDKのGD&Tツールは正規化されたスコアを返し(帯域幅が40%異なる2つの辺がいずれも1.000000のスコアとなる)、FitLineの距離配列も真の垂直距離ではない——公差判定に使用する数値は、点レベルから自前で計算しなければならない。

幾何量の不確かさ解析とサブピクセル測定に関する体系的な解説については、Stegerらの著作を参照されたい(Steger, Ulrich, と Wiedemann 2018)。本章で使用した平行度、真円度、真直度などの幾何公差は、その記号言語と公差域の定義が幾何寸法公差(GD&T)規格によって定められている。国際体系はISO 1101であり、形状公差、姿勢公差、位置公差、振れ公差の指示と解釈の規則を規定している(International Organization for Standardization 2017)。北米体系はASME Y14.5であり、同一の意味論を工学図面上で表現するもう1つの権威ある規格である(American Society of Mechanical Engineers 2018)セクション 21.3 と産業事例が繰り返し触れている「評価基準をめぐる論争」——最小二乗円と最小領域円が異なる帯域幅を与える点——は、形状誤差の当てはめに関する文献で特に議論されている。MoroniとPetròは各種の最小領域当てはめアルゴリズムの原理とコストを比較しており、本章のmax−minによる帯域幅を規格化された評価方法に接続するための優れた入口となっている(Moroni と Petrò 2008)