4.3 古典的コンピュータビジョン
なぜ重要か
現代のコンピュータビジョンアルゴリズムを学ぶ前に、まず従来のコンピュータビジョン手法が何をしてきたかを理解しておくと役立ちます。これは強固な基盤を与え、後により高度なアルゴリズムを理解しやすくします。

従来のコンピュータビジョンは、エッジ、形状、コーナー、動きといった画像内の有用な情報を見つける方法をコンピュータに教えることに焦点を当てていました。これらの手法は、現代のディープラーニングモデルのように大量のデータから自動的に学習するのではなく、人間が設計したルールに依存していました。よりシンプルではあるものの、多くの基本的なビジョンタスクの解決に貢献し、今日のより強力なコンピュータビジョン技術の基礎を築きました。
古典的手法
フィルタリング

フィルタリングは画像の局所構造を変えます。一部のフィルタはノイズを減らし、別のフィルタは詳細を強調します。
フィルタリングは、各ピクセルを近隣のピクセルを使って更新することで動作します。つまり、アルゴリズムは カーネルと呼ばれる小さなウィンドウを画像上でスライドさせ、各位置で新しい値を計算します。
例:
- 平均ぼかし: ピクセルを近傍の平均値で置き換え、画像を滑らかにします
- ガウシアンぼかし: 近くのピクセルにより大きな重みを与え、より自然なぼかしになります
- メディアンぼかし: ピクセルを近傍の中央値で置き換えます
- シャープニング: 局所的な差を強調し、エッジや細部をより鮮明にします
これらのフィルタが有用なのは、実際のカメラ画像にはノイズ、微小な明るさのゆらぎ、不安定な細部が含まれることが多く、後続のビジョン処理の前に平滑化または強調が必要になるためです。
試してみる:
cd 4.3-Classical-Computer-Vision/code
python filtering.py🚀 スライダーをドラッグして異なるフィルタリングモードを試し、カーネルパラメータを変更して画像の変化を観察してみてください。

二値化 (しきい値処理)
二値化は、グレースケール画像を白黒の結果に変換するシンプルな方法です。基本的な考え方は次のとおりです: しきい値を選び、すべてのピクセルをそれと比較します。ピクセルがしきい値より明るければ白に、そうでなければ黒になります。これにより連続的なピクセル値がはるかに単純な「はい/いいえ」の判断に変わり、対象を背景から切り離しやすくなります。

これは次の場面で役立ちます:
- ドキュメント処理
- 簡単な産業検査
- 制御されたシーンでの前景抽出
試してみる:
cd 4.3-Classical-Computer-Vision/code
python thresholding.py🚀 スライダーをドラッグして異なるしきい値を変更し、画像の変化を観察してみてください。

エッジ検出
エッジはしばしば、強度が急に変化する境界に対応します。

エッジ検出は画像中の重要な境界を見つける方法です。基本的な考え方はシンプルです: アルゴリズムはピクセル輝度がある位置から次の位置へどれだけ変化するかを見ます。変化が非常に小さい場合は同じ領域の一部である可能性が高く、変化が急で大きい場合はその位置がエッジである可能性が高いです。実際には、まず画像を少し平滑化してノイズを減らし、水平・垂直方向の強度変化を計算し、最後に最も強い変化をエッジとして残す方法が多いです。これにより、コンピュータは物体の輪郭、形状の構造、シーンのレイアウトをより明確に強調できます。
エッジ検出は次のことを明らかにするのに役立ちます:
- 形状の構造
- 物体の境界
- シーンの幾何
試してみる:
cd 4.3-Classical-Computer-Vision/code
python edge_detection.py🚀 スライダーをドラッグして異なるモードを試し、パラメータを変更して画像の変化を観察してみてください。

輪郭
輪郭は二値画像内の物体の外形を表します。

輪郭は、コンピュータが二値画像で物体の外形を辿る方法です。通常の流れは次のとおりです: まず画像を白黒に変換し、一方を物体、もう一方を背景として扱います。次に、アルゴリズムは両者が出会う境界を辿り、その外形を連結された点の集合として記録します。この方法では、輪郭は基本的に物体の形状の境界となります。外形が見つかれば、コンピュータはそれを使ってサイズの測定、物体の数え上げ、形状解析を簡単に行えます。
これらは次のことに有用です:
- 形状解析
- 物体のカウント
- 面積と周囲長の測定
試してみる:
cd 4.3-Classical-Computer-Vision/code
python contours.py🚀 スライダーをドラッグして異なるしきい値を変更し、画像の変化を観察してみてください。

モルフォロジー演算
モルフォロジー演算は、二値画像内の白い領域の形を変えるシンプルな画像処理手法です。カーネルまたは構造要素と呼ばれる小さなパターンを画像上で動かし、前景にどう一致するかを確認することで動作します。収縮 (Erosion) は境界のピクセルを削って物体を縮め、小さなノイズを消すことができます。膨張 (Dilation) は境界の周囲にピクセルを追加して物体を広げ、小さな隙間を埋められます。オープニングは収縮の後に膨張を行うことで、主形状を保ちながら小さなノイズを除去します。クロージングは膨張の後に収縮を行うことで、小さな穴を埋め、途切れた部分をつなげます。要するに、モルフォロジーはノイズの多いマスクをきれいにし、物体の形状を解析しやすくするのに有用です。

代表的な演算:
- 収縮 (erosion)
- 膨張 (dilation)
- オープニング (opening)
- クロージング (closing)
これらはマスクがノイズが多かったり断片化していたりする場合に特に有用です。
試してみる:
cd 4.3-Classical-Computer-Vision/code
python morphological_operate.py🚀 スライダーをドラッグして異なるしきい値を変更し、画像の変化を観察してみてください。

特徴検出とマッチング
特徴とは、視覚的に際立った点やパターンのことです。特徴マッチングは画像の比較、視点の整合、幾何関係の推定に使われます。

特徴検出とは、コーナーやブロブ、テクスチャのある領域など、画像中の再認識しやすい特別な点やパターンを見つけることです。特徴マッチングとは、これらの点を 2 つの画像間で比較し、どれが現実世界の同じ位置に対応するかを見つけることです。一般的なワークフローは次のとおりです: まずキーポイントを検出し、それぞれに対してディスクリプタ (局所的な見え方を簡潔な数値でまとめたもの) を計算し、最後にディスクリプタ同士を比較して最良の対応を見つけます。OpenCV では、1 つのディスクリプタを他のすべてと比較する Brute-Force や、大規模な集合での検索を高速化する FLANN などのマッチャが説明されています。良い対応が見つかれば、コンピュータは画像を整合させたり、パノラマを合成したり、動きを推定したり、別の視点から物体を位置特定したりできるため有用です。
この考え方は次のことに重要です:
- パノラマのスティッチング
- 画像の整合
- 位置特定
- ビジュアルオドメトリ
試してみる:
cd 4.3-Classical-Computer-Vision/code
python feature_detection_matching.py🚀 スライダーをドラッグして異なるマッチングモードを変更し、画像の変化を観察してみてください。
よくある誤解
- 「古典的なビジョンは時代遅れ。」
- 古いですが時代遅れではありません。前処理、計測、ルールベースのロジックでは今も有用です。
- 「ディープラーニングがすべての従来の画像処理を置き換えた。」
- 実際には、多くの現代システムが古典的演算を含んでいます。
- 「ある画像で二値化が効くなら、どこでも効くはずだ。」
- 古典的手法は照明や状況に敏感なことがあります。
演習 / リフレクション
- 単純な前景を含む画像に二値化を適用し、連結物体の数を数えてください。
- ガウシアンぼかしの前後でエッジマップを比較してください。何が変わりますか?
- 同じ二値マスクに対して収縮と膨張を試してください。小さな領域はどうなりますか?
- シンプルな古典的手法がディープモデルより優れている可能性のある状況を 1 つ考えてみてください。
まとめ
古典的コンピュータビジョンは、画像変換を理解するための透明な方法を学習者に提供します。また、前処理、フィルタリング、形状推論、軽量な視覚ロジックのために、実システムでも依然として有用です。
推奨される次のステップ
4.4 ニューラルネットワークと CNN へ進んでください。