OpenCV と SVM を使用した画像の分類
画像の分類に OpenCV と SVM を利用するには、一連の手順を実行する必要があります。まず、各画像から抽出された特徴で構成されるトレーニング行列を構築する必要があります。このマトリックスは、各行が画像を表し、各列がその画像の特徴に対応するように形成されます。画像は 2 次元であるため、1 次元の行列に変換する必要があります。各行の長さは画像の面積に等しく、すべての画像で一貫している必要があります。
たとえば、5 つの 4x3 ピクセル画像がトレーニングに使用される場合、トレーニング行列は 5 行 (1 行) になります。画像ごとに)、12 列 (3x4 = 12) が必要です。対応する画像からのデータを各行に「埋める」際、マッピングを使用して 2D 画像行列の各要素をトレーニング行列の対応する行の特定の位置に割り当てます。
同時に、ラベルはトレーニング画像ごとに確立する必要があります。これは、各要素が 2 次元トレーニング行列の行に対応する 1 次元行列を使用して行われます。異なるクラスを表すために値を割り当てることができます (例: 非目には -1、目には 1)。これらの値は、学習データのディレクトリ構造を考慮して、各画像の評価に使用されるループ内で設定できます。
学習行列とラベルを作成した後、SVM パラメーターを設定する必要があります。 CvSVMParams オブジェクトが宣言され、svm_type や kernel_type などの特定の値が設定されます。これらのパラメータは、「OpenCV サポート ベクター マシンの紹介」で提案されているように、プロジェクトの要件に基づいて変更できます。
パラメータを設定すると、CvSVM オブジェクトが作成され、提供されたデータでトレーニングされます。データセットのサイズによっては、このプロセスに時間がかかる場合があります。ただし、トレーニングが完了すると、トレーニングされた SVM を将来の使用のために保存できるため、毎回再トレーニングする必要がなくなります。
トレーニングされた SVM を使用して画像を評価するには、画像が読み取られ、1 次元の画像に変換されます。行列に変換され、svm.predict() に渡されます。この関数は、トレーニング中に割り当てられたラベルに基づいて値を返します。あるいは、前に定義したトレーニング行列と同じ形式で行列を作成し、それを引数として渡すことで、複数の画像を同時に評価することもできます。このような場合、svm.predict().
によって別の戻り値が生成されます。以上がOpenCV と SVM を効率的な画像分類にどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。