【问题标题】:Estimating Region covered by all sides估计所有面覆盖的区域
【发布时间】:2021-07-04 03:30:52
【问题描述】:

我需要一些帮助来估计某种形态学操作(通常最好使用 skimage 或 scipy 图像或 python),这可以帮助我隔离被所有边包围的区域(参见图片。)问题是外壳可以有不同的形状和大小。封闭区域也具有不同的形状和大小。 封闭(由白色区域)黑色区域需要隔离的图像示例。

隔离是指获取封闭黑色区域中的所有像素坐标。

示例 1

示例 2

另外一个警告是这样的图像不应该被填满。

【问题讨论】:

  • np.invert 翻转位,使黑色封闭区域为白色,然后是 scikit-image 的 regionprops 以确定最小区域。
  • 除了反转颜色之外,还可以使用 OpenCV cv2.findContours 及其层次结构来查找子区域。
  • 我的回答或胡安的回答是否解决了您的问题?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…

标签: python-3.x image-processing scipy scikit-image mathematical-morphology


【解决方案1】:

使用scipy.ndimage.binary_fill_holes

from scipy import ndimage as ndi

filled = ndi.binary_fill_holes(image)
holes = filled - image  # or np.logical_xor(filled, image)

【讨论】:

    【解决方案2】:

    我更喜欢@胡安的解决方案,但只是为了好玩,这是一种略微不同的方法。从左上角开始的白色填充溢出,您的完全封闭的像素将全部留下。

    #!/usr/bin/env python3
    
    import numpy as np
    from skimage.segmentation import flood_fill
    import cv2
    
    im = cv2.imread('scan.png', cv2.IMREAD_GRAYSCALE)
    
    # Fill with white from top-left
    filled = flood_fill(im, (0, 0), 255)
    
    # Save result
    cv2.imwrite('DEBUG-result.png', filled)
    
    # Get list of black pixels
    blk = np.where(filled==0)
    print(f'Number of fully enclosed black pixels: {len(blk[0])}')
    print(blk)
    

    让您可以看到图像的范围,我人为地添加了一个红色边框:

    这是输出:

    Number of fully enclosed black pixels: 957
    (array([364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
           364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
           364, 364, 364, 364, 364, 364, 364, 365, 365, 365, 365, 365, 365,
           365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
           365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
           365, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
           366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
           366, 366, 366, 366, 366, 366, 366, 366, 367, 367, 367, 367, 367,
           367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
           367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
           367, 367, 367, 367, 367, 368, 368, 368, 368, 368, 368, 368, 368,
           368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368,
           368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368,
           368, 368, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369,
           369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369,
           369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 370,
           370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370,
           370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370,
           370, 370, 370, 370, 370, 370, 370, 370, 370, 371, 371, 371, 371,
           371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371,
           371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371,
           371, 371, 371, 371, 371, 371, 372, 372, 372, 372, 372, 372, 372,
           372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
           372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
           372, 372, 372, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373,
           373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373,
           373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 374, 374, 374,
           374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374,
           374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374,
           374, 374, 374, 374, 375, 375, 375, 375, 375, 375, 375, 375, 375,
           375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
           375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 376, 376,
           376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376,
           376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376,
           376, 376, 376, 376, 376, 377, 377, 377, 377, 377, 377, 377, 377,
           377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377,
           377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 378,
           378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
           378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
           378, 378, 378, 378, 378, 378, 379, 379, 379, 379, 379, 379, 379,
           379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379,
           379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379,
           380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380,
           380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380,
           380, 380, 380, 380, 380, 380, 380, 381, 381, 381, 381, 381, 381,
           381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381,
           381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381,
           381, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382,
           382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382,
           382, 382, 382, 382, 382, 382, 382, 382, 383, 383, 383, 383, 383,
           383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
           383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
           383, 383, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
           384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
           384, 384, 384, 384, 384, 384, 384, 384, 384, 385, 385, 385, 385,
           385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385,
           385, 385, 385, 385, 385, 385, 385, 386, 386, 386, 386, 386, 386,
           386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386,
           386, 386, 386, 386, 386, 387, 387, 387, 387, 387, 387, 387, 387,
           387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
           387, 387, 387, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388,
           388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 389, 389,
           389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
           389, 389, 389, 389, 389, 389, 390, 390, 390, 390, 390, 390, 390,
           390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
           390, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
           391, 391, 391, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
           392, 392, 392, 392, 392, 393, 393, 393, 393, 393, 393, 393, 393,
           393, 393, 393, 393, 393, 393, 393, 394, 394, 394, 394, 394, 394,
           394, 394, 394, 394, 394, 394, 394, 394, 394, 395, 395, 395, 395,
           395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 396, 396,
           396, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397, 397, 397,
           397, 397, 397, 398, 398, 398, 398, 398, 398, 398, 398, 398, 399,
           399, 399, 400, 400, 400, 401, 401, 401]), array([244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
           257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
           270, 271, 272, 273, 274, 275, 276, 244, 245, 246, 247, 248, 249,
           250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
           263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
           276, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
           256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
           269, 270, 271, 272, 273, 274, 275, 276, 241, 242, 243, 244, 245,
           246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
           259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
           272, 273, 274, 275, 276, 241, 242, 243, 244, 245, 246, 247, 248,
           249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
           262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
           275, 276, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
           252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
           265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 241,
           242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
           255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
           268, 269, 270, 271, 272, 273, 274, 275, 276, 241, 242, 243, 244,
           245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
           258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
           271, 272, 273, 274, 275, 276, 241, 242, 243, 244, 245, 246, 247,
           248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
           261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
           274, 275, 276, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
           251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
           264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 241, 242, 243,
           244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
           257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
           270, 271, 272, 273, 241, 242, 243, 244, 245, 246, 247, 248, 249,
           250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
           263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 241, 242,
           243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
           256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
           269, 270, 271, 272, 273, 241, 242, 243, 244, 245, 246, 247, 248,
           249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
           262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 241,
           242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
           255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
           268, 269, 270, 271, 272, 273, 241, 242, 243, 244, 245, 246, 247,
           248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
           261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
           241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
           254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
           267, 268, 269, 270, 271, 272, 273, 241, 242, 243, 244, 245, 246,
           247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
           260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
           273, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
           253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
           266, 267, 268, 269, 270, 271, 272, 273, 241, 242, 243, 244, 245,
           246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
           259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
           272, 273, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
           252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
           265, 266, 267, 268, 269, 270, 271, 272, 273, 253, 254, 255, 256,
           257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
           270, 271, 272, 273, 274, 275, 276, 253, 254, 255, 256, 257, 258,
           259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
           272, 273, 274, 275, 276, 253, 254, 255, 256, 257, 258, 259, 260,
           261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
           274, 275, 276, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
           266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 256, 257,
           258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
           271, 272, 273, 274, 275, 276, 256, 257, 258, 259, 260, 261, 262,
           263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
           276, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
           271, 272, 273, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
           269, 270, 271, 272, 273, 259, 260, 261, 262, 263, 264, 265, 266,
           267, 268, 269, 270, 271, 272, 273, 259, 260, 261, 262, 263, 264,
           265, 266, 267, 268, 269, 270, 271, 272, 273, 259, 260, 261, 262,
           263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 262, 263,
           264, 265, 266, 267, 268, 269, 270, 262, 263, 264, 265, 266, 267,
           268, 269, 270, 262, 263, 264, 265, 266, 267, 268, 269, 270, 265,
           266, 267, 265, 266, 267, 265, 266, 267]))
    

    希望您可以从每个阵列的第一个元素看,第一个黑色像素是364,244

    请注意,如果扫描将触摸图像的边缘有可能触摸图像的边缘,则洪水填充将无法在边缘周围的所有方式“流” em>。在这种情况下,您可以简单地添加一个围绕边缘的1像素宽黑色边框,以便填充填充物流......然后将其移除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      相关资源
      最近更新 更多