我已经对二进制图像和结点信息进行了概括。我想在交汇点画圆圈作为中心,想找到圆与二进制图像的交点。 我写了以下代码:
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个血管相交(在图像中标记为星形)。即使圆形横向多次单个容器,但输出应该是每个容器的一个交叉点。
请建议如何找到圆形和二元血管的交点。
谢谢
答案 0 :(得分: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是圆圈切割二进制图像的三个点