绘图重叠在matlab中

时间:2010-05-19 19:08:33

标签: matlab plot overlap

我有一个奇怪的问题,即图表在图表中重叠,但不在同一轴的图像中。

我确信我没有留在某处,否则它也会在图像本身重叠。

编辑:我想摆脱蓝色重叠的线条,我只想在那张照片中出现一条蓝线。

以下是一个示例:

(注意:黑色图像是RGB图像,但我没有绘制该图像,因此它意味着图形上从黑色到白色的过渡。)

alt text http://img541.imageshack.us/img541/3212/parabolaaaaa.png

代码的某些部分:

   for K=1:23

    hold on
    I = fig.img.(['p' num2str(K)]);
    bw=(I);
    imshow(bw)

    ss = bwlabel(bw);
    s = regionprops(ss,'centroid');


    centroids{K} = cat(1,s.Centroid);
    hold(imgca,'on')
    plot(imgca,centroids{K}(:,1), centroids{K}(:,2), 'r*'); hold on;
    x=centroids{K}(:,1);
    y=centroids{K}(:,2);
    points=plot(x,y,'go',x,y,'rx');

    hold on
    axis on
    axis fill
    ccentroids = cat(1,centroids{:});
    C1=ccentroids(:,1);
    C2=ccentroids(:,2);
    set(points,'XData',C1,'YData',C2);

    .
    .  
    .

    p= polyfit(x2,y2,2)
    parabola_x = linspace(-250,640,500);
    parabola_polyval = polyval(p,parabola_x);
    plot(parabola_x,parabola_polyval,'b-');
    .
    .  
    .
    end

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你有多条蓝线的原因是因为你使用以下几行为你的循环绘制一个:

plot(parabola_x,parabola_polyval,'b-');

事实上,你正在循环中一遍又一遍地绘制所有(图像,点和线)而不清除旧的。

您应该初始化for循环的的绘图对象,并使用SET命令在循环内更新,而不是仅重新绘制它们。我在this answer中给出了一个问题的例子,你先前问我在哪里讨论使用句柄绘制对象来修改它们。对于您在此处提供的示例代码,您可以执行以下操作:

hImage = imshow(bw(fig.img.p1));  %# Initialize the image
hold on;                          %# Add to the existing plot
hStar = plot(nan,nan,'r*');       %# Initialize the red star
hPoints = plot(nan,nan,'go',...   %# Initialize the other points
               nan,nan,'rx');
hLine = plot(nan,nan,'b-');       %# Initialize the blue line

for K = 1:23

  I = fig.img.(['p' num2str(K)]);
  bw = (I);
  set(hImage,'CData',bw);  %# Update the image

  ss = bwlabel(bw);
  s = regionprops(ss,'centroid');
  centroids{K} = cat(1,s.Centroid);
  set(hStar,'XData',centroids{K}(:,1),...  %# Update the red star
            'YData',centroids{K}(:,2));
  ccentroids = cat(1,centroids{:});
  C1 = ccentroids(:,1);
  C2 = ccentroids(:,2);
  set(hPoints,'XData',C1,'YData',C2);  %# Update the other points

  ...

  p = polyfit(x2,y2,2);
  parabola_x = linspace(-250,640,500);
  parabola_polyval = polyval(p,parabola_x);
  set(hLine,'XData',parabola_x,...      %# Update the blue line
            'YData',parabola_polyval);

  ...

end