def defineStage1Boundaries(self, tilesImgDIR, stage1TilesSegBordersDIR, tilesBase): segTiles = glob.glob(os.path.join(tilesImgDIR, tilesBase+"*_segs.kea")) for segTile in segTiles: baseName = os.path.splitext(os.path.basename(segTile))[0] borderMaskFile = os.path.join(stage1TilesSegBordersDIR, baseName + '_segsborder.kea') rastergis.defineBorderClumps(segTile, 'BoundaryClumps') rastergis.exportCol2GDALImage(segTile, borderMaskFile, 'KEA', rsgislib.TYPE_8UINT, 'BoundaryClumps')
def performStage2TilesSegmentation(self, tilesImgDIR, tilesMaskedDIR, tilesSegsDIR, tilesSegBordersDIR, tmpDIR, tilesBase, s1BordersImage, segStatsInfo, minPxlsVal, distThresVal, bandsVal, ncpus): rsgisUtils = rsgislib.RSGISPyUtils() imgTiles = glob.glob(os.path.join(tilesImgDIR, tilesBase+"*.kea")) for imgTile in imgTiles: baseName = os.path.splitext(os.path.basename(imgTile))[0] maskedFile = os.path.join(tilesMaskedDIR, baseName + '_masked.kea') dataType = rsgisUtils.getRSGISLibDataTypeFromImg(imgTile) imageutils.maskImage(imgTile, s1BordersImage, maskedFile, 'KEA', dataType, 0, 0) imgTiles = glob.glob(os.path.join(tilesMaskedDIR, tilesBase+"*_masked.kea")) def stage2threadedTiledImgSeg(imgTile): baseName = os.path.splitext(os.path.basename(imgTile))[0] clumpsFile = os.path.join(tilesSegsDIR, baseName + '_segs.kea') kMeansCentres, imgStretchStats = self.findSegStatsFiles(imgTile, segStatsInfo) segutils.runShepherdSegmentationPreCalcdStats(imgTile, clumpsFile, kMeansCentres, imgStretchStats, outputMeanImg=None, tmpath=os.path.join(tmpDIR, baseName+'_segstemp'), gdalformat='KEA', noStats=False, noStretch=False, noDelete=False, minPxls=minPxlsVal, distThres=distThresVal, bands=bandsVal, processInMem=False) p = Pool(ncpus) p.map(stage2threadedTiledImgSeg, imgTiles) segTiles = glob.glob(os.path.join(tilesSegsDIR, tilesBase+"*_segs.kea")) for segTile in segTiles: baseName = os.path.splitext(os.path.basename(segTile))[0] borderMaskFile = os.path.join(tilesSegBordersDIR, baseName + '_segsborder.kea') rastergis.defineBorderClumps(segTile, 'BoundaryClumps') rastergis.exportCol2GDALImage(segTile, borderMaskFile, 'KEA', rsgislib.TYPE_8UINT, 'BoundaryClumps')
def ShepherdSegTest(inImage, numClusters, minPxls,tmpath, band = [1]): outputClumps = os.path.splitext(inImage)[0] + "_" + str(numClusters) + "_" + str(minPxls) + "_"+ ''.join([str(i) for i in band]) + "_clumps.kea" outputMeanImg = os.path.splitext(inImage)[0] + "_" + str(numClusters) + "_" + str(minPxls) + "_"+ ''.join([str(i) for i in band]) + "_clumps_mean.kea" segutils.runShepherdSegmentation(inImage, outputClumps, outputMeanImg, numClusters=numClusters, minPxls=minPxls, distThres=200, bands= band, tmpath= tmpath) # remove small stepwise # export columns gdalFormat = 'KEA' dataType = rsgislib.TYPE_32INT field = 'Histogram' outImage=os.path.splitext(outputClumps)[0] + "export.kea" rastergis.exportCol2GDALImage(outputClumps, outImage, gdalFormat, dataType, field) # polygonize if os.path.exists(os.path.splitext(outImage)[0] + ".shp"): os.remove(os.path.splitext(outImage)[0] + ".shp") cmd = "gdal_polygonize.py " + outImage + """ -f "ESRI Shapefile" """ + os.path.splitext(outImage)[0] + ".shp" subprocess.call(cmd, shell = True)