【问题标题】:Any good OpenCV or SKImage techniques to thin out gridlines?有什么好的 OpenCV 或 SKImage 技术可以细化网格线?
【发布时间】:2021-07-09 16:15:32
【问题描述】:

我提取了一个干净的网格图案:

以上是我“骨架化”(或细化,或执行中轴变换)之前的网格。

下面是应用skimage.skeletonize|medial_axis|thinmethod=lee 进行骨架化后的图像:

由于线条的“粗”或“粗”,这些似乎完全消除了网格。

有没有更好的方法来细化这些线条?

【问题讨论】:

  • 我认为skeletonize 不会实现您想要实现的目标。已经有一个关于你在追求什么的问题,查看 Miki 使用形态学运算的答案stackoverflow.com/questions/33095476/…
  • 你实际想要的输出是什么,哪些部分应该删除,哪些应该保留?对我来说,这还不清楚。你能提供一个草图或类似的吗?
  • @HansHirse 它应该具有与原始图像完全相同的连通性和叶边缘,在原始图像的中心明显边缘,宽度为 1,长度相同,具有直角(理想情况下)
  • @Chris 你试过 Miki 的回答吗?我认为它应该在网格内产生 1px 宽度的线条。
  • @KnightForked 我实际上在这里实现了该方法。它具有与上图相似的结果。我认为距离地图版本是最佳版本,但这需要识别距离地图中的山脊……你不会碰巧知道其中的诀窍吧?

标签: python opencv scikit-image


【解决方案1】:

我已经修改了@Miki 的答案(实际上我的搜索显示它最初是由另一个 SO 用户在 2013 年发布的)。看看这个解决方案是否可以通过调整一些参数来修改,以适应您的情况。

oElem = cv2.getStructuringElement(cv2.MORPH_RECT,(10,1))
h = cv2.morphologyEx(img, cv2.MORPH_OPEN, oElem,  iterations = 5)

oElem = cv2.getStructuringElement(cv2.MORPH_RECT,(1,10))
v = cv2.morphologyEx(img, cv2.MORPH_OPEN, oElem,  iterations = 5)

size = np.size(img)
skelh = np.zeros(img.shape,np.uint8)
skelv = np.zeros(img.shape,np.uint8)

ret,img = cv2.threshold(img,127,255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
done = False
while( not done):
    eroded = cv2.erode(h,element)
    temp = cv2.dilate(eroded,element)
    temp = cv2.subtract(h,temp)
    skelh = cv2.bitwise_or(skelh,temp)
    h = eroded.copy()
 
    if cv2.countNonZero(h)==0:
        done = True
        
done = False
while( not done):
    eroded = cv2.erode(v,element)
    temp = cv2.dilate(eroded,element)
    temp = cv2.subtract(v,temp)
    skelv = cv2.bitwise_or(skelv,temp)
    v = eroded.copy()
 
    if cv2.countNonZero(v)==0:
        done = True
        
skel = cv2.bitwise_or(skelh,skelv)

【讨论】:

  • 我去看看!是的,在我看来,这些变形操作过于笼统,我们应该有一些专门的网格和盒子功能
  • 成功了吗?我认为它应该适用于大多数类似的图像。您可能需要稍微扩张 skelh 和 skelv,因为它们在第一步中会被侵蚀。不太确定是否有任何专门的功能适用于各种网格和盒子。在这个方向上研究距离图是最好的选择,但可靠地找到山脊将非常困难。如果网格/框线在水平和垂直方向上合理对齐,则此解决方案应该可以很好地工作。
  • 还没有——我现在会接受它,如果我有机会运行我的那部分代码时无法重现它,我会在这里联系你
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2013-01-28
  • 2014-10-03
相关资源
最近更新 更多