以前の記事を参照してください:単純な動き認識アルゴリズムと画像内のオブジェクトの変位を見つけるためのアルゴリズム。 「動的画像の空間構造の分析」に関する修士論文を書き始めたとき、画像や動く物体を認識するためのアルゴリズムの既製の例を見つけるのが非常に難しいという問題に遭遇したという事実によって、これらの記事を書くことに動機付けられたことを思い出させてください。どこでも、文学とインターネットの両方で、裸の理論は1つだけです。それからかなりの時間が経ち、なんとか自分の論文を弁護し、赤い卒業証書を受け取ることができました。そして今、私は自分の経験を共有するために書いています。
ですから、私が論文に取り組み始めたとき、コンピュータービジョンの分野での私の知識はゼロでした。どこから始めましたか?上記の記事で説明されている画像の最も簡単な実験から。私はいくつかの原始的なアルゴリズムを書きました。そのうちの1つは、移動するオブジェクトが配置されているスポットの形で私を示し、2つ目は、より大きな画像で画像の一部を見つけました(当然、ゆっくりと機能しました)。
次は何ですか?さらに差し込む。私の仕事は、無人の航空機が航空写真をナビゲートしたり、道路に沿って移動する車を追跡したりすることでした。そして、私はタスクを開始する方法がわかりませんでした。私は何を始めましたか?理論を読んでください。そして理論によれば、コンピューターのビジョンは次の段階に分けられます。
- 画像の前処理(ノイズ除去、コントラスト強調、スケーリングなど)。
- 詳細の検索(線、境界線、関心のあるポイント)
- 検出、セグメンテーション。
- 高レベルの処理。
さて、わかりました、私はこれらすべてを行うべきプログラムの図を描きました:
要するに、私は人工知能のレベルで壮大な何かを作成しなければならなかったことがわかりました。さて、私はそれを作成しようとします。Visual Studioを使用して、C#でクラスのスカルプトを開始します。より正確には、クラスブランク。少し後、自分が何を目指しているのか気づきました…。
それで、私は最初のステップを練習し始めます。前処理。私は彼女から始めました
- これが最も簡単です。
- これはリストの最初のステップです。
何が起こったのかを確認するために、画像にさまざまなフィルターを適用し始めました。たとえば、Sobelフィルターを適用してみました。ガウスブラー
を使用して画像からノイズを除去します。
メディアンフィルタリングとエッジ選択を学習し
ました。講堂からのコンピュータービジョンに関する講義は、非常に役立ちました。
そのため、知識ははるかに多くなりましたが、それでも問題を解決する方法は明確ではありません。その時までに、修士論文のトピックとタスクは何度か改訂され、その結果、「航空写真フレームを使用してUAVの軌道を追跡する」というように定式化されました。つまり、私はいくつかの写真を撮り、それらに沿って軌道を構築する必要がありました。
輪郭を破線(多くのセグメントで記述)の形で記述し、これらの線がどれだけシフトしたかを比較するというアイデアを思いつきました。しかし、2つの隣接するフレームであっても、輪郭が非常に異なっているため、結果として得られる破線のセットを適切に比較する方法がないことが判明しました。さまざまな方法とそれらの組み合わせを使用して、輪郭自体を改善しようとしました。
- OpenCVライブラリからのクラシックキャニーエッジセレクション
- 上司が開発したエッジ検出アルゴリズムの改善。
- 二値化による輪郭の選択。
- セグメンテーションによる輪郭の選択。セグメンテーションは、さまざまな方法で、特にテクスチャ機能を使用して実行されました。
その結果、非常にゆっくりと動作するアルゴリズムがごちゃ混ぜになりましたが、1つのイオタを結果に近づけることはできませんでした。私の作品の一部は、この記事の資料として使用されました。
さて、監督はアイデアを提案しました:特別なポイントを使用する必要があります。そして、彼はこれらの重要なポイントを計算する方法についてのアルゴリズムさえ与えました。これは非常に非標準的な方法だったと言わざるを得ません。これは、ハリス検出器、BRISK、MSER、またはAKAZEではありません。私も使ってみましたが。しかし、結局のところ、監督者によって提案された検出器はよりうまく機能しました。そして、これがその仕組みです。まず、次の式を使用して輪郭の準備を計算します。
次に、この関数の極値を見つけます。これらが特別なポイントです。言うまでもなく、ポイントには「ピーク」と「ピット」の2つのタイプがあります。画像内のこれらのポイントの例を
次に示します。次に、取得したポイントから、応答が最大の50ポイントを選択します。これらすべてのポイントについて、三角形が作成されます。これらのポイントによって形成される三角形の数は次のとおりです。
ここで、kは計算に関係する特異点の数です。各三角形について、0から16383までの特別なインデックスが計算されます。次のステップは、セル番号が三角形のインデックスに対応する特別な配列に三角形を分散することです。このような配列の各セルは、三角形のリストです。このような配列は、2つの比較されたフレームによってコンパイルされます。比較は、配列内の各セルを別のフレームの配列内の対応するセルと照合することによって行われます。合計で16384のグループを一致させる必要があります。これは、かなり短期間でコンピューターにとって非常に実行可能なタスクです。
配列を照合する場合、照合マトリックスに入力します。水平方向の行列は一致した三角形間の角度であり、垂直方向の目盛りは最も長い辺の長さの比率として計算される目盛りです。見つかったスケールと角度は、最も一致するマトリックスのセルです。同様の比較を行って、画像の水平方向と垂直方向の変位を計算します。
この方法の詳細については、記事をご覧ください。
したがって、水平および垂直方向の変位、角度、およびスケールの変化(つまり、UAVが上下した)が見つかりました。一連のフレームにわたる軌道のトレースをシミュレートし、この非常に軌道を描くプログラムを作成する必要があります。論文の準備ができていると言えます。
