24 輪郭分析
チャプター 23 のBlob分析は対象を画素の塊として統計的に扱い、面積、重心、慣性軸などを求める——これは「この塊」に関する問いに答えるものである。しかし多くの産業上の問題は「塊」ではなく境界に関するものである:このプレス部品の外形は設計図からどれだけずれているか?エッジにバリ、膨らみ、欠けはないか?このような場合に必要となる表現が輪郭(contour)——対象の境界に沿って順に並んだ順序付きサブピクセル点列である。順序付きであることで、境界に沿って点ごとに走査したり、セグメントに分割したり、欠陥の位置を特定したりすることが可能になる;サブピクセルであることで、精度が画素格子に制限されなくなる。輪郭は欠陥検出と形状計測における高分解能な言語である:領域は対象の「量」を示すのに対し、輪郭は対象の「形状」を示す。
本章では、一連の実産業サンプル画像を用いて全実験を行う(図 24.1):楕円形の部品をバックライト(透過照明)下で撮像し、2592×1944の高コントラストシルエット画像を得た。純黒の背景に明るい白い部品が映り、境界には幅が狭く急峻なグレースケール遷移帯が存在する——これはまさにサブピクセル輪郭抽出の最適な入力である。サンプル画像は計3枚ある:001は外形がきれいな楕円である標準品(マスター)、003と002はそれぞれエッジ欠陥を持つテスト品である。003の上縁には外側に盛り上がった2箇所の余肉欠陥があり、002の下縁にはそれより大きな膨らみが1箇所ある。本稿では3点の輪郭を抽出し、マスターの特徴を計測し、マスターに対して平滑化・リサンプリング・セグメンテーション操作を行い、最終的にテスト品とマスターを点ごとに比較して、エッジ欠陥を自ずと顕在化させる。
24.1 輪郭抽出
輪郭抽出はエッジ検出(チャプター 13)の成果を基にしている:エッジ検出は「どの画素がエッジか」を示す画像を出力するが、画素間には順序がない;輪郭抽出はさらに2つの処理を行う——リンク(linking)により隣接するエッジ画素を鎖状につなぎ、サブピクセル化により鎖に沿って各点の位置を整数画素からサブピクセルに精密化する(チャプター 13 のサブピクセルの節と同じ考え方で、勾配方向に沿った3点の振幅に放物線補間を行う;同章で紹介したSteger式曲線抽出器は直接サブピクセル線輪郭を出力する)。リンクの結果は順序付き点列となり、閉じた対象の輪郭は始点と終点がつながってループ状になる。
実験では全画像ROIに対し、サブピクセルCanny法による抽出を行った(ヒステリシス二重閾値20/40、平滑化係数2.0)。重要なパラメータは最短輪郭長minLen=600である:シルエット外の黒い背景は勾配がほとんどなく、不要な輪郭はほとんど発生しないため、長さによるフィルタリングは保険的な役割を果たす——最終的に3点の部品それぞれにつき1本の閉じた輪郭のみが残り、いずれも3627点であった。高コントラストなシルエット下では、3枚の画像の境界鎖長はほぼ一致しており、マスターの周長は3826.3、上縁欠陥品は3844.5、下縁欠陥品は3846.0であった——テスト品の周長がマスターよりわずかに長いのは、突出欠陥により輪郭がわずかに遠回りした直接的な証拠である。一般的に輪郭の点数は鎖の経路とノイズの実現に依存するため、同じ形状でも2回の抽出で点数が同一になる必要はなく、同一にそろえる必要もない——後述する比較アルゴリズムは「最近傍距離」に基づいて動作するため、2本の輪郭の点数を一致させる必要はない。
領域と輪郭は同一対象の2つの表現であり、相互に変換可能である:領域の境界を求めると輪郭が得られ、閉じた輪郭を塗りつぶすと領域が得られる。しかし情報の「取得容易性」は全く異なる——連結性や穴の数は領域上で計算するのに適しており、局所的な境界のずれや区分的な幾何特性は輪郭上で計算するのに適している。表現を選ぶことは、問題の言語を選ぶことである。
図 24.2 は2本の輪郭を元の画像に重ねたものである:緑色がマスター、オレンジ色がテスト品である。サブピクセル点列はグレースケール遷移帯の中心線に沿っており、楕円の高曲率端部は滑らかで連続的である——これはバックライトによるシルエットが鮮明な境界を忠実にサブピクセル抽出器に渡している証拠である。
24.2 輪郭特徴
閉じた輪郭はBlob特徴に対応する一連の幾何量を保持している。周長は隣接点間の距離の和である;面積は画素を塗りつぶして数える必要はなく——グリーンの定理により領域積分を境界上のループ積分(すなわちシューレース公式)に変換できるため、順序付き点列から直接面積が得られる。中心は外接矩形の幾何学的中点であり、重心は囲まれた領域の質量中心であり、方向は二次モーメントの主軸から求められる。2つの無次元形状因子として、円形度は円に近い度合いを測り(円で1、細長いほど小さくなる);矩形度は面積と最小外接矩形の面積の比である。マスター輪郭の実測値を以下に示す:
SciSvContourFeature)
| 特徴 | 実測値 |
|---|---|
| 面積 | 751878.4 px² |
| 周長 | 3826.33 px |
| 中心 | (1300.53, 950.50) |
| 重心 | (1300.53, 950.52) |
| 方向 | −0.00° |
| 円形度 circularity | 0.321 |
| 矩形度 rectangularity | 0.785 |
| 最小外接矩形 | 1726.7 × 555.0 @ −89.99° |
この表自体が自己検証になっており、どの数値も「これは標準的な楕円である」ことを示している。最小外接矩形は1726.7 × 555.0、方向は−89.99°——長軸1726.7 pxが水平、短軸555 pxが垂直で、長短軸比は約3.1である。矩形度は751878.4/(1726.7×555.0)=0.785であり、ちょうど\(\pi/4\)に等しい:楕円の面積\(\pi ab\)とその外接矩形の面積\(4ab\)の比はまさに\(\pi/4≈0.785\)であり——幾何学的な同一性を逆に推定できるほどきれいな数値である。円形度が0.321と低いのは、これが3:1の扁平な楕円であり、円からかけ離れているためである。特に注目すべきは中心と重心がほぼ一致していることである:(1300.53, 950.50)対(1300.53, 950.52)で、差は0.02 px未満——標準品は外形が対称であるため、重心は自然に幾何学的中心に位置する;部品に非対称な欠陥があるとこれら2点は分離し、中心と重心の差自体が形状の非対称性のプローブとなる(後述する位置合わせの節でこの点を用いる)。
円形度の定義はツールキットによって異なる:\(4\pi A/P^2\)を用いるものもあれば、\(A/(\pi r_{\max}^2)\)(\(r_{\max}\)は中心から輪郭までの最大距離)を用いるものもある。2つの定義は同じ形状に対して異なる値を与えるため、ライブラリをまたいで円形度を比較することに意味はなく、同一の生産ライン内で一貫性があれば十分である。
これらの特徴とBlob特徴(チャプター 23)は「境界版」と「領域版」の関係にある:数値的には一致するはずであるが、輪郭版はサブピクセル点列により精度が高く、境界自体のみに依存する——2つの対象が領域上で接着して1つのBlobになっている場合でも、それぞれの輪郭は明確に分離できる可能性がある。正直な注記として、現在のSDKには曲率(curvature)APIが存在しない;曲率が必要な場合(例えば楕円端部の丸み品質を評価する場合)は、平滑化後の輪郭から独自に計算すればよい——隣接点の接線角の変化率を弧長で割る(または点列に対して局所的な円の当てはめを行う)ことで、離散的な曲率推定値が得られる。
24.3 輪郭操作
計測と比較の前に、輪郭に対して3種類の前処理操作を行うことが多い。
平滑化(smoothing):点列の座標に対して移動窓平均を行う。実験では窓サイズ31を用い、マスター輪郭の周長は3826.33から3820.25に収縮した(約0.16%)。収縮量が微小であることは、バックライトによるシルエットの境界が十分にきれいであり——フィルタリングすべき高周波の揺らぎがほとんどないことを正確に示している。ただし収縮の方向は一定である:ノイズにより点列は真の境界の周りを往復して揺らぎ、揺らぎによるギザギザはすべて高周波成分であり、点間距離を累積した周長はギザギザ1つ1つの長さを計上する;平滑化はローパスフィルタリングであり(チャプター 6 が画像に対して行う処理を1次元点列上で再現したもの)、高周波の揺らぎを除去するため周長は減少するだけで増加することはない。工学的な帰結として、周長はノイズにより系統的に大きめに偏るため、周長を計測する前には平滑化を行うか、平滑化パラメータを固定して比較可能性を確保する必要がある——きれいなシルエット下ではこの偏りは小さいが、ノイズの多い画像では固定された平滑化戦略が比較可能性の前提となる。
リサンプリング(resampling):3627点を指定された点数に減らす。実験では目標点数300でリサンプリングを行い、輪郭に沿ってほぼ等間隔な300点を得た——これは後続の点ごとの計算のコストを制限したり、当てはめのための均一なサンプルを提供したりするためである。ここにはパラメータのセマンティクスに関する落とし穴がある、セクション 24.5 を参照されたい。
セグメンテーション(segmentation):輪郭を幾何学的特性に基づいて直線セグメントと円弧セグメントに分割する。マスター輪郭は16セグメント=12本の直線+4本の円弧に分割される(図 24.3:直線セグメントは緑色、円弧セグメントは赤色、リサンプリング点はシアンの目盛り):楕円の上部と下部の緩やかな円弧は複数の短い直線セグメント(緑色)で近似され、左右の2つの高曲率端部は円弧(赤色)として認識される——これはまさに楕円に対する「線弧分解」の合理的な解釈であり、曲率の小さい部分を直線、曲率の大きい部分を円弧として扱うものである。セグメント数と線弧の分類は平滑化量と2つの距離閾値に敏感であるため、パラメータは特徴サイズに合わせて調整する必要がある。線弧分解の価値は後続の処理にある:各直線セグメントから方向と位置を当てはめ、各円弧セグメントから中心と半径を当てはめることで、「輪郭」は寸法を付記可能な幾何図面へと昇格し——幾何計測とロボットの軌道プログラミングの道を開くものである。
24.4 輪郭比較:欠陥検出
本章のクライマックスは、試験片の輪郭をマスター輪郭と点ごとに比較し、偏差が許容値を超える箇所を自動的に顕在化させることである。原理は3段階で構成される——レジストレーション(位置合わせ):参照点と参照角を用いて、マスター輪郭を試験片の座標系に変換する;点ごとの最近接距離:試験輪郭の各点について、位置合わせ後のマスター輪郭までの最近接距離を求める;閾値判定:偏差が許容値maxDisを超える点を超過点として記録し、超過点が存在すればNGと判定する。これはまさにGD&Tにおける輪郭度公差(profile tolerance)の画像化検査であり、実際の輪郭が理論輪郭の両側にそれぞれmaxDisの幅を持つ公差帯内に収まることを要求するものである。
実験ではmaxDis=5 pxとした。位置合わせの基準は外部位置決めに由来する:各画像の明領域に対して0次モーメントと2次モーメントの積分を行い、それぞれの中心と主軸角を求める(これが必須である理由は後述する)。上縁欠陥片(003)をマスターと比較した結果は以下の通りである。
- 最大偏差 18.70 px @ (1738.5, 695.4)——位置はまさに上縁右側の突起欠陥であり、判定はNGである。
- 点ごとの偏差の平均値は1.64 px——これは2つの独立した撮像・独立した位置合わせによるサブピクセル輪郭の全周にわたるベースラインのフィッティング度であり、1726.7 pxの長軸に対して約万分の9であり、高解像度シルエット抽出の精度の根拠となるものである。
- 欠陥区間は2か所自動的に位置特定される:区間#1 pts[418..514](ピーク18.70 px、上縁右側の突起)、区間#2 pts[3141..3232](ピーク17.86 px、上縁左側の突起)。
GetOverThresholdContoursも同様に2区間の超差輪郭を出力する。 - 底縁膨らみ片(
002)をマスターと比較に切り替えると、最大偏差は33.21 px @ (1554, 1250)に上昇し、平均は2.36 pxとなり、同様にNGと判定される——大きな膨らみほど大きなピーク偏差が得られる。
図 24.4 は色ごとに精読する価値がある:青は位置合わせ後のマスター輪郭——「理論形状」である;試験片の輪郭は偏差に応じて色分けされており、≤2 pxは緑、2~5 pxは黄、>5 pxは赤である;赤の十字は最大偏差点を示す。2つの赤の塊はまさに上縁の2つの突起を覆っており、残りの輪郭はほぼすべて緑である。肉眼では近づかなければ判別できないあの2か所の余肉欠陥が、偏差図上では隠れる場所がない——輪郭比較は「欠陥を探す」ことを「温度計を読む」ことに変えるのである。
点ごとの最近接距離は一方向の尺度である:「試験点がマスターからどれだけ離れているか」だけを問い、逆は問わない。試験片の輪郭が一部欠落している場合(例えば欠け)、試験点はいずれもマスターの近くに位置する——厳密な形状距離(例えばハウスドルフ距離)は双方向の最大値をとる。実務では「双方向にそれぞれ比較を実行する」ことで両種の欠陥をカバーすることが多い。
最後に本節で最も重要な教訓である:位置合わせの参照点はどこから来るのか。まず、実際のサンプル画像で直接覆される素朴な仮定——「3枚の画像はすべて同じ工作物なので、姿勢は当然同じであり、恒等位置合わせで十分である」——を考えてみる。外部位置決めの実測値はこれを否定する:マスターの明領域中心は(1300.00, 950.00)、上縁欠陥片は(1304.97, 954.02)で6.39 pxずれており、底縁欠陥片は(1301.25, 951.38)で1.86 pxずれている。実際の撮像では工作物を配置するたびに位置ドリフトが生じるため、位置合わせは恒等変換ではなく、必ず実施しなければならない;無理に恒等位置合わせを適用すると、この6.39 pxの全体的な位置ずれがすべての点に焼き込まれ、欠陥信号が完全に埋没してしまう。
では位置合わせの基準には何を用いるべきか。一見便利な方法は、それぞれの輪郭の重心を用いることである——計算が無料であり、欠陥片には欠陥片の重心を用いる。本章のプローブは誠実な比較結果を与えている:上縁欠陥片の輪郭重心はマスターに対して6.385 pxドリフトしており、外部位置決めで測定された6.390 pxとほぼ完全に一致している——つまり、欠陥の重心に対する自身の寄与はわずか約0.005 pxであり、ここでは2つの基準はほぼ等価である(最大偏差18.697対18.698 px)。理由は単純である:欠陥は大きな楕円全体に対して小さすぎ(余肉は明領域の数百万分の数に過ぎない)、重心の変位は工作物の実際の配置ドリフトに支配され、欠陥では重心を動かせないのである。
しかし規律は依然として成り立ち、欠陥の大きさに比例する:被測定対象自身の重心で自身を位置決めすることは体系的なリスクである——欠陥が大きいほど、余分な(または欠落した)材料が重心をより大きくずらし、位置ずれがより大きな欠陥として読み取られ、測定が被測定物によって汚染される。本例では欠陥が小さいためリスクは顕在化していないが、大きなバリを持つサンプルに切り替えると、この方法は破綻する。堅牢な方法は参照点を外部位置決めから取得することである:治具、位置決めピン、または検査対象外領域に対するモーメント積分/テンプレートマッチング(チャプター 19 で議論された位置決め基準の問題がここで再出現する)。本章ではまさに明領域全体に対するモーメント積分を用いている——これは一挙両得である:6.39 pxの実際の変位を補正すると同時に、百万ピクセルをカバーすることで局所的な欠陥に対して本質的に免疫がある。欠陥が大きいほど、この規律は重要になる。
24.5 SciVision 実装
本章のパイプラインは4つのクラスにまたがる。抽出にはSciSvContourExtractionを用いる:
SCIMV::SciSvContourExtraction ext;
SciContourArray mAll;
long rc = ext.ExtractContours(srcM, fullROI, /*precision サブピクセル*/0, /*method canny*/1,
/*filterCoeff*/2.0, /*lowThreshold*/20, /*highThreshold*/40,
/*minContourLength*/600, /*maxContourLength*/100000, &mAll);precision=0はサブピクセル輪郭を出力する;method=1はCannyルートであり、filterCoeffはその平滑化スケール、2つの閾値はヒステリシス閾値である;minContourLength=600は浮遊輪郭のフィルタリング閾値である。maxContourLengthの有効範囲は[0, 100000]であることに注意——これより大きな値(例えば1000000)を渡すと、直接パラメータエラーが発生する。特徴量にはSciSvContourFeatureを用い、特徴量ごとに1回呼び出す:
SCIMV::SciSvContourFeature feat;
feat.GetContourArea(mC, &area);
feat.GetContourPerimeter(mC, &perim);
feat.GetContourCenter(mC, ¢er);
feat.GetGravityAndOrientation(mC, &gravity, &orient);
feat.GetContourCircularity(mC, &circ);
feat.GetContourRectangularity(mC, &rectg);
feat.GetSmallestRect(mC, &rcCenter, &rw, &rh, &rang);操作にはSciSvContourOperationを用いる:
SCIMV::SciSvContourOperation op;
op.SmoothContours(mOne, /*window*/31, &smoothed);
op.SampleContour(mOne, /*method 目標点数*/1, /*sampleSize*/300.0, &sampled);
op.SegmentContours(mOne, /*smooth*/5, /*maxLineDistance1*/8.0f,
/*maxLineDistance2*/4.0f, &segs, &segType);SegmentContoursの2つの距離閾値は線形フィットの許容偏差を制御し、出力されるsegTypeは各区間の種類を標識する(0=直線、1=円弧)。比較にはSciSvContourContrastを用い、参照点/角は外部位置決め(明領域のモーメント)に由来する:
SCIMV::SciSvContourContrast cmp;
rc = cmp.ContrastContour(tOne, mOne, /*normRefPt*/refM, /*actRefPt*/refTest,
/*normAng*/angM, /*actAng*/angTest, /*maxDis*/5.0, /*outputMode*/0,
&maxPair, &maxOff, &results, &minPair, &minOff, &avgOff, &allOff);
SciContourArray overs;
cmp.GetOverThresholdContours(&overs); // 超差輪郭区間を直接取得参照点/角はそれぞれ2つある:norm*はマスターの姿勢を記述し、act*は試験片の姿勢を記述し、位置合わせ変換は両者の差から導出される——本例では両者がそれぞれの明領域のモーメントから独立して測定されており、それにより実際の配置ドリフトが補正される。実測で遭遇した落とし穴(エンジニアリング規約に記録済み):
outputMode=0のスカラー出力のみが信頼できる。outputMode=3ではmaxOffは無意味な値(実測値−0.052)となり、resultsはOKと誤判定する;点ごとのallPointsOffsetはいずれのモードでも完全である(本例では3627個の符号付き偏差)。avgPointsOffsetは信頼できない:実測では9.373が返されるが、allPointsOffsetから自前で計算した真の平均値は1.64である——平均値は自前で計算すること。SampleContourのmethod=0/3はアップサンプリングであり、method=1のみが目標点数によるダウンサンプリングとなる——点数を減らすつもりで300を渡しても、却ってより多くの点数を受け取る可能性がある。- 一部の輪郭関連ヘッダーファイル(
SciSvContourOperation/ContourContrastなど)は無条件に#define DLL_EXPORTSしている(SDKの誤記);これらをdllimportスタイルのヘッダーファイルの後にインクルードすれば正常にリンクされる。
本章のすべての画像と数値を生成する完全なプロジェクトはcode/contour_analysis/にあり、サンプル画像はそのsample/サブディレクトリに格納されている。
産業事例:ゴムシールリングのバリ検査
ゴムシールリングを加硫・離型した後、パーティングラインに残留するバリは主な欠陥であり、代表的な検査方式はまさに輪郭比較である:バックライト(透過照明)でシルエットを取得し、リングの外輪郭を抽出して標準輪郭と点ごとに比較し、超差をバリとして判定する——本章の3つの楕円サンプルと同じ方法である。ある生産ラインの初版案では手を抜いて工作物自身の重心を位置合わせの参照点として用いていた——小さなバリでは問題なかった(本章の実測通り、小さな欠陥による重心の移動は0.01 px未満である)が、大きなバリが出現すると、余分な材料が重心をずらし、位置合わせ後の標準輪郭が全体的に位置ずれし、反対側の無傷の縁が広範囲にわたって超差と判定され、「偽欠陥」のアラームが多発して再検査の作業量が高止まりしていた。改訂版案では金型に組み込まれた位置決めピン穴を外部基準として用いる方式に変更した:まず2つのピン穴で工作物の姿勢を位置決めしてから輪郭比較を実行することで、誤報率は直ちに無視できるレベルまで低下した。この教訓は本章の実験と完全に一致する:欠陥が大きいほど、欠陥を位置合わせに関与させてはならない——位置合わせの基準は欠陥の影響を受けない外部特徴から取得しなければならない。
24.6 まとめ
- 輪郭 = 順序付けられたサブピクセル境界点列であり、Blob領域表現の「境界版双対」である:領域は統計と連結性に適しており、輪郭は境界偏差、区分幾何、高精度測定に適している。抽出手順は「エッジ検出 → 連結 → サブピクセル細線化」であり、
minLenによる長さフィルタリングが浮遊輪郭を消去する役割を担う;バックライト(透過照明)によるシルエットが鮮明な境界をサブピクセル抽出器に提供し、3つの試験片はそれぞれ3627点の閉じた輪郭を得る。 - 輪郭特徴量はBlob特徴量と一対一に対応するが精度がより高い:面積はグリーンの定理により境界から直接積分され、矩形度0.785はまさに\(\pi/4\)であり——これが標準的な楕円であることを自ら証明している;対称なマスターの中心と重心はほぼ一致しており(差<0.02 px)、両者の差は形状の非対称性のプローブとなる。円形度などの形状因子はライブラリごとに定義が異なるため、ライブラリ間で比較することはできない。
- 平滑化はローパスフィルタである:ウィンドウ31の平滑化により周長は3826.33→3820.25となる——鮮明なシルエット下での収縮はわずか0.16%であるが、その方向は一定であるため、周長測定では平滑化の方針を固定しなければならない;区分処理により楕円は12本の直線 + 4本の円弧に分割され(平坦部は直線、端部は円弧)、寸法を記入可能な幾何記述へとグレードアップする。
- 輪郭比較 = 位置合わせ + 点ごとの最近接距離 + 公差判定であり、輪郭度検査の画像による実装である:本章の実験では1.64 pxのベースライン偏差で、上縁の2つの突起(ピーク18.70および17.86 px)と底縁の膨らみ(ピーク33.21 px)を明瞭に捉え、欠陥区間を自動的に位置特定してNGと判定した。
- 位置合わせの基準が成否の分岐点である:実サンプルの3つの工作物は同一位置にはなく(外部位置決めで測定されたオフセットは6.39および1.86 px)、位置合わせは必須であり、かつ基準は堅牢でなければならない——本章では明領域全体のモーメント積分を用いることで、実際の変位を補正すると同時に局所的な欠陥に対する免疫を獲得した;被検体自身の重心を用いる方法は欠陥が大きくなると失効する(本例の小さな欠陥による重心への寄与はわずか0.005 pxであるが、大きなバリでは破綻する)。チャプター 26 では、比較に基づく欠陥検査をより一般的な形態へと一般化する。
輪郭抽出(境界追跡)の古典的なアルゴリズムはSuzukiとAbeによる(Suzuki と Abe 1985);輪郭のチェーンコード表現と処理は、線画画像のコンピュータ処理に関するFreemanの総説(Freeman 1974)に遡る;また、本章の区分操作で用いられている折れ線簡略化の思想は、DouglasとPeuckerの古典的なアルゴリズム(Douglas と Peucker 1973)に起源を持つ。サブピクセル輪郭抽出、輪郭分割、輪郭に基づく測定に関するより体系的なエンジニアリング的な解説については、Stegerらの著作(Steger, Ulrich, と Wiedemann 2018)をさらに参照されたい。




