【发布时间】:2019-06-15 11:44:47
【问题描述】:
我想找到一条曲线的两个端点。
我使用凸包找到 8 个边界点,然后为每个点计算与所有其他点的距离。具有最大距离的点被假定为端点。它适用于大多数形状简单的情况,如下所示:
我正在使用这段代码找到两点:
% Calculate 8-boundary points using Convex Hull
% (points consists of all white pixels for the curve)
out=convhull(points);
extremes=points(out,:);
% Finding two farthest points among above boundary points
arr_size = size(extremes);
max_distance = 0;
endpoints = [extremes(1,:); extremes(2,:)];
for i=1:arr_size(1)
p1 = extremes(i,:);
for j=i+1:arr_size(1)
p2 = extremes(j,:);
dist = sqrt((p2(1)-p1(1))^2 + (p2(2)-p1(2))^2);
if dist>max_distance
max_distance = dist;
endpoints = [p1; p2];
end
end
end
disp(endpoints);
在大多数情况下它都有效,但是当它应用于 U 型形状时就会出现问题。
我想找出两点之间的白色像素数。我跟着这个 Counting white pixels between 2 points in an image 但它有助于只有直线而不是曲线。任何帮助表示赞赏!
编辑 1:
我已经根据@Rotem 的回答更新了我的代码,它解决了我的问题。
更新代码:
for i=1:arr_size(1)
p1 = extremes(i,:);
distanceMap = calculate_distance_map(arr, p1);
for j=i+1:arr_size(1)
p2 = extremes(j,:);
dist = distanceMap(p2(2), p2(1));
if dist>max_distance
max_distance = dist;
endpoints = [p1; p2];
end
end
end
但是这需要很长时间。关于如何减少计算时间的任何建议?
【问题讨论】:
-
我会使用广度优先搜索。
-
我找到了一个受动态规划算法启发的解决方案
标签: matlab image-processing bresenham