2016-04-12 148 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

您可以使用rectangle實際使用Curvature參數周圍繪製您感興趣的對象的橢圓。

%// 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「矩形」*是繪圖命令。我用'imshow'命令更新了答案。 – Suever