我有一个从Canny边缘检测器获得的二进制图像。在中心没有很好地检测到边缘,我需要加入它们。边缘的连接取决于方向和邻域。如果顶点低于阈值(例如小于5像素距离),则需要连接顶点。如果我的几乎线性特征定位良好,则应放宽此阈值。 (这是最好的情况。)


我尝试了霍夫变换,但对我来说不起作用,因为我没有直线。膨胀和侵蚀也不好;

我尝试的方法是先检测顶点和节点(在MATLAB中使用bwmorph),然后将叶子作为单独的功能。这样做如下:


在3x3窗口中扫描,寻找邻居。
遍历完整的连接对象。
尝试拟合一条直线(或者可能是二次多项式)。
逐个功能检查是否值得连接。

实现起来并不简单,因为需要连接顶点的决策部分比较棘手。

评论

我找到了一个有趣的解决方案来查找分支。 MATLAB可以很容易地给出节点的位置。 MATLAB还可以标记连接的特征。因此,您可以选择一项连接的功能。查找节点。将这些节点设置为0。基本上断开功能并再次标记它们。您将在树上有树枝。这需要较少的手动编程,结果似乎还不错。一些输入?

对于连接部分,我现在正在考虑查找大型功能并认为它们更可靠。然后,如果它们是直线(检查适应性),则将其转换为极坐标并像霍夫变换那样搜索邻域。对于较大的要素,搜索半径较大(与大小成比例)。我正在执行此代码。结果在路上。评论请

#1 楼

这可能不是完整的解决方案,但会为您提供良好的指导。

基本上,说边缘匹配的主要标准是什么?边缘的“局部”梯度匹配并且在某种程度上距离相对于边缘连续多长时间是合理的。

如果您有几何形状的边缘(如长直线),霍夫将立即完成非常无缝的工作。但这在边是任意曲线时不起作用。在这种情况下,您仍然可以将曲线视为大致逐段的恒定段(在您的情况下足够好),因此,您应该在本地使用Hough。也就是说,您可以拍摄一小部分图像(例如一个块)来计算霍夫峰并确定一些峰值。在此基础上,您可以确定脱霍夫正在创建有意义的差距,如果是这样,请继续努力或继续前进。

一旦填补了较小的空白,您可以将其扩大以扩大尺寸。峰会更多,但您可以从中选择更少。

评论


$ \ begingroup $
感谢Dipan,我也想到了这一点。这将是昂贵的操作,但我可以提取一些信息。但是有时Hoguh变形也不给我连接线。霍夫只照顾完美的直线。并且不关心像素的连通性。它仅使一条直线适合直线上的3个或更多随机像素。我正在编码我的假设。我将在这里发布结果以供进一步讨论。纳雷什
$ \ endgroup $
–那雷什
2012年6月1日9:08



$ \ begingroup $
我同意,但是当霍夫本地化时,与此问题相关的噪音变得容易。其次,对于嘈杂的边缘,您会看到较小的多个峰。我们将它们转换为主峰,并将其视为连接的边缘。是的,这只是一个近似值-但是您经历的任何回归和预测过程始终都是这种情况。想法是查看哪些行在一个小区域共享了$ \ theta $。
$ \ endgroup $
– Dipan Mehta
2012年6月1日上午9:22

#2 楼

确实,这并不是一件容易的事情……您可以尝试完全使用Graph结构。首先从图像中提取所有连接的像素,然后将它们插入到Graph中,其中相邻节点通过一条边连接。您可以丢弃小于节点M个数的图(以排除与图像无关的小斑点)。

在此过程结束时,您将具有一组断开连接的图。 (从您的图像来看,这些树不完全是树,因为其中存在循环)。

您可以从一些图形开始,找到每个图形的极点(每个图形外围的极点像素)。

在此过程结束时,您将为每个图具有一组像素坐标,这些像素坐标对应于更可能形成连接的极值点。

现在,您可以尝试仅用一条直线连接最近的极值点邻居(距离<= 5)。

但是,如果您要考虑直线的斜率导致该末端像素的线段,您可以在到达该末端像素之前尝试将线“拟合”到N个像素。因此,如果N = 5,则分支的最后5个像素将用于估算线。

因此,对于每个最近的邻居对,您现在还有另一件事可以用作判断是否应连接两个线段的标准(例如,极点距离<= 5像素和近似相等的线斜率)。

为了最大程度地减少可能使您的线条在分支的尖端附近出现锯齿(从而扭曲您的斜率估计)的噪声影响,您可以尝试对图形应用简化步骤(这是另一个要点(除上面的DFS之外))使用Graph结构)。例如,您可以删除Graph的后续节点,这些节点会使直线以大于某些截止点的角度“弯曲”(有关更复杂的信息,请参见此处)。这样,您将使“较简单”的线条大致与由图像像素形成的线段的大部分相适应。

在大多数情况下,这可能会导致连接良好(从您发布的图片来看),但这仍然会给您带来一些挑战。例如,如何连接分支附近的分支之一被中断的“ Y”形中断模式? (即,您有一个“连续”折弯,必须与与其“混合”的线段相连)。也许您可以回顾一下这种情况的普遍性,然后再修改连接标准。

此外,也许值得研究一下如何改善图像采集(例如提高分辨率)。

评论


$ \ begingroup $
感谢您的好评。是的,您的观察是对的。它不是一棵树,所以更好地制作图表。这也将帮助我找到周期。事实是,MATLAB在bioinfo工具箱中实现了图形,我不能认为大多数人都会拥有图形。我最能走的就是图像处理工具箱。我也考虑过道格拉斯·皮克(Douglas-peucker)。但是,在咨询了GIS专家之后,我意识到这可能会使事情变得更复杂,而且我可能会相交。另外,我还需要查看图形中的不同线段,因为我需要10个像素才能形成一条线,而且我可能已经分叉了。
$ \ endgroup $
–那雷什
2012年6月1日15:05