2016-04-12 30 views
0

私は参照画像を持っており、参照画像に存在する画像の周りに円を描きたい。 参照画像に存在する画像の上に矩形を描きますが、どのように円にするかわかりません。Matlabで認識された画像の周囲に円を描く

boxImage = imread('RefImg.jpg'); 
sceneImage = imread('full_image.jpg'); 
boxPoints = detectSURFFeatures(rgb2gray(boxImage)); 
scenePoints = detectSURFFeatures(rgb2gray(sceneImage)); 
[boxFeatures, boxPoints] = extractFeatures(rgb2gray(boxImage), boxPoints); 
[sceneFeatures, scenePoints] = extractFeatures(rgb2gray(sceneImage), scenePoints); 

boxPairs = matchFeatures(boxFeatures, sceneFeatures); 
matchedBoxPoints = boxPoints(boxPairs(:, 1), :); 
matchedScenePoints = scenePoints(boxPairs(:, 2), :); 
figure; 
showMatchedFeatures(rgb2gray(boxImage),rgb2gray(sceneImage), matchedBoxPoints, ... 
    matchedScenePoints, 'montage'); 
title('Putatively Matched Points (Including Outliers)'); 
[tform, inlierBoxPoints, inlierScenePoints] = ... 
    estimateGeometricTransform(matchedBoxPoints, matchedScenePoints, 'affine'); 
figure; 
showMatchedFeatures(rgb2gray(boxImage), rgb2gray(sceneImage), inlierBoxPoints, ... 
    inlierScenePoints, 'montage'); 
title('Matched Points (Inliers Only)'); 

boxPolygon = [1, 1;...       % top-left 
     size(boxImage, 2), 1;...     % top-right 
     size(boxImage, 2), size(boxImage, 1);... % bottom-right 
     1, size(boxImage, 1);...     % bottom-left 
     1, 1];     % top-left again to close the polygon 
    newBoxPolygon = transformPointsForward(tform, boxPolygon); 
    figure; 


imshow(sceneImage); 
hold on; 
line(newBoxPolygon(:, 1), newBoxPolygon(:, 2), 'Color', 'y'); 
title('Detected Box'); 

おかげで、

+1

CVST 'insertShape'には機能があります – Amro

答えて

0

あなたが実際にCurvatureパラメータを使用することにより、興味の対象の周りに楕円を描くようにrectangleを使用することができます。

%// Transform your points 
boxCorners = [1, 1; size(boxImage, 2), size(boxImage, 1)]; 
box = transformPointsForward(tform, boxCorners); 

%// Position as [x, y, width, height] 
position = [boxCorners(1,:), diff(boxCorners)]; 

%// Display the image 
imshow(sceneImage); 
hold on 

%// Plot an ellipse at this location 
rectangle('Position', position, 'Curvature', [1 1]) 

あなたは実際円を強制する場合は、直径が長方形の対角線の中点であることを四角形とセンター間での対角距離になりたいでしょう。

boxCorners = [1, 1; size(boxImage, 2), size(boxImage, 1)]; 
box = transformPointsForward(tform, boxCorners); 

%// Now compute the diagonal distance (diameter) 
diameter = sqrt(sum(diff(box).^2)); 

%// Now determine the middle of the circle 
center = mean(box); 

%// Display the image 
imshow(sceneImage); 
hold on 

%// Now plot the circle 
t = linspace(0, 2*pi, 100); 
plot(center(1) + cos(t) * diameter/2, ... 
    center(2) + sin(t) * diameter/2); 
+0

これを参照画像にどのように表示すればよいでしょうか? –

+0

私はしようとしました:線(長方形、長方形、 '色'、 'y')が、楕円は表示されません。 –

+0

@NeaguV 'rectangle' *はプロットコマンドです。私は 'imshow'コマンドで答えを更新しました。 – Suever

関連する問題