这是我在图像上绘制形状所做的一部分:
... ... 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
中的二进制结果,但包含其他形状(即xx
,yy
)?
我保留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)
感谢。
答案 0 :(得分:1)
您的x(k)
和y(k)
已经描述了多边形区域,因此没有更多的交互式部分可以绘制另一个多边形。 imshow(BW)
与之前的3行代码相同。
您可以再次保存/ imwrite
BW
和imread
,然后使用roipoly
绘制自己的多边形。
如果您自动绘制多边形,则可以使用:
BW = roipoly( I, xx1(k1), yy1(k1) );
BW1 = roipoly( I, xx2(k2), yy2(k2) );
imshow(BW|BW1)