【问题标题】:Drawing two shapes on one image在一张图像上绘制两个形状
【发布时间】:2014-01-12 03:22:15
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 两个形状的二进制结果是什么?请提供完整的代码示例,xy是什么?

标签: image matlab binary draw


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复。我试过了。我已经编写(保存)了第一个二进制图像,然后再次读取它,并绘制下一个形状。对于第二个BW,当我imshow 图像时,它是我所期望的。但是,当我写(保存)它、读取它并显示它时,我只看到第二个形状,尽管绘制是在包含第一个形状的第一个二进制图像上。如何编写第二个图像,使其包含两个形状?
  • @Simplicity 重新读取图像后绘制多边形时,使用 [bw1, xi,yi]=roipoly(bw),您选择的坐标将记录在 xi 和 yi 向量中。谢谢
  • 看来我应该手动绘制这些坐标?由于该区域很小,不易手工绘制。或者,我可能遗漏了什么?
  • 您可以根据需要手动绘制多边形。您可以在绘图过程中放大。只需点击无花果上的+
  • 试试这个:BW = roipoly( I, xx1(k1), yy1(k1) ); BW1 = roipoly(I, xx2(k2), yy2(k2) ); imshow(BW|BW1)
猜你喜欢
  • 2016-02-04
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多