私は現在、私の学校でロボット工学クラブの画像認識ソフトウェアに取り組んでいますが、一部は本当に困惑しています。それは形状認識です。アリーナの形状を検出する前に、この画像の正方形を検出できる必要があります。
JavaCVのようなライブラリをいくつか調べましたが、自分の好みに合ったものが見つかりませんでした。参考までに、これが私が形を決定しようとしている画像です
私は現在、私の学校でロボット工学クラブの画像認識ソフトウェアに取り組んでいますが、一部は本当に困惑しています。それは形状認識です。アリーナの形状を検出する前に、この画像の正方形を検出できる必要があります。
JavaCVのようなライブラリをいくつか調べましたが、自分の好みに合ったものが見つかりませんでした。参考までに、これが私が形を決定しようとしている画像です
ハフ変換を適用してみましたか?
あなたの正方形はまっすぐなエッジを持っているので、それはあなたが必要とするもののようです。
私はあなたの仕事に似たようなことをしていましたが、オブジェクトのクラス(抵抗、コンデンサなど)と、実際の白黒写真でのそれらの境界を認識する必要がありました。
基本的に、メソッドは次のようなものでした。
あなたの場合-正方形の最も簡単な特徴は、その面積と、見つかったセグメントに属する2点間の最大距離を見つけることです。そしてその前に、 「閉じる」操作(拡張->侵食)で画像を前処理する必要があります
また、正方形が線で切断されているかどうかを認識し(そして、その線を削除してから再度認識し)、正方形が他の正方形と重なっていないかどうかを確認するための優れたアルゴリズムを作成することもできます。
個人的には、のような複雑なことをするライブラリは知りませんlibrary.recognizeSquaresOnImage(params)
。認識のために画像を準備するためのいくつかの便利な方法が提供されます-あなたのタスクのコア-あなたは自分でしなければなりません。
すべての認識問題には、「認識パイプリー」のすべてのステップで不確実な結果を絞り込むために使用できる独自の機能があります。たとえば、私のタスクでは、オブジェクトがかなり白い背景に黒く、多かれ少なかれ互いに分離されていることなどを知っていました。
私のプロジェクトはOpenCVライブラリを使用してC++で記述されており、画像の読み取り/書き込みとウィンドウへの表示のみにOpenCVライブラリを使用していました。ライブラリの他のメソッドを使用することは許可されていませんでした。
参考までに、どのようにそれを行うことができるか-ここにプロジェクト全体があります。今でも完全には機能しません。分類器のキャリブレーションが必要です。
それがより高いレベルでどのように機能するかをよりよく理解するには、main.cppファイルを見てください。