2016-01-06 157 views
0

我在matlab中有下面的代碼,應該在圖像上繪製多邊形(必須是2d圖像,只是一個補丁)。如何在2D矩陣中繪製matlab中的多邊形

numCorners=8; 
dotPos=[]; 
for rr=1:numCorners 
    dotPos(end+1)=(cos(rr/numCorners*2*pi))*100; 
    dotPos(end+1)=(sin(rr/numCorners*2*pi))*100; 
end 


BaseIm=zeros(1000,1000); 
dotpos=[500,500]; 
imageMatrix =drawpolygon(BaseIm, dotPos, 1); or how else do draw a white polygon here? 
imshow(imageMatrix); 

這不起作用拉伸多邊形不以這種方式存在任何想法如何做到這一點?

請注意,生成的數據必須是baseIM大小相同的圖像,並且必須是雙精度數組(可以轉換整數),因爲這是另一種算法的測試數據。我已經找到了inpolygon(xi,yi,xv,yv);函數,如果我知道如何正確調用它,我可以與for循環結合使用。

回答

0

如果您只需要繪製兩個多邊形,則可以使用fill函數。

t=0:2*pi; 
x=cos(t)*2; 
y=sin(t)*2 

fill(x,y,'r') 
hold on 
fill(x/2,y/2,'g') 

作爲替代方案,可以使用patch功能:

figure 
t=0:2*pi; 
x=cos(t)*2; 
y=sin(t)*2 

patch(x,y,'c') 
hold on 
patch(x/2,y/2,'k') 

enter image description here

編輯

fillpatch功能允許也增加多邊形過實際圖像也是。

% Load an image on the axes 
imshow('Jupiter_New_Horizons.jpg') 
hold on 
% Get the axis limits (just to center the polygons 
x_lim=get(gca,'xlim') 
y_lim=get(gca,'ylim') 
% Create the polygon's coords 
t=0:2*pi; 
x=cos(t)*50+x_lim(2)/2; 
y=sin(t)*50+y_lim(2)/2 
% Add the two polygons to the image 
f1_h=fill(x,y,'r') 
hold on 
f1_h=fill(x/2,y/2,'g') 

enter image description here

希望這有助於。

+0

嗯,我特別需要將我的數據放在圖像上(尺寸爲1000的二維數組1000),因爲這是針對另一種算法的測試數據。填充和補丁似乎會生成一個一個描述點的數據。 – Thijser

+0

我不明白您的評論:參照我已經發布的代碼,你可以考慮的第一多邊形(紅的)作爲二維數組,第二個(綠色的)多邊形「加」上。 'fill'和'patch'返回的值只是'handles'。 –

+0

我已經更新了答案,增加了在圖像上添加多邊形的可能性。你在哪裏得到了'drawpolygon'功能?它似乎不是一個MatLab函數。 –