主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

特徴点のマッチングを使用した要素の多いシ,ンでのオブジェクト検出

この例では,オブジェクトの参照イメージがある場合に,要素の多いシーンで特定のオブジェクトを検出する方法を説明します。

概要

この例では,参照イメージとターゲットイメージの間で点の対応を見つけることにより,特定のオブジェクトを検出するアルゴリズムを提示します。スケ,ルの変更や面内回転がある場合でもオブジェクトを検出できます。また,少量であれば面外の回転やオクル,ジョンに対してもロバストです。

このオブジェクト検出方法は,一意の特徴マッチが得られる繰り返しのないテクスチャパターンを示すオブジェクトに最適です。色が均一のオブジェクトや反復パターンのあるオブジェクトでは,この手法はうまく機能しない可能性が高くなります。このアルゴリズムは特定のオブジェクトを検出するよう設計されています。たとえば,任意のゾウすべてを検出するのではなく,参照。人物や顔といった特定のカテゴリに属するオブジェクトの検出にいては,愿景。PeopleDetectorおよび愿景。CascadeObjectDetectorを参照してください。

手順1:@ @メ,@ @ジの読み取り

対象オブジェクトを含む参照▪▪メ▪▪ジを読み取ります。

boxImage = imread(“stapleRemover.jpg”);图;imshow (boxImage);标题(“盒子的图像”);

要素の多いシンを含むタゲットメジを読み取ります。

sceneImage = imread(“clutteredDesk.jpg”);图;imshow (sceneImage);标题(“混乱场景的图像”);

手順2:特徴点の検出

両方の▪▪メ▪▪ジで特徴点を検出します。

boxPoints = detectSURFFeatures(boxImage);scenePoints = detectSURFFeatures(sceneImage);

参照▪▪メ▪▪ジで検出された最も強い特徴点を可視化します。

图;imshow (boxImage);标题(“盒子图像的100个最强特征点”);持有;情节(selectStrongest (boxPoints, 100));

タゲットメジで検出された最も強い特徴点を可視化します。

图;imshow (sceneImage);标题(“来自场景图像的300个最强特征点”);持有;情节(selectStrongest (scenePoints, 300));

手順3:特徴記述子の抽出

両方の▪▪メ▪▪ジ内の関心点における特徴記述子を抽出します。

[boxFeatures, boxPoints] = extractFeatures(boxImage, boxPoints);[sceneFeatures, scenePoints] = extractFeatures(sceneImage, scenePoints);

手順4:点の推定的マッチの検出

特徴記述子を使用して特徴をマッチングします。

boxPairs = matchFeatures(boxFeatures, sceneFeatures);

マッチであると推定される特徴を表示します。

matchedBoxPoints = boxPoints(boxPairs(:, 1),:);matchedScenePoints = scenePoints(boxPairs(:, 2),:);图;showMatchedFeatures(boxImage, sceneImage, matchedBoxPoints,...matchedScenePoints,“蒙太奇”);标题(假定匹配点(包括异常值));

手順5:推定的マッチを使用したシ,ン内のオブジェクト検出

estimateGeometricTransform2Dは,外れ値を排除しながら,マッチした点を関連付ける変換を計算します。この変換によってシ,ン内のオブジェクトの位置を決定できます。

[tform, inlierIdx] =...estimateGeometricTransform2D (matchedBoxPoints matchedScenePoints,仿射的);inlierBoxPoints = matchedBoxPoints(inlierIdx,:);inlierScenePoints = matchedScenePoints(inlierIdx,:);

外れ値を削除したうえで,マッチする点のペアを表示します。

图;showMatchedFeatures(boxImage, sceneImage, inlierBoxPoints,...inlierScenePoints,“蒙太奇”);标题(匹配点(仅限Inliers));

参照▪▪メ▪▪ジの境界多角形を取得します。

boxPolygon = [1,1;...%左上的size(boxImage, 2), 1;...%右上的size(boxImage, 2), size(boxImage, 1);...%右下角1, size(boxImage, 1);...%左下侧1,1];%左上角再次关闭多边形

この多角形をタゲットメジの座標系に変換します。変換後の多角形は,シ,ン内のオブジェクトの位置を示しています。

newBoxPolygon = transformPointsForward(tform, boxPolygon);

検出したオブジェクトを表示します。

图;imshow (sceneImage);持有;line(newBoxPolygon(:, 1), newBoxPolygon(:, 2),“颜色”“y”);标题(“检测盒”);

手順7:別のオブジェクトの検出

前と同じ手順で2目のオブジェクトを検出します。

2 .。

大象的年龄= imread(“elephant.jpg”);图;imshow (elephantImage);标题(“大象的形象”);

特徴点を検出して可視化します。

elephantPoints = detectSURFFeatures(elephantImage);图;imshow (elephantImage);持有;情节(selectStrongest (elephantPoints, 100));标题(“大象图像的100个最强特征点”);

特徴記述子を抽出します。

[elephantFeatures, elephantPoints] = extractFeatures(elephantage, elephantPoints);

特徴のマッチング

elephantPairs = matchFeatures(elephantFeatures, sceneFeatures,“MaxRatio”, 0.9);

マッチであると推定される特徴を表示します。

matchedElephantPoints = elephantPoints(elephantPairs(:, 1),:);matchedScenePoints = scenePoints(elephantPairs(:, 2),:);图;showMatchedFeatures(elephantage, sceneImage, matchedElephantPoints,...matchedScenePoints,“蒙太奇”);标题(假定匹配点(包括异常值));

幾何学的変換を推定し,外れ値を排除します

[tform, inlierElephantPoints, inlierScenePoints] =...estimateGeometricTransform (matchedElephantPoints matchedScenePoints,仿射的);图;showMatchedFeatures(elephantImage, sceneImage, inlierElephantPoints,...inlierScenePoints,“蒙太奇”);标题(匹配点(仅限Inliers));

両方のオブジェクトを表示します

大象多边形= [1,1;...%左上的size(elephantImage, 2), 1;...%右上的size(elephantImage, 2), size(elephantImage, 1);...%右下角1,大小(elephantImage, 1);...%左下侧1,1];%左上角再次关闭多边形newElephantPolygon = transformPointsForward(tform, elephantPolygon);图;imshow (sceneImage);持有;line(newBoxPolygon(:, 1), newBoxPolygon(:, 2),“颜色”“y”);line(newElephantPolygon(:, 1), newElephantPolygon(:, 2),“颜色”‘g’);标题(《发现大象和箱子》);