1

グラフではプロットが重なっていますが、同じ軸の画像では重なっていないという奇妙な問題があります。

私はどこかにホールドを残していないと確信しています。そうしないと、画像自体にも重なってしまいます。

編集:青い重なった線を取り除きたいのですが、その写真に青い線を1つだけ表示したいです。

ここにサンプルがあります:

(注:黒の画像はRGB画像ですが、その気圧をプロットしていないため、グラフ上で黒から白への移行を意味しています。)

代替テキスト http://img541.imageshack.us/img541/3212/parabolaaaa.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

何か案は?

4

1 に答える 1

2

複数の青い線がある理由は、ループを通過するたびに1本の線を線でプロットするためです。

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

実際、古いものをクリアせずに、ループ内ですべて(画像、点、線)を何度もプロットしています。

代わりに、forループの外側でプロットオブジェクトを初期化し、 SETコマンドを使用して、単に再プロットするのではなく、ループ内でそれらを更新する必要があります。ハンドルを使用してオブジェクトをプロットしてオブジェクトを変更する方法について以前に尋ねた質問に対するこの回答で、この一例を示しました。ここで提供するサンプルコードの場合、次のようにすることができます。

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
于 2010-05-19T19:58:39.057 に答える