只绘制特定长度的线条

时间:2015-03-13 09:47:35

标签: matlab computer-vision contour

下面是一张图像,显示了一个等高线区域图,其中有感兴趣的区域已经通过使用它们的质心连接起来。我想要实现的是只绘制一定长度的线条。目前,每个点都有一条线被绘制到其他每一点。

C=contourf(K{i}); 
[Area,Centroid] = Contour2Area(C);

% This converts any entries that are negative into a positive value
% of the same magnitiude
indices{i} = find( Centroid < 0); 
Centroid(indices{i})=Centroid(indices{i}) * -1; %set all 

% Does the same but for positive (+500)
indices{i} = find( Area > 500); 
Area(indices{i})=0; 

[sortedAreaVal, sortedAreaInd] = sort(Area, 'descend');

maxAreaVals = sortedAreaVal(1:10)';
maxAreaInd = sortedAreaInd(1:10)';

xc=Centroid(1,:); yc=Centroid(2,:);
hold on; plot(xc,yc,'-');

enter image description here

如果有一种方法只绘制低于特定阈值的线条,那将非常有用。下一步将标记和测量每一行。提前感谢您的时间。

1 个答案:

答案 0 :(得分:2)

如果xcyc是质心的x和y坐标,那么你可以这样做:

sqrt(sum(diff([x,y],1).^2,2))

这样做是取连续的[x,y]数据点之间的差异,然后计算它们之间的欧几里德距离。然后,您可以获得所需的所有信息,以选择所需的信息并标记长度。

但有一件事,这只会计算连续质心之间的距离。我是这样写的,因为它似乎是你在上面尝试做的事情。如果您有兴趣找出所有质心之间的距离,则必须循环并计算距离。 有点像:

for i=1:length(xc)-1
    for j=i+1:length(xc)
       % distance calculation here...

希望这有帮助。