【问题标题】:How to draw a polygon in matlab in a 2D matrix如何在二维矩阵中的matlab中绘制多边形
【发布时间】:2016-01-06 18:17:22
【问题描述】:

我在 matlab 中有以下代码,它应该在图像上绘制多边形(必须是 2d 图像,只是一个补丁)。

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);

这不起作用,因为 drawpolygon 似乎不以这种方式存在任何想法如何做到这一点?

请注意,结果数据必须是与 baseIM 大小相等的图像,并且必须是双精度数组(可以转换整数),因为这是另一种算法的测试数据。

我已经找到了 inpolygon(xi,yi,xv,yv);如果我知道如何正确调用它,我可以将它与 for 循环结合使用。

【问题讨论】:

    标签: image matlab 2d polygon


    【解决方案1】:

    如果只需要绘制两个多边形,可以使用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')
    

    编辑

    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')
    

    希望这会有所帮助。

    【讨论】:

    • 好吧,我特别需要将我的数据放置在图像上(准确地说是大小为 1000 x 1000 的二维数组),因为这是用于另一种算法的测试数据。 Fill 和 Patch 似乎生成了 1 比 1 的数据来描述这些点。
    • 我不明白您的评论:参考我发布的代码,您可以将第一个多边形(红色的)视为二维数组,将第二个多边形(绿色的)视为多边形“添加”。 fillpatch 返回的值只是 handles
    • 我已经更新了答案,增加了在图像上添加多边形的可能性。你从哪里得到drawpolygon 函数?它似乎不是 MatLab 函数。
    • 那么补丁包含顶点分机。但是我想结合噪声(稍后添加)来测试边缘检测算法。所以我不想只显示一个图像,我需要一个包含数据的实际二维数组。
    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2013-04-01
    相关资源
    最近更新 更多