在一个图像上绘制两个形状

时间:2013-12-23 21:30:46

标签: image matlab binary draw

这是我在图像上绘制形状所做的一部分:

...
...
k = convhull(x,y);
I=imread('img.png');
imshow(I)
hold on
plot(x(k),y(k),'r-',x,y,'b+');
BW = roipoly(I, x(k), y(k) );

我应该怎么做才能接收BW中的二进制结果,但包含其他形状(即xxyy)?

我保留hold on,并能够plot第二个形状,但问题是如何在图像中获得两个形状的二进制结果。

修改

这就是我所做的:

I=imread('img.png');
....
....
selectedRegions1=119;
bb = vertcat( rg( selectedRegions1 ).BoundingBox );
bb(:,3:4) = bb(:,1:2) + bb(:,3:4) - 1;
totBB = [min( bb(:,1:2), [], 1 ), max( bb(:,3:4), [], 1 ) ]
nVal=50;
totBB =

  239.5000  202.5000  252.5000  211.5000

xx1 =239.5000 + rand(nVal,1).*(252.5000- 239.5000);
yy1 =   202.5000 + rand(nVal,1).*(211.5000-  202.5000);
k1 = convhull(xx1,yy1);
I=imread('img.png');
imshow(I)
hold on
plot(xx1(k1),yy1(k1),'r-',xx1,yy1,'b+');
fill(xx1(k1),yy1(k1),[1 1 1])
selectedRegions2=[181,186,193,198];
bb = vertcat( rg( selectedRegions2 ).BoundingBox );
bb(:,3:4) = bb(:,1:2) + bb(:,3:4) - 1;
totBB = [min( bb(:,1:2), [], 1 ), max( bb(:,3:4), [], 1 ) ]

totBB =

  355.5000  100.5000  399.5000  146.5000

xx2 =355.5000 + rand(nVal,1).*(399.5000- 355.5000);
yy2 =   100.5000 + rand(nVal,1).*( 146.5000-   100.5000);
k2 = convhull(xx2,yy2);
plot(xx2(k2),yy2(k2),'r-',xx2,yy2,'b+');
fill(xx2(k2),yy2(k2),[1 1 1])
BW = roipoly( I, xx1(k1), yy1(k1) );
BW = roipoly( I, xx2(k2), yy2(k2) );
imshow(BW)

感谢。

1 个答案:

答案 0 :(得分:1)

您的x(k)y(k)已经描述了多边形区域,因此没有更多的交互式部分可以绘制另一个多边形。 imshow(BW)与之前的3行代码相同。

您可以再次保存/ imwrite BWimread,然后使用roipoly绘制自己的多边形。

如果您自动绘制多边形,则可以使用:

BW = roipoly( I, xx1(k1), yy1(k1) ); 
BW1 = roipoly( I, xx2(k2), yy2(k2) ); 
imshow(BW|BW1)