コンピュータビジョンプロジェクト

プロジェクトのGitHubリポジトリ

概要

このリポジトリは、メフメトジャンコロラド・スクール・オブ・マインズでの2020年秋学期に履修したCSCI437の期間(2020年8月28日から2020年12月14日)に取り組んだすべてのコーディングプロジェクト(ラボ)を紹介しています。これらのラボは、Python、OpenCV、および基本的なコンピュータビジョンの概念を学ぶための包括的なプラットフォームを提供しました。

コースについて

私は2020年秋学期にコンピュータビジョン入門 (CSCI437)を履修しました。この期間中、ウィリアム・ホフ博士とトム・ウィリアムズ博士が授業を担当しました。CSCI437。以下はCSCI437の公式授業概要です:

(I) Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques. Must be Senior level standing. 3 hours lecture; 3 semester hours. Prerequisite: (MATH201 or MATH334 or EENG311),and,MATH332,and,(CSCI200 or CSCI261).

謝辞

講義、スライド、またはCanvasを通じてCSCI437の授業から提供されたPythonスクリプトやコードの断片があります。CSCI437の授業はコロラド・スクール・オブ・マインズで提供されました。これらのラボは次のパートナーと共に行われました:

  • ジャン・ドゥオン
  • メフメト・ユルマズ

ラボの説明

ラボ 1

ラボ1はPythonでOpenCVを使用する基本に焦点を当てています。参加者は、ビデオファイルを読み込み、各フレームに正方形を形成する4点を投影し、各点のZ座標を段階的に調整することで正方形が遠ざかるようにシミュレートするPythonプログラムを書くことが求められます。さらに、各フレームにフレーム番号を表示し、グラフィックオーバーレイを含む最終ビデオを提出して評価を受けます。

ラボ 2

ラボ2は画像変換、特に「XYZ固定角」規約を用いたX、Y、Z軸周りの回転に焦点を当てています。学生は回転行列の計算、カメラ姿勢のための同次変換行列の算出、キャリブレーション行列の作成、およびOpenCVのline関数を用いて点を画像上に投影して馴染みのある物体を形成することが課されます。ラボはコンピュータビジョンにおけるカメラ幾何学と変換行列の理解を強調します。

ラボ 3

ラボ3はテンプレートマッチングに関するもので、学生は正規化相互相関を用いてムービーファイルの各フレームでテンプレート部分画像を追跡することが課題です。課題には、ユーザがムービーの最初の画像からテンプレートを選択し、そのテンプレートを後続の画像で追跡し、テンプレートの位置を示す矩形を各画像に描画し、その位置を示す出力ムービーファイルを作成することが含まれます。学生は、どのテンプレートが最も良い追跡を可能にするか、そしてその理由について実験することを勧められ、正しく一致が識別されたときに観察される相関スコアについて議論することが求められます。

ラボ 4

ラボ4はHSV色空間を用いた色分割に焦点を当てており、色画像の処理において効果的であると講義で説明された手法です。学生は提供された画像から停止標識のピクセルをセグメント化するためにしきい値操作を適用するPython/OpenCVプログラムを作成することが課されます。課題には、停止標識ピクセルを最もよく検出するしきい値の探索、結果をクリーンアップするための形態学的操作の実行、およびセグメント化された画像と使用したしきい値と形態学的操作のパラメータを提出することが含まれます。

ラボ 5

ラボ5では、既存の画像の特定領域に新しい画像テクスチャを挿入し、その投影が正しく見えるようにするタスクが課されます。このプロセスは平面置換として知られ、学生はプロジェクティブ変換(ホモグラフィ)技術を使用して新しい画像を既存画像の平面領域にマップする必要があります。ラボはホモグラフィの実用的な適用を強調し、遠近感を維持しながら画像コンテンツを変更することを目的としています。学生は元画像、置換テクスチャを適用した画像、結合画像、およびPythonプログラムを提出することが期待されます。

ラボ 6

ラボ6では、画像中の5つの対照的な同心円(CCC)で構成されたターゲットを検出し、その姿勢を計算するよう学生に指示します。課題はOpenCVを使用してCCCターゲットを検出し、正しい順序に並べ、OpenCVのsolvePnP()関数で姿勢を計算し、座標軸と姿勢を画像上に描画することを含みます。ラボはターゲット検出、姿勢推定、および視覚的出力のフォーマット化といった概念の応用を強調します。

ラボ 7

ラボ7は画像間のSIFT特徴の検出とマッチングに焦点を当てています。目的は、ある画像から別の画像へのSIFT特徴の正しいマッチを識別し、これらのマッチの正確性を分析することです。ラボは提供されたPythonコードとデータセットの画像を使用し、アルゴリズムのパラメータを調整してマッチ検出を最適化し、特徴マッチングプロセスの性能を評価するために適合率(precision)と再現率(recall)を計算することを含みます。学生はPythonプログラムと、異なるパラメータ設定に対する計算された適合率および再現率の値を提出する必要があります。

ラボ 8

ラボ8は特徴マッチングとアフィン変換のフィッティングを使用した物体検出に焦点を当て、トレーニング画像からクエリ画像へ物体を検出してオーバーレイすることを目的としています。ラボはさまざまなシナリオで物体を検出し、偽陽性を減らすためにインライヤマッチの閾値を調整し、物体検出システムの性能を評価するために適合率、再現率、および精度(accuracy)を計算することを含みます。学生は提供されたPythonコードを修正して実行し、異なる条件下でシステムの性能を分析し、結果と修正したコードを提出することが期待されます。

ラボ 9

ラボ9では、トレーニング画像内の物体に注釈点を配置し、後続のクエリ画像でそれらの点を自動的に正しく表示することが求められます。このラボは特徴抽出、あいまいなマッチを排除するための比率テストを用いたマッチング、外れ値を排除するためにRANSACを用いた2Dアフィン変換のフィッティング、およびトレーニング画像からクエリ画像へ注釈点をマップするための変換の適用を強調します。重要なタスクは、偽陽性と偽陰性のバランスを取るためにインライヤマッチの閾値数を調整し、画像を正しく分類する際の最高の精度を目指すことです。

ラボ 10

ラボ10はホフ変換を使用して線分を検出し、画像内の平行線のセットを特定することに専念しています。OpenCVのcv2.HoughLinesP()関数を介した確率的ホフ変換を利用して、端点で表される線分を検出します。ラボはまた、これらの線分の方向ベクトルを解析して消失点を識別することを含み、2D画像平面に現れる3D空間の平行線の向きを理解することを目的としています。学生はテスト画像を処理して平行な線分を見つけ、検出を最適化するためにパラメータを実験し、結果とPythonプログラムを提出するよう求められます。

注意事項

  • これらのスクリプト/ラボを実行するには、次のサードパーティPythonパッケージが必要です:cv2 & numpy。
  • これらのラボの一部は特定のバージョンのcv2を使用する必要があるかもしれません。残念ながら要件は文書化されていなかったため、自分で解決する必要があります。もしそれを突き止めた場合や行き詰まった場合は、issuesフォームに報告してください。