【问题标题】:How to label connected components (patches) of an image classification with python如何使用 python 标记图像分类的连接组件(补丁)
【发布时间】:2019-01-29 20:19:16
【问题描述】:

我有一个值从 1 到 3 的地理参考分类(源自卫星图像)。我想用唯一的编号标记每个连接补丁。

例如

1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 2 1 1 1 1 2 2
1 1 2 1 2 2 3 3 1 2 2
1 1 1 1 2 1 1 3 1 1 2
1 3 1 1 1 1 3 3 1 1 1
1 3 3 1 1 1 1 1 1 2 2

变成

1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 2 1 1 1 1 3 3
1 1 2 1 2 2 4 4 1 3 3
1 1 1 1 2 1 1 4 1 1 3
1 5 1 1 1 1 4 4 1 1 1
1 5 5 1 1 1 1 1 1 6 6

通过保留类信息。

我试过了:

  1. “SDMTools”中的“ConnCompLabel”,但它的工作速度很慢,如果在 python 中有一个方便的解决方案会很好。
  2. sckit 命令和“measure.lable”如本文“https://www.scipy-lectures.org/packages/scikit-image/auto_examples/plot_labels.html”中所推荐,但我不想丢失地理空间信息。

我可以使用光栅和洪水填充算法吗?

我需要这个来分别计算每个补丁的 Satial Metrics

【问题讨论】:

    标签: python r image classification labeling


    【解决方案1】:

    也许你可以这样使用 scikit-image 命令:

    • 通过为第一张图像设置从 1 到 0 不同的值,将图像分成 3 个不同的二值图像,例如

      1 1 1 1 1 1 1 1 1 1 1
      1 1 1 0 0 1 1 1 1 0 0
      1 1 0 1 0 0 0 0 1 0 0
      1 1 1 1 0 1 1 0 1 1 0
      1 0 1 1 1 1 0 0 1 1 1
      1 0 0 1 1 1 1 1 1 0 0
      

    2 和 3 一样

    • 对每张图片应用 scikit 命令

    • 移动这些值,这样它们就不会混合和重构图像

    我是否正确理解了您的问题?

    【讨论】:

    • 我的表述并不精确,标签与 scikit-image 一起使用。这种方法的问题是,空间参考信息会丢失。我现在尝试从原始分类中提取空间参考系统并将其投影到标记的分类中,但我想知道是否已经有更好的可能性。
    【解决方案2】:

    我已经解决了空间参考系统的问题,在标注后再次添加。

    # Labeling and losing geospatial information:
    Classification= imageio.imread("C:/path/to/Classification/raster.tif") # read Classification 
    labeled_Classifiation = measure.label(Classification, background=0) # label Classification
    
    # steps for adding geospatial information:
    labeled_Classifiation = np.array(ndci_EM_polished_labels)
    
    dataset=gdal.Open(r"C:/path/to/Classification/raster.tif")
    projection = dataset.GetProjection()
    geo_transform = dataset.GetGeoTransform()
    
    drv = gdal.GetDriverByName("GTiff")
    dst_ds = drv.Create("C:/path/to/result/name_of_labeled_Classifiation.tif",
                        labeled_Classifiation.shape[1],
                        labeled_Classifiation.shape[0],
                                    1,
                                    gdal.GDT_Float32, ['COMPRESS=DEFLATE',
                                                       'BIGTIFF=YES',
                                                       'PREDICTOR=1',
                                                       'TILED=YES'])
    dst_ds.SetProjection(projection)
    dst_ds.SetGeoTransform(geo_transform)
    dst_ds.GetRasterBand(1).WriteArray(labeled_Classifiation)
    

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 1970-01-01
      • 2012-05-10
      • 2019-11-11
      • 2014-07-04
      • 2017-07-09
      • 2017-07-15
      • 2021-10-11
      • 2018-11-06
      相关资源
      最近更新 更多