ターゲット プラクティス解析のためのリアルタイム イメージの取得、イメージ処理、固定小数点ブロブ解析
この例では、GigE Vision® カメラまたは Web カメラからリアルタイム イメージを取得し、固定小数点ブロブ解析を使用してイメージを処理し、レーザー ピストル ターゲットをスコアリングするためのワールド座標を決定する方法について説明します。
この例で取り上げているテクノロジーは、車の前にある物体までの距離の推定 [1]、細胞の医用画像解析 [2]、小惑星の検出 [3] など、幅広い用途に使用されています。
この例の主な機能には次のようなものがあります。
測定値を収集するための固定小数点ブロブ解析
リアルタイム イメージの取得
イメージ ポイントのワールド座標を決定するためのカメラ キャリブレーション
収集された測定値のワールド単位での正確性を確保するための、レンズ歪みのイメージ補正
ピクセル位置を実世界の単位の位置にマッピングすることによる、イメージ ポイントのワールド座標の決定
必要な製品
この例では、アルゴリズムのために次の製品を使用します。
MATLAB®
Fixed-Point Designer™
Computer Vision Toolbox™
Image Acquisition Toolbox™
Image Processing Toolbox™
この例をシミュレーション モードで実行する場合、カメラは必要ありません。シミュレーション モードでは記録されたイメージが読み込まれ、アルゴリズムにより、カメラが接続されている場合と同様に実行されます。
GigE Vision カメラを使用する場合は、次のサポート パッケージが必要です。
Image Acquisition Toolbox™ Support Package for GigE Vision® Hardware
Web カメラを使用する場合は、次のサポート パッケージが必要です。
MATLAB® Support Package for USB Webcams
ハードウェア セットアップ
カメラ
Image Acquisition Toolbox™ では、イメージとビデオをカメラおよびフレーム グラバーから MATLAB® および Simulink® に直接取得できます。Image Acquisition Toolbox™ Support Package for GigE Vision® Hardware または MATLAB® Support Package for USB Webcams を使用して、リアルタイム イメージを取得して解析を実行するようにカメラを設定します。
カメラの設定の詳細については、Setting Up Image Acquisition Hardware (Image Acquisition Toolbox)を参照してください。
ターゲット
次のコマンドを使用して、この例で使用する印刷ターゲットを作成します。このコードは、見開きにしたものが両面印刷されるポストスクリプト ファイルを生成します。片側にターゲット、もう片方の側にカメラ キャリブレーションのチェッカーボードが印刷されます。
distance_m = 10; offset_mm = 0; print_target = true; LaserTargetExample.make_target_airpistol10m(distance, offset_mm, print_target)
サンプル ターゲット airpistoltarget_10m.pdf
は +LaserTargetExample/targets_for_printing
フォルダーにあります。
設定
ターゲットのチェッカーボード側を向くように、カメラを設定します。撮影者はターゲットの方を向いています。ターゲットとカメラをボード上に取り付けることで、位置を固定しておくことができます。
アルゴリズム
イメージのキャリブレーション
カメラのキャリブレーションは、レンズとイメージ センサーのパラメーターを推定するプロセスです。これらのパラメーターは、カメラで撮影したオブジェクトを測定します。カメラ キャリブレーター (Computer Vision Toolbox)アプリを使用して、ターゲットの背面にあるチェッカーボード パターンを検出し、歪みを取り除きます。ターゲットの周囲光のしきい値を決定します。イメージが飽和しないように、カメラの設定または照明を調整しなければならない場合があります。関数pointsToWorld
(Computer Vision Toolbox)を使用して、イメージ ポイントのワールド座標を決定します。
詳細については、カメラ キャリブレーションとは (Computer Vision Toolbox)を参照してください。
ショットの検出とスコアリング
このアルゴリズムでは、レーザー ピストルの明るい光を検出することでショットをスコアリングします。撮影中は、フレームを取得し、明るいスポットが存在するかどうかを検出します。指定されたしきい値を超える明るいスポットが存在する場合、そのフレームを処理します。
ブロブ解析を使用して明るいスポットの中心を見つけ、場所をピクセル座標からワールド座標に変換します。イメージは 8 ビットの符号付き整数として保存されるため、ブロブ解析は固定小数点で実行されます。ワールド座標で明るいスポットの中心を見つけたら、その原点にある標的からの距離を計算し、ポイント値をそのショットに割り当てます。
例の実行
シミュレーションを開始するには、+LaserTargetExample
フォルダーに保存されている run
スクリプトを実行します。
LaserTargetExample.run
次のプロンプトが表示されます。
(1) gigecam (2) webcam (3) simulation Enter the number of the source type: 3
スクリプトによって、シミュレーションに使用するソースの選択を求められます。3
を入力して、前に記録したセッションのシミュレーションを確認します。例のファイルでは、前に記録した 1 個のシミュレーションを利用できます。シミュレーションの記録は、ライブ カメラを使用して例を実行するたびに保存され、シミュレーション リストに追加されます。数字を入力してシミュレーションを開始します。
(1) saved_shots_20221208T181652 Enter number of file from list: 1
値「1」
または「2」
を入力すると、GigE Vision のカメラまたは Web カメラを設定するように求められます。カメラが検出されるまでに数分かかることがあります。カメラが検出されると、[Deployable Video Player] ウィンドウが表示されます。
カメラを次のように調整します。
ターゲットの背面にあるすべての正方形がビュー内に表示される。
ターゲットに焦点が合っている。
レーザー ヒットと混同する可能性のある明るいスポットがない。
イメージが直線かどうかは重要ではありません。これはアルゴリズムによって補正されます。[Deployable Video Player] を閉じて続行します。
その後、この例では、撮影者からターゲットまでの距離 (メートル単位) と撮影者名の入力を求められます。レーザー ピストルでターゲットに向かって 5 つのショットを撮影すると、別の撮影者名を入力するように求められます。終了するには空の値を返します。
異なるカメラの使用
自分のカメラを使用して例を設定するには、カメラ キャリブレーター (Computer Vision Toolbox)アプリを使用してターゲットの背面にあるチェッカーボードを検出し、歪みを取り除きます。キャリブレーション変数を MAT ファイルに保存します。GigE Vision のカメラと Web カメラのキャリブレーション変数は、次の MAT ファイルに保存されます。
+LaserTargetExample/gigecam_240x240_calibration_parameters.mat
+LaserTargetExample/webcam_LifeCam_480x480_camera_parameters.mat
次のいずれかのファイルを、自分のカメラに適切な値で設定を置き換えることで編集します。
+LaserTargetExample/gigecam_setup.m
+LaserTargetExample/webcam_setup.m
データの確認
ショット データベース
撮影のたびに、ShotDatabase.csv
という名前のファイルにヒットが記録されます。関数readtable
を使用して、データを table オブジェクトに読み込んで可視化できます。たとえば、撮影後、ShotDatabase.csv
ファイルにデータが入力され、次のコードにより多数のショットから成るグループの中心がプロットされます。
T = readtable('ShotDatabase.csv'); LaserTargetExample.make_target_airpistol10m; LaserTargetExample.plot_shot_points(T.X, T.Y); ax = gca; line(mean(T.X)*[1,1], ax.YLim); line(ax.XLim, mean(T.Y)*[1,1]); grid on;
シミュレーションの記録
撮影のたびに、ショットが検出されたビデオ フレームは simulation_recordings
という名前のフォルダー内のファイルに保存されます。これらのファイルを読み込んで、ショットから生データを検索することができます。アルゴリズムを編集することもできます。
変数 frames
には、キャリブレーションに使用された最初のフレームに加え、検出された各ショット用に 10 個のフレームが含まれます。10 個のうちのそれぞれの実行に含まれる 1 番目のフレームは、ショットが検出された場所です。後続のフレームでは、自分の手の動きを確認できます。次のコードを使用して、このデータについて短いアニメーションを作成できます。
d = dir(fullfile('simulation_recordings','*.mat')); record = load(fullfile(d(1).folder, d(1).name)); t = LaserTargetExample.SerialDateNumber_to_seconds(... record.times); t = t-t(1); figure for k = 1:size(record.frames, 3) imshow(record.frames(:,:,k), ... 'InitialMagnification','fit'); title(sprintf('Time since beginning of round: %.3f seconds',... t(k))) drawnow end
参考文献
[1] 前景検出を使用した自動車の追跡 (Computer Vision Toolbox)
[2] 細胞のカウント (Computer Vision Toolbox)
[3] Rizza, Antonio, Felice Piccolo, Mattia Pugliatti, Paolo Panicucci, and Francesco Topputo. "Hardware-in-the-Loop Simulation Framework for CubeSats Proximity Operations: Application to the Milani Mission." 73rd International Astronautical Congress, Paris, France, September 18-22, 2022.
参考
undistortImage
(Computer Vision Toolbox) | pointsToWorld
(Computer Vision Toolbox) | vision.BlobAnalysis
(Computer Vision Toolbox) | detectCheckerboardPoints
(Computer Vision Toolbox)
関連するトピック
- Acquire Images from GigE Vision Cameras (Image Acquisition Toolbox)
- Install the MATLAB Support Package for USB Webcams (Image Acquisition Toolbox)