0

バイナリ イメージ

バイナリ イメージとジャンクション情報をスケルトン化しました。交点を中心に円を描き、円と二値画像の交点を求めたい。私は次のコードを書きました:

 BW = imread('circles.png');
 imshow(BW);
 BW2 = bwmorph(BW,'remove');
 figure, imshow(BW2)
 BW3 = bwmorph(BW,'skel',Inf);
 figure, imshow(BW3)
 BW3t = bwmorph(BW3,'thin');
 figure, imshow(BW3t)


 [rj, cj, re, ce] = findendsjunctions(BW3t, 1);
 hold on 
 plot(cj(1),rj(1),'ob')
 hold on
 circle([cj(1),rj(1)],4,50,':r');

findendsjunctions.m および依存ファイル show.m は、http://www.csse.uwa.edu.au/~pk/research/matlabfns/LineSegments/findendsjunctions.mおよびhttp ://www.csse からダウンロードできます。それぞれuwa.edu.au/~pk/research/matlabfns/Misc/show.m。circle.m はここからダウンロードできます: http://www.mathworks.co.uk/matlabcentral/fileexchange/2876-draw-a-circle/content/circle.m

円がその周りで 2 つ、3 つ、または 4 つの船と交差しているかどうかを調べたい (画像で星としてマークされている)。1 つの容器を何度も横断する場合でも、出力は容器ごとに 1 つの交点にする必要があります。

サークルとバイナリ容器の交点を見つける方法を教えてください。

ありがとう

4

1 に答える 1

0

円とバイナリ画像の交点と3点の座標を見つけました(質問で提供された画像で星としてマークされています)。関数 circle.m (上記の質問で言及) を変更して、円周のすべての X 座標と Y 座標を出力し、次の matlab コードを記述しました。

   [H, X, Y]=circle([cj(1),rj(1)],4,50,':r');
   c = improfile(BW3t,X,Y)
   x=1:length(c)
   figure
   plot(x, c,'r')

ピークの数は、円がバイナリ イメージをカットする場所を表します

   [maxtab, mintab]=peakdet(c, 1)
   [pks,locs] = findpeaks(c)
   pt1=[X(locs(1)) Y(locs(1))]
   pt2=[X(locs(2)) Y(locs(2))]
   pt3=[X(locs(3)) Y(locs(3))]

   hold on
   plot(pt1(1),pt1(2),'om','LineWidth',2)
   hold on
   plot(pt2(1),pt2(2),'og','LineWidth',2)
   hold on
   plot(pt3(1),pt3(2),'ob','LineWidth',2)

pt1, pt2 pt3 は二値画像を丸で切った3点

于 2013-06-02T22:49:26.343 に答える