【问题标题】:Thinning/Skeletenization is distorting my image细化/骨架化扭曲了我的形象
【发布时间】:2018-08-12 08:54:25
【问题描述】:

我正在尝试使此图像变薄,但它不断变形。

这是我应用细化的相关代码。我也尝试了“瘦”功能而不是“骨架化”,但结果相似。

from skimage.morphology import skeletonize, thin
new_im = cv2.imread(im_pth)
gray = cv2.cvtColor(new_im, cv2.COLOR_BGR2GRAY)
ske = (skeletonize(gray//255) * 255).astype(np.uint8)
cv2.imshow("image", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

我的目标是细化后得到类似这样的形状:

我做错了什么?我在网上读到,有时 jpg 文件会导致问题,但我没有该领域的经验来确认这一点。

【问题讨论】:

    标签: python opencv image-processing computer-vision scikit-image


    【解决方案1】:

    我不确定您从输入图像到二进制的转换是否正确。这是一个使用 scikit-image 函数的版本,似乎可以满足您的需求:

    from skimage import img_as_float
    from skimage import io, color, morphology
    import matplotlib.pyplot as plt
    
    image = img_as_float(color.rgb2gray(io.imread('char.png')))
    image_binary = image < 0.5
    out_skeletonize = morphology.skeletonize(image_binary)
    out_thin = morphology.thin(image_binary)
    
    
    f, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=(10, 3))
    
    ax0.imshow(image, cmap='gray')
    ax0.set_title('Input')
    
    ax1.imshow(out_skeletonize, cmap='gray')
    ax1.set_title('Skeletonize')
    
    ax2.imshow(out_thin, cmap='gray')
    ax2.set_title('Thin')
    
    plt.savefig('/tmp/char_out.png')
    plt.show()
    

    【讨论】:

      【解决方案2】:

      从您的示例中,由于您的图像是二进制的,我认为您想要做的最好通过(二进制)侵蚀来实现。 Wikipedia 很好地解释了这个概念。直观地(如果您没有时间阅读维基百科链接),假设您有一个二进制图像A,就像您给出的那样,让我们​​调用A_1A 的像素集1 的值。然后,定义一个“结构元素”K,例如可以是大小为n*n 的正方形补丁。然后在伪代码中

      for pixel in A_1:
          center K at pixel, and call this centered version K_pixel 
          if(K_pixel is contained in A_1):
              keep pixel
          else:
              discard pixel
      

      因此,这具有对图像中连接的组件进行细化的效果。

      这个函数是标准的,在opencv中实现,here是一些python示例,here是文档的链接(c++)。

      【讨论】:

      • 感谢您回来,我正在转换为灰度,但实际上需要在细化之前应用自适应阈值!傻我
      猜你喜欢
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多