Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中连接黑色图像中的白点_Matlab_Image Processing - Fatal编程技术网

在matlab中连接黑色图像中的白点

在matlab中连接黑色图像中的白点,matlab,image-processing,Matlab,Image Processing,我有一个黑色的背景图像,有一个由白点和点组成的曲线形状。形状是一条闭合的不规则曲线。我有这些白点的坐标。我一直在寻找一种方法来“连接”这些点,闭合这条线,形成一条闭合曲线。我不能使用膨胀和侵蚀,因为我需要保留那些现有的位置 有什么想法吗 示例图像: 如果点已排列整齐,则使用复数非常容易: 定义示例数据(正方形): 重复第一个点(创建循环),将其视为复杂,然后绘制: plot(complex([x x(1)],[y y(1)])) 在示例中,这给出了下图 如果点没有排列整齐,可以根据@Dan最

我有一个黑色的背景图像,有一个由白点和点组成的曲线形状。形状是一条闭合的不规则曲线。我有这些白点的坐标。我一直在寻找一种方法来“连接”这些点,闭合这条线,形成一条闭合曲线。我不能使用膨胀和侵蚀,因为我需要保留那些现有的位置

有什么想法吗

示例图像:

如果点已排列整齐,则使用复数非常容易:

定义示例数据(正方形):

重复第一个点(创建循环),将其视为复杂,然后绘制:

plot(complex([x x(1)],[y y(1)]))
在示例中,这给出了下图

如果点没有排列整齐,可以根据@Dan最小化距离的思想,用类似的方法排列:

z = complex(x,y);
dist = tril(bsxfun(@(z1,z2) abs(z1-z2), z, z.')); % each pair only once ("tril")
dist(dist==0) = inf; % mark self-distances and repeated pairs as infinities
[~, ind] = min(dist);

对于每个点,
ind
给出索引较大的点中最近点的索引。有了这些信息,人们应该能够对积分进行排序。不过,这不是一个容易的问题。我不确定最小化距离是否总能得到首选形状(尽管在您的示例中是这样)。

如果点已经排列好,使用复数很容易:

定义示例数据(正方形):

重复第一个点(创建循环),将其视为复杂,然后绘制:

plot(complex([x x(1)],[y y(1)]))
在示例中,这给出了下图

如果点没有排列整齐,可以根据@Dan最小化距离的思想,用类似的方法排列:

z = complex(x,y);
dist = tril(bsxfun(@(z1,z2) abs(z1-z2), z, z.')); % each pair only once ("tril")
dist(dist==0) = inf; % mark self-distances and repeated pairs as infinities
[~, ind] = min(dist);

对于每个点,
ind
给出索引较大的点中最近点的索引。有了这些信息,人们应该能够对积分进行排序。不过,这不是一个容易的问题。我不确定最小化距离是否总能得到首选的形状(尽管在您的示例中是这样)。

如果您在有序列表中获得行、列坐标,这将起作用:

1) 使用
roiply
制作遮罩。从
roiply
帮助:
BW=roipoly(I,c,r)
返回由向量c和r描述的多边形指定的ROI,向量c和r分别指定每个顶点的列和行索引。c和r的尺寸必须相同

2) 在
BW
遮罩上使用
edge
。这将为您提供一个逻辑图,其中包含连接给定点的线

或者)不客气地使用
创建
imroi
实例,该实例是一个对象,具有许多可在其上使用的方法(函数)。这是一个更复杂的方法,将导致相同的事情,但你可能会对它感兴趣,因为它是整洁的


这两种方法都取决于您在有序列表中拥有点。

如果您在有序列表中获得行、列坐标,这将起作用:

1) 使用
roiply
制作遮罩。从
roiply
帮助:
BW=roipoly(I,c,r)
返回由向量c和r描述的多边形指定的ROI,向量c和r分别指定每个顶点的列和行索引。c和r的尺寸必须相同

2) 在
BW
遮罩上使用
edge
。这将为您提供一个逻辑图,其中包含连接给定点的线

或者)不客气地使用
创建
imroi
实例,该实例是一个对象,具有许多可在其上使用的方法(函数)。这是一个更复杂的方法,将导致相同的事情,但你可能会对它感兴趣,因为它是整洁的


这两种方法都依赖于您在有序列表中拥有点。

很好的小问题,您尝试了什么?顺便说一句,你关于膨胀/侵蚀的论点不是一个好论点,因为你总是可以保存你的起始图像(你甚至有坐标!)如何将点转换为x-y坐标,找到一个距离矩阵(如pdist),然后将每个点连接到它的两个最近邻?我只需要这些坐标,不是我要买的那种。我尝试过“polyfit”、“fit”,现在正尝试使用lsqlin,我看到有人尝试过,但我没有得到我需要的结果。好主意,Dan,简单,但可能就行了!您是只需要生成/渲染带有连接点的图像,还是需要修改图像数据本身?很好的小问题,您尝试过什么?顺便说一句,你关于膨胀/侵蚀的论点不是一个好论点,因为你总是可以保存你的起始图像(你甚至有坐标!)如何将点转换为x-y坐标,找到一个距离矩阵(如pdist),然后将每个点连接到它的两个最近邻?我只需要这些坐标,不是我要买的那种。我尝试过“polyfit”、“fit”,现在正尝试使用lsqlin,我看到有人尝试过,但我没有得到我需要的结果。好主意,Dan,简单,但可能就行了!你只需要生成/渲染带有连接点的图像,还是需要修改图像数据本身?对于假定的256 x 216图像,我有矩阵中这些点的坐标。我稍后会试试这个。非常感谢你!工作愉快。非常感谢弗雷德里克!我有一个矩阵中这些点的坐标,假设是256 x 216的图像。我稍后会试试这个。非常感谢你!工作愉快。非常感谢弗雷德里克!