在matlab中将相同的颜色填充到不同的轮廓中

时间:2014-04-09 09:26:08

标签: matlab image-processing contour image-segmentation

我有一个对象的两个二进制圈。他们没有连接在一起。我完成了圆圈的填充颜色。现在,我想将相同的颜色填充到两个不能连接在一起的圆圈中。这是我的代码。但它确实有效。你可以编辑帮帮我吗?

  figure
  [xx yy] = meshgrid(1:384,1:384);
  phi1 = (sqrt(((xx - 190).^2 + (yy - 260).^2 )) - 15);
  phi2 = (sqrt(((xx - 270).^2 + (yy - 200).^2 )) - 20);
  phi= sign(phi1).*sign(phi2);
  phi(phi==-1)=0;
  imshow(phi);
  cont = contourc(phi, [0 0])';
  cont = cont(2 : end, :);
  patch(cont(:, 1), cont(:, 2), 'g', 'EdgeColor', 'w')

2 个答案:

答案 0 :(得分:0)

这是一个绘制实心圆圈的小脚本。您可以将其变为函数,并使用hold onhold off绘制多个圆圈。

r = 2;
xc = 1;
yc = 1;

st = r/100;

x1 = (-r+xc):st:(r+xc);
y1 = yc+sqrt(r^2-(x1-xc).^2);
x2 = x1(end:-1:1);
y2 = yc-sqrt(r^2-(x2-xc).^2);

x = [x1 x2];
y = [y1 y2];

patch(x,y,'g','FaceColor', 'g');

答案 1 :(得分:0)

如果要使用曲线的隐式定义创建更一般的形状,以下也适用:

[xx, yy] = meshgrid(1:384,1:384);

phi1 = 15^2 < ((xx-190).^2 + (yy-260).^2);
phi2 = 20^2 < ((xx-270).^2 + (yy-200).^2);
phi = phi1 .* phi2;

contourf(phi, [0,1]);
colormap([0,1,0;1,1,1]);