线与对象的交点-Matlab

线与对象的交点-Matlab,matlab,Matlab,我在硬币图像中用绿色标记了一枚硬币(绿色),并在上面划了一条线。如何找到它们相交的x,y点? 提前谢谢 找出直线和圆之间的交点 k = abs( (b(:,2)-x1) * (y2-y1) - (b(:,1)-y1) * (x2-x1) ); [~,idx] = sort(k); scatter(b(idx(1:2),2), b(idx(1:2),1)) 这是一个简单的方法。它捕获圆上的所有点,并对照每个点进行检查 理想情况下,我们有(x-x1)/(x2-x1)=(y-y1)/(y2-y1)

我在硬币图像中用绿色标记了一枚硬币(绿色),并在上面划了一条线。如何找到它们相交的x,y点? 提前谢谢


找出直线和圆之间的交点

k = abs( (b(:,2)-x1) * (y2-y1) - (b(:,1)-y1) * (x2-x1) );
[~,idx] = sort(k);
scatter(b(idx(1:2),2), b(idx(1:2),1))
这是一个简单的方法。它捕获圆上的所有点,并对照每个点进行检查

理想情况下,我们有
(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
,或者说
d=(x-x1)/(x2-x1)-(y-y1)/(y2-y1)
,然后
d=0
是理想情况。当点偏离直线时,
d
的绝对值增加。因此,最小的
d
指的是距离直线最近的点。在这种情况下,应该有两点,因此我要寻找两个最小的值

一个可能的问题可能是准确性。当圆上的点彼此相距较远时,可能最近的两个点代表同一交点,而另一个点未被检测到。更复杂的检查将适用,例如选择最接近的四个,然后进行区分。但是,您可以通过保持点密度高来避免这种情况


编辑:添加了这样的检查

k = abs( (b(:,2)-x1) * (y2-y1) - (b(:,1)-y1) * (x2-x1) );
[~,idx] = sort(k);

f4x = b(idx(1:4),2);
f4y = b(idx(1:4),1);
choose = [1,2;1,3;1,4;2,3;2,4;3,4];
dist = sqrt( (f4x(choose(:,1))-f4x(choose(:,2))).^2 + ....
    (f4y(choose(:,1))-f4y(choose(:,2))).^2);
[~, idx2] = sort(dist,'descend');

px = b(idx(choose(idx2(1,:),:).'),2);
py = b(idx(choose(idx2(1,:),:).'),1);

scatter(px, py)
一些结果

>> idx(1:4)

ans =

    28
   112
   113
    29

>> dist

dist =

   55.7853
   55.5428
    1.0000
    1.0000
   55.5428
   55.3173

有没有办法让它更敏感?例如,通过在所有这些之间添加距离points@user2676173是的,你可以检查前四个点之间的相对距离。寻找第一对相距可分辨的两个。@user2916044是的。我试图将散布更改为impoint,但没有成功。为什么?
>> idx(1:4)

ans =

    28
   112
   113
    29

>> dist

dist =

   55.7853
   55.5428
    1.0000
    1.0000
   55.5428
   55.3173