增加军民港口文件区分
parent
2b72ea22db
commit
a9f390d2f8
|
|
@ -0,0 +1,188 @@
|
||||||
|
import numpy as np
|
||||||
|
import os
|
||||||
|
from glob import glob
|
||||||
|
from pathlib import Path
|
||||||
|
from multiprocessing import Pool
|
||||||
|
import hashlib # md5
|
||||||
|
import time
|
||||||
|
import shutil
|
||||||
|
import datetime
|
||||||
|
########################################################
|
||||||
|
# 函数区
|
||||||
|
########################################################
|
||||||
|
|
||||||
|
spacetySliceEnvPathExEPath=r"d:\ProgramData\anaconda3\envs\spacetySliceEnv\python.exe"
|
||||||
|
|
||||||
|
logPath=r"R:\TYSAR-德清院\A-预处理-未标注\A0-算法版本\AA\SpacetySliceDataTools\log\process.log"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def existOrCreate(dirpath):
|
||||||
|
if not os.path.exists(dirpath):
|
||||||
|
os.makedirs(dirpath)
|
||||||
|
|
||||||
|
def moveDir(srcfolderPath,targetfolderPath):
|
||||||
|
try:
|
||||||
|
shutil.copytree(srcfolderPath,targetfolderPath,dirs_exist_ok=True)
|
||||||
|
print("sucess: copy ", srcfolderPath,targetfolderPath )
|
||||||
|
shutil.rmtree(srcfolderPath)
|
||||||
|
print("sucess: rmtree ", srcfolderPath)
|
||||||
|
return "sucess: copy and rmtree from {} to {}".format(srcfolderPath,targetfolderPath),True
|
||||||
|
except Exception as e:
|
||||||
|
print("failed: copy ", srcfolderPath, targetfolderPath)
|
||||||
|
return "failed: copy and rmtree from {} to {}".format(srcfolderPath,targetfolderPath),False
|
||||||
|
|
||||||
|
def writeoutlog(logPath,cmdtxt):
|
||||||
|
with open(logPath,'a',encoding="utf-8") as f:
|
||||||
|
f.write(cmdtxt)
|
||||||
|
f.write("\n")
|
||||||
|
|
||||||
|
|
||||||
|
def preProcessTiFF(tiffpath,txtpath,preFolderPath):
|
||||||
|
|
||||||
|
file_path = Path(tiffpath)
|
||||||
|
directory_path = str(file_path.resolve().parent.name)
|
||||||
|
rootname=Path(tiffpath).stem
|
||||||
|
outpngpath=os.path.join(preFolderPath,"I"+directory_path+"_"+rootname+'.png')
|
||||||
|
programpath=r"R:\TYSAR-德清院\A-预处理-未标注\A0-算法版本\AA\SpacetySliceDataTools\generatorRasterSlicesTools\SpacetyTIFFDataStretch2PNG_AC.py"
|
||||||
|
|
||||||
|
# cmdtxt=r"{} {} -i {} -o {} --filemode --SquareRoot".format(spacetySliceEnvPathExEPath,programpath,tiffpath,outpngpath)
|
||||||
|
cmdtxt=r"{} {} -i {} -p {} -o {} --slicemode --SquareRoot".format(
|
||||||
|
spacetySliceEnvPathExEPath,programpath,
|
||||||
|
tiffpath,
|
||||||
|
txtpath,
|
||||||
|
preFolderPath
|
||||||
|
) # 直接切片
|
||||||
|
if os.system(cmdtxt) ==2:
|
||||||
|
print("sucess:",cmdtxt)
|
||||||
|
writeoutlog(logPath, "sucess: {}\n".format(cmdtxt))
|
||||||
|
return 2
|
||||||
|
else:
|
||||||
|
print("failed:",cmdtxt)
|
||||||
|
writeoutlog(logPath, "failed: {}\n".format(cmdtxt))
|
||||||
|
return 3
|
||||||
|
|
||||||
|
|
||||||
|
def processMJPort(srcFolderPath,outMJPortSumTxtPath,outMJPortFolderPath,MLCShapeFilePath,JLCShapeFilePath,MJLCShapeFilePath):
|
||||||
|
programpath = r"R:\TYSAR-德清院\A-预处理-未标注\A0-算法版本\AA\SpacetySliceDataTools\generatorRasterSlicesTools\SplitShipPortRasterTools_AC.py"
|
||||||
|
cmdtxt=r"{} {} -s {} -o {} -f {} -m {} -j {} --jmlc {}".format(
|
||||||
|
spacetySliceEnvPathExEPath,programpath,
|
||||||
|
srcFolderPath,outMJPortSumTxtPath,outMJPortFolderPath,
|
||||||
|
MLCShapeFilePath, JLCShapeFilePath, MJLCShapeFilePath
|
||||||
|
)
|
||||||
|
if os.system(cmdtxt) ==2:
|
||||||
|
print("sucess:",cmdtxt)
|
||||||
|
return "sucess: {}".format(cmdtxt)
|
||||||
|
else:
|
||||||
|
print("failed:",cmdtxt)
|
||||||
|
return "failed: {}".format(cmdtxt)
|
||||||
|
|
||||||
|
|
||||||
|
def preProcessShipPortTools(srcFolderPath,targetFolderPath,outTargetFolderPath):
|
||||||
|
writeoutlog(logPath, "====================================================================================\n")
|
||||||
|
writeoutlog(logPath, "time: {}".format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
|
||||||
|
writeoutlog(logPath, "srcFolderPath: {}".format(srcFolderPath))
|
||||||
|
writeoutlog(logPath, "targetFolderPath: {}".format(targetFolderPath))
|
||||||
|
writeoutlog(logPath, "process start \n")
|
||||||
|
|
||||||
|
# 文件接口创建
|
||||||
|
MPortFolder=os.path.join(targetFolderPath,"AC-图像预处理","民港口")
|
||||||
|
JPortFolder=os.path.join(targetFolderPath,"AC-图像预处理","军港口")
|
||||||
|
MJPortFolder=os.path.join(targetFolderPath,"AC-图像预处理","混合港口")
|
||||||
|
NoPortFolder=os.path.join(targetFolderPath,"AC-图像预处理","无港口")
|
||||||
|
|
||||||
|
existOrCreate(MPortFolder)
|
||||||
|
existOrCreate(JPortFolder)
|
||||||
|
existOrCreate(MJPortFolder)
|
||||||
|
existOrCreate(NoPortFolder)
|
||||||
|
|
||||||
|
outMJPortSumTxtPath=os.path.join(targetFolderPath,"AC-图像预处理","sumMJPort.txt")
|
||||||
|
outMJPortFolderPath=os.path.join(targetFolderPath,"AC-图像预处理","sumMJPortFolder")
|
||||||
|
|
||||||
|
MLCShapeFilePath=r"D:\TYSAR-德清院\目标点位信息更新\0828目标点位\港口(民船).shp"
|
||||||
|
JLCShapeFilePath=r"D:\TYSAR-德清院\目标点位信息更新\0828目标点位\军港.shp"
|
||||||
|
MJLCShapeFilePath=r"D:\TYSAR-德清院\目标点位信息更新\0828目标点位\军民一体港口.shp"
|
||||||
|
|
||||||
|
# 港口归属
|
||||||
|
if processMJPort(srcFolderPath,outMJPortSumTxtPath,outMJPortFolderPath,MLCShapeFilePath,JLCShapeFilePath,MJLCShapeFilePath)==2:
|
||||||
|
# 逐行处理
|
||||||
|
MJlines=None
|
||||||
|
with open(outMJPortSumTxtPath,"r",encoding="utf-8") as f:
|
||||||
|
MJlines=f.readlines()
|
||||||
|
|
||||||
|
MLCName = "MLC" # M
|
||||||
|
JLCName = "JLC" # J
|
||||||
|
MJLCName = "MJLC" # JM 混合
|
||||||
|
NOLCName = "NOLC" # 没有港口
|
||||||
|
|
||||||
|
async_results = []
|
||||||
|
with Pool(processes=6) as pool:
|
||||||
|
for linestr in MJlines:
|
||||||
|
if len(linestr)>3:
|
||||||
|
clsname=linestr.split("\t\t")[0]
|
||||||
|
tiffpath=linestr.split("\t\t")[1]
|
||||||
|
rootname=Path(tiffpath).stem
|
||||||
|
portTxtpath = os.path.join(outMJPortFolderPath, rootname + ".txt")
|
||||||
|
tarPortFolder=None
|
||||||
|
if clsname==MLCName:
|
||||||
|
tarPortFolder=MPortFolder
|
||||||
|
elif clsname==JLCName:
|
||||||
|
tarPortFolder=JPortFolder
|
||||||
|
elif clsname==MJLCName:
|
||||||
|
tarPortFolder=MJPortFolder
|
||||||
|
elif clsname==NOLCName:
|
||||||
|
tarPortFolder=NoPortFolder
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
async_results.append(preProcessTiFF(tiffpath,portTxtpath,tarPortFolder))
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
# 处理分块
|
||||||
|
for pidx in range(len(async_results)):
|
||||||
|
async_result=async_results[pidx]
|
||||||
|
print("{}/{}".format(pidx+1,len(async_results)),async_result.get())
|
||||||
|
writeoutlog(logPath,"{}/{} {}".format(pidx+1,len(async_results),async_result.get()))
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
|
writeoutlog(logPath, "\nprocess finished \n")
|
||||||
|
moverTip,moveflag=moveDir(targetFolderPath, outTargetFolderPath)
|
||||||
|
writeoutlog(logPath, moverTip)
|
||||||
|
writeoutlog(logPath, "====================================================================================\n")
|
||||||
|
if moveflag:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
exit(3)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
# 20250813-不分类 条带模式
|
||||||
|
# srcFolderPath = r"R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250813-不分类\0-原图"
|
||||||
|
# preFolderPath = r"D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250813-不分类\A-预处理\AB-图像预处理"
|
||||||
|
# targetfolderPath = r"D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250813-不分类\A-预处理\AB-图像预处理"
|
||||||
|
# preProcessShipPortTools(srcFolderPath, preFolderPath, targetfolderPath,logPath)
|
||||||
|
#
|
||||||
|
# # 20250818 条带模式
|
||||||
|
# srcFolderPath = r"R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250818-不分类\0-原图"
|
||||||
|
# preFolderPath = r"D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250818-不分类\A-预处理\AB-图像预处理"
|
||||||
|
# targetfolderPath = r"R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250818-不分类\A-预处理\AB-图像预处理"
|
||||||
|
# preProcessShipPortTools(srcFolderPath, preFolderPath,targetfolderPath, logPath)
|
||||||
|
#
|
||||||
|
# 20250826-不分类 条带模式
|
||||||
|
srcFolderPath = r"R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250826-不分类\0-原图"
|
||||||
|
preFolderPath = r"D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250826-不分类\A-预处理\AB-图像预处理"
|
||||||
|
targetfolderPath = r"R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250826-不分类\A-预处理\AB-图像预处理"
|
||||||
|
preProcessShipPortTools(srcFolderPath, preFolderPath, targetfolderPath,logPath)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -13,8 +13,8 @@ import math
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
portsliceSize=5000
|
||||||
sliceSize=1024
|
shipsliceSize=1024
|
||||||
BlockOverLayer=0.25
|
BlockOverLayer=0.25
|
||||||
|
|
||||||
def get_filename_without_ext(path):
|
def get_filename_without_ext(path):
|
||||||
|
|
@ -253,15 +253,15 @@ def getNextSliceNumber(n,sliceSize,overlap=0.25):
|
||||||
print("重叠率:",movelayer)
|
print("重叠率:",movelayer)
|
||||||
return newN,ti
|
return newN,ti
|
||||||
|
|
||||||
def sliceDataset(rootname,im_data,src_im_data, im_Geotrans, im_proj, outfolder):
|
def sliceShipDataset(rootname,im_data,src_im_data, im_Geotrans, im_proj, outfolder):
|
||||||
binfolder=os.path.join(outfolder,"unit8binfolder")
|
binfolder=os.path.join(outfolder,"unit8binfolder")
|
||||||
pngfolder=os.path.join(outfolder,"pngfolder")
|
pngfolder=os.path.join(outfolder,"pngfolder")
|
||||||
tifffolder=os.path.join(outfolder,"tifffolder")
|
tifffolder=os.path.join(outfolder,"tifffolder")
|
||||||
|
|
||||||
|
|
||||||
h,w=im_data.shape
|
h,w=im_data.shape
|
||||||
nextH,ht=getNextSliceNumber(h,sliceSize,BlockOverLayer)
|
nextH,ht=getNextSliceNumber(h,shipsliceSize,BlockOverLayer)
|
||||||
nextW,wt=getNextSliceNumber(w,sliceSize,BlockOverLayer)
|
nextW,wt=getNextSliceNumber(w,shipsliceSize,BlockOverLayer)
|
||||||
padH=nextH-h
|
padH=nextH-h
|
||||||
padW=nextW-w
|
padW=nextW-w
|
||||||
im_data=np.pad(im_data,((0,padH),(0,padW)),mode='constant',constant_values=0)
|
im_data=np.pad(im_data,((0,padH),(0,padW)),mode='constant',constant_values=0)
|
||||||
|
|
@ -270,8 +270,8 @@ def sliceDataset(rootname,im_data,src_im_data, im_Geotrans, im_proj, outfolder):
|
||||||
for hi in ht:
|
for hi in ht:
|
||||||
for wi in wt:
|
for wi in wt:
|
||||||
geotrans_temp=getsliceGeotrans(im_Geotrans,wi,hi)
|
geotrans_temp=getsliceGeotrans(im_Geotrans,wi,hi)
|
||||||
im_data_temp=im_data[hi:hi+1024,wi:wi+1024]
|
im_data_temp=im_data[hi:hi+shipsliceSize,wi:wi+shipsliceSize]
|
||||||
src_im_data_temp=src_im_data[hi:hi+1024,wi:wi+1024]
|
src_im_data_temp=src_im_data[hi:hi+shipsliceSize,wi:wi+shipsliceSize]
|
||||||
slice_ID = slice_ID + 1
|
slice_ID = slice_ID + 1
|
||||||
if not is_all_same(im_data_temp):
|
if not is_all_same(im_data_temp):
|
||||||
sliceBinPath=os.path.join(binfolder, rootname+"_"+str(slice_ID).zfill(4)+"_image.tiff")
|
sliceBinPath=os.path.join(binfolder, rootname+"_"+str(slice_ID).zfill(4)+"_image.tiff")
|
||||||
|
|
@ -283,9 +283,94 @@ def sliceDataset(rootname,im_data,src_im_data, im_Geotrans, im_proj, outfolder):
|
||||||
Image.fromarray(im_data_temp).save(slicepngPath,compress_level=0)
|
Image.fromarray(im_data_temp).save(slicepngPath,compress_level=0)
|
||||||
|
|
||||||
print("图像切片结束")
|
print("图像切片结束")
|
||||||
|
return slice_ID
|
||||||
|
|
||||||
|
|
||||||
def stretchSliceProcess(infilepath, outfolder, strechmethod):
|
|
||||||
|
def ishasPort(im_Geotrans,im_data,MLCPoints,JLCPoints,MJLCPoints):
|
||||||
|
LCpoints=MLCPoints+JLCPoints+MJLCPoints
|
||||||
|
# 获取范围
|
||||||
|
rows=im_data.shape[0]
|
||||||
|
cols=im_data.shape[1]
|
||||||
|
x1=im_Geotrans[0]+im_Geotrans[1]*0
|
||||||
|
x2=im_Geotrans[0]+im_Geotrans[1]*cols
|
||||||
|
|
||||||
|
y1=im_Geotrans[3]+im_Geotrans[5]*0
|
||||||
|
y2=im_Geotrans[3]+im_Geotrans[5]*rows
|
||||||
|
|
||||||
|
xmin=min(x1,x2)
|
||||||
|
xmax=max(x1,x2)
|
||||||
|
ymin=min(y1,y2)
|
||||||
|
ymax=max(y1,y2)
|
||||||
|
# 数据处理
|
||||||
|
for p in LCpoints:
|
||||||
|
x_in_range = (p[0] >= xmin) & (p[0]<= xmax)
|
||||||
|
y_in_range = (p[1] >= ymin) & (p[1] <= ymax)
|
||||||
|
within_rect_indices_mask = x_in_range & y_in_range
|
||||||
|
if within_rect_indices_mask:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def slicePortDataset(rootname,im_data,src_im_data, im_Geotrans, im_proj, outfolder,slice_ID,portfilestr):
|
||||||
|
# 读取portfilestr 中文件
|
||||||
|
MLCPoints=[]
|
||||||
|
JLCPoints=[]
|
||||||
|
MJLCPoints=[]
|
||||||
|
with open(portfilestr,"r",encoding="utf-8") as portfile:
|
||||||
|
for line in portfile.readlines():
|
||||||
|
if(len(line)>3):
|
||||||
|
linemetas=line.split("\t\t")
|
||||||
|
clsname=linemetas[0]
|
||||||
|
pointstr=linemetas[1]
|
||||||
|
pointx=float(pointstr.split(",")[0])
|
||||||
|
pointy=float(pointstr.split(",")[1])
|
||||||
|
if clsname=="JLC":
|
||||||
|
JLCPoints.append([pointx,pointy])
|
||||||
|
elif clsname=="MJLC":
|
||||||
|
MJLCPoints.append([pointx,pointy])
|
||||||
|
elif clsname=="MLC":
|
||||||
|
MLCPoints.append([pointx,pointy])
|
||||||
|
# 处理文件脚本
|
||||||
|
if len(MLCPoints)==0 and len(JLCPoints)==0 and len(MJLCPoints)==0:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
# 切片主流程
|
||||||
|
binfolder=os.path.join(outfolder,"unit8binfolder")
|
||||||
|
pngfolder=os.path.join(outfolder,"pngfolder")
|
||||||
|
tifffolder=os.path.join(outfolder,"tifffolder")
|
||||||
|
h,w=im_data.shape
|
||||||
|
nextH,ht=getNextSliceNumber(h,portsliceSize,BlockOverLayer)
|
||||||
|
nextW,wt=getNextSliceNumber(w,portsliceSize,BlockOverLayer)
|
||||||
|
padH=nextH-h
|
||||||
|
padW=nextW-w
|
||||||
|
im_data=np.pad(im_data,((0,padH),(0,padW)),mode='constant',constant_values=0)
|
||||||
|
src_im_data=np.pad(src_im_data,((0,padH),(0,padW)),mode='constant',constant_values=0)
|
||||||
|
for hi in ht:
|
||||||
|
for wi in wt:
|
||||||
|
geotrans_temp=getsliceGeotrans(im_Geotrans,wi,hi)
|
||||||
|
im_data_temp=im_data[hi:hi+portsliceSize,wi:wi+portsliceSize]
|
||||||
|
src_im_data_temp=src_im_data[hi:hi+portsliceSize,wi:wi+portsliceSize]
|
||||||
|
slice_ID = slice_ID + 1
|
||||||
|
if ishasPort(geotrans_temp,src_im_data_temp,MLCPoints,JLCPoints,MJLCPoints):
|
||||||
|
sliceBinPath=os.path.join(binfolder, rootname+"_"+str(slice_ID).zfill(4)+"_image.tiff")
|
||||||
|
slicepngPath=os.path.join(pngfolder, rootname+"_"+str(slice_ID).zfill(4)+"_image.png")
|
||||||
|
slicesrctiffPath=os.path.join(tifffolder, rootname+"_"+str(slice_ID).zfill(4)+"_image.tiff")
|
||||||
|
|
||||||
|
write_tiff(src_im_data_temp, geotrans_temp, im_proj, slicesrctiffPath)
|
||||||
|
write_envi(im_data_temp,geotrans_temp,im_proj,sliceBinPath)
|
||||||
|
Image.fromarray(im_data_temp).save(slicepngPath,compress_level=0)
|
||||||
|
|
||||||
|
print("图像切片结束")
|
||||||
|
return slice_ID
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def stretchSliceProcess(infilepath, outfolder,portfilestr, strechmethod):
|
||||||
binfolder=os.path.join(outfolder,"unit8binfolder")
|
binfolder=os.path.join(outfolder,"unit8binfolder")
|
||||||
pngfolder=os.path.join(outfolder,"pngfolder")
|
pngfolder=os.path.join(outfolder,"pngfolder")
|
||||||
tifffolder=os.path.join(outfolder,"tifffolder")
|
tifffolder=os.path.join(outfolder,"tifffolder")
|
||||||
|
|
@ -305,7 +390,8 @@ def stretchSliceProcess(infilepath, outfolder, strechmethod):
|
||||||
rootname=Path(infilepath).stem
|
rootname=Path(infilepath).stem
|
||||||
allImagePath=os.path.join(allpngfolder, rootname+"_all.png")
|
allImagePath=os.path.join(allpngfolder, rootname+"_all.png")
|
||||||
Image.fromarray(im_data).save(allImagePath,compress_level=0)
|
Image.fromarray(im_data).save(allImagePath,compress_level=0)
|
||||||
sliceDataset(rootname,im_data, src_im_data,im_Geotrans, im_proj, outfolder)
|
slice_ID=sliceShipDataset(rootname,im_data, src_im_data,im_Geotrans, im_proj, outfolder)
|
||||||
|
slice_ID=slicePortDataset(rootname,im_data, src_im_data,im_Geotrans, im_proj, outfolder,slice_ID,portfilestr)
|
||||||
print("图像切片与拉伸完成")
|
print("图像切片与拉伸完成")
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
@ -313,7 +399,7 @@ def stretchSliceProcess(infilepath, outfolder, strechmethod):
|
||||||
def getParams():
|
def getParams():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('-i','--infile',type=str,default=r"F:\天仪SAR卫星数据集\舰船数据\bc2-sp-org-vv-20250205t032055-021998-000036-0055ee-01.tiff", help='输入shapefile文件')
|
parser.add_argument('-i','--infile',type=str,default=r"F:\天仪SAR卫星数据集\舰船数据\bc2-sp-org-vv-20250205t032055-021998-000036-0055ee-01.tiff", help='输入shapefile文件')
|
||||||
# parser.add_argument('-o', '--outfile',type=str,default=r"F:\天仪SAR卫星数据集\舰船数据\bc2-sp-org-vv-20250205t032055-021998-000036-0055ee-01.png", help='输出geojson文件')
|
parser.add_argument('-p', '--portfile',type=str,default=r"F:\天仪SAR卫星数据集\舰船数据\bc2-sp-org-vv-20250205t032055-021998-000036-0055ee-01.txt", help='输出geojson文件')
|
||||||
parser.add_argument('-o', '--outfile',type=str,default=r"F:\天仪SAR卫星数据集\舰船数据\切片结果", help='输出geojson文件')
|
parser.add_argument('-o', '--outfile',type=str,default=r"F:\天仪SAR卫星数据集\舰船数据\切片结果", help='输出geojson文件')
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group()
|
||||||
group.add_argument(
|
group.add_argument(
|
||||||
|
|
@ -378,6 +464,7 @@ if __name__ == '__main__':
|
||||||
intiffPath=parser.infile
|
intiffPath=parser.infile
|
||||||
modestr=parser.mode
|
modestr=parser.mode
|
||||||
methodstr = parser.method
|
methodstr = parser.method
|
||||||
|
|
||||||
if modestr == "filemode":
|
if modestr == "filemode":
|
||||||
outbinPath = parser.outfile
|
outbinPath = parser.outfile
|
||||||
print('infile=', intiffPath)
|
print('infile=', intiffPath)
|
||||||
|
|
@ -386,10 +473,12 @@ if __name__ == '__main__':
|
||||||
stretchProcess(intiffPath, outbinPath, methodstr)
|
stretchProcess(intiffPath, outbinPath, methodstr)
|
||||||
elif modestr == "slicemode":
|
elif modestr == "slicemode":
|
||||||
outfolder = parser.outfile
|
outfolder = parser.outfile
|
||||||
|
portfilestr = parser.portfile
|
||||||
print('infile=', intiffPath)
|
print('infile=', intiffPath)
|
||||||
print('outfolder=', outfolder)
|
print('outfolder=', outfolder)
|
||||||
print('method=', methodstr)
|
print('method=', methodstr)
|
||||||
stretchSliceProcess(intiffPath, outfolder, methodstr)
|
print('portfile=', portfilestr)
|
||||||
|
stretchSliceProcess(intiffPath, outfolder,portfilestr, methodstr)
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
print("模式错误")
|
print("模式错误")
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,9 @@ def getTiffsInfo(tiffnames,folderpath):
|
||||||
return tiffdict
|
return tiffdict
|
||||||
|
|
||||||
|
|
||||||
def getMJSignal(tiffpath,shipPortTree):
|
def getMJSignal(tiffpath,shipPortTree,outfolderPath):
|
||||||
|
rootname=Path(tiffpath).stem
|
||||||
|
portTxtpath=os.path.join(outfolderPath,rootname+".txt")
|
||||||
im_proj, im_Geotrans, geoExtend = read_tifInfo(tiffpath) # geoExtend : [xmin,ymin,xmax,ymax]
|
im_proj, im_Geotrans, geoExtend = read_tifInfo(tiffpath) # geoExtend : [xmin,ymin,xmax,ymax]
|
||||||
[xmin, ymin, xmax, ymax]=geoExtend
|
[xmin, ymin, xmax, ymax]=geoExtend
|
||||||
center_x = (xmin + xmax) / 2.0
|
center_x = (xmin + xmax) / 2.0
|
||||||
|
|
@ -180,6 +182,10 @@ def getMJSignal(tiffpath,shipPortTree):
|
||||||
final_indices = np.array(potential_indices)[within_rect_indices_mask]
|
final_indices = np.array(potential_indices)[within_rect_indices_mask]
|
||||||
if final_points.shape[0]>0:
|
if final_points.shape[0]>0:
|
||||||
MLCFlag=True
|
MLCFlag=True
|
||||||
|
with open(portTxtpath,"w",encoding="utf-8") as f:
|
||||||
|
for i in range(final_points.shape[0]):
|
||||||
|
f.write("{}\t\t{},{}\n".format("MLC",final_points[i,0],final_points[i,1]))
|
||||||
|
pass
|
||||||
if JLCName in shipPortTree and not shipPortTree[JLCName] is None:
|
if JLCName in shipPortTree and not shipPortTree[JLCName] is None:
|
||||||
# 3. 使用 query_ball_point 查找以中心点为圆心,radius_to_corner 为半径的圆内的所有点的索引
|
# 3. 使用 query_ball_point 查找以中心点为圆心,radius_to_corner 为半径的圆内的所有点的索引
|
||||||
potential_indices = shipPortTree[JLCName].query_ball_point(center_point, r=radius_to_corner)
|
potential_indices = shipPortTree[JLCName].query_ball_point(center_point, r=radius_to_corner)
|
||||||
|
|
@ -202,13 +208,17 @@ def getMJSignal(tiffpath,shipPortTree):
|
||||||
final_indices = np.array(potential_indices)[within_rect_indices_mask]
|
final_indices = np.array(potential_indices)[within_rect_indices_mask]
|
||||||
if final_points.shape[0]>0:
|
if final_points.shape[0]>0:
|
||||||
JLCFlag=True
|
JLCFlag=True
|
||||||
|
with open(portTxtpath,"a",encoding="utf-8") as f:
|
||||||
|
for i in range(final_points.shape[0]):
|
||||||
|
f.write("{}\t\t{},{}\n".format("JLC",final_points[i,0],final_points[i,1]))
|
||||||
|
pass
|
||||||
# 处理软件
|
# 处理软件
|
||||||
return MLCFlag,JLCFlag
|
return MLCFlag,JLCFlag
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def getTiffInPort(shipPortTree,srcFolderPath_0img,outTiffInfoFilePath):
|
def getTiffInPort(shipPortTree,srcFolderPath_0img,outTiffInfoFilePath,outfolderPath):
|
||||||
tiffpaths=find_tif_files_pathlib(srcFolderPath_0img)
|
tiffpaths=find_tif_files_pathlib(srcFolderPath_0img)
|
||||||
tiffLCPort={
|
tiffLCPort={
|
||||||
MLCName:[],
|
MLCName:[],
|
||||||
|
|
@ -217,7 +227,7 @@ def getTiffInPort(shipPortTree,srcFolderPath_0img,outTiffInfoFilePath):
|
||||||
NOLCName:[]
|
NOLCName:[]
|
||||||
}
|
}
|
||||||
for tiffpath in tiffpaths:
|
for tiffpath in tiffpaths:
|
||||||
MLCFlag,JLCFlag=getMJSignal(tiffpath,shipPortTree)
|
MLCFlag,JLCFlag=getMJSignal(tiffpath,shipPortTree,outfolderPath)
|
||||||
|
|
||||||
if MLCFlag and JLCFlag:
|
if MLCFlag and JLCFlag:
|
||||||
tiffLCPort[MJLCName].append(tiffpath)
|
tiffLCPort[MJLCName].append(tiffpath)
|
||||||
|
|
@ -235,9 +245,7 @@ def getTiffInPort(shipPortTree,srcFolderPath_0img,outTiffInfoFilePath):
|
||||||
f.write("{}\t\t{}\n".format(k,tiffpath))
|
f.write("{}\t\t{}\n".format(k,tiffpath))
|
||||||
|
|
||||||
|
|
||||||
def SpliteProcess(srcfolderpath,outfolderpath,MLCPath,JLCPath,JMLCPath):
|
def SpliteProcess(srcfolderpath,outfolderPath,outfilepath,MLCPath,JLCPath,JMLCPath):
|
||||||
if not os.path.exists(outfolderpath):
|
|
||||||
os.makedirs(outfolderpath)
|
|
||||||
shipPort={
|
shipPort={
|
||||||
MLCName:getshapefileInfo(MLCPath),
|
MLCName:getshapefileInfo(MLCPath),
|
||||||
JLCName:getshapefileInfo(JLCPath),
|
JLCName:getshapefileInfo(JLCPath),
|
||||||
|
|
@ -250,8 +258,7 @@ def SpliteProcess(srcfolderpath,outfolderpath,MLCPath,JLCPath,JMLCPath):
|
||||||
# "JMLC":KDTree(shipPort["JMLC"]),
|
# "JMLC":KDTree(shipPort["JMLC"]),
|
||||||
}
|
}
|
||||||
srcFolderPath_0img=os.path.join(srcfolderpath,"0-原图") # 0-原图 文件路径
|
srcFolderPath_0img=os.path.join(srcfolderpath,"0-原图") # 0-原图 文件路径
|
||||||
outTiffInfoFilePath=os.path.join(outfolderpath,"JMPort.txt")
|
getTiffInPort(shipPortTree, srcFolderPath_0img, outfilepath,outfolderPath)
|
||||||
getTiffInPort(shipPortTree, srcFolderPath_0img, outTiffInfoFilePath)
|
|
||||||
return True
|
return True
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
@ -259,10 +266,11 @@ def SpliteProcess(srcfolderpath,outfolderpath,MLCPath,JLCPath,JMLCPath):
|
||||||
def getParams():
|
def getParams():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('-s','--srcfolder',type=str,default=r'R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250903-不分类', help='输入shapefile文件')
|
parser.add_argument('-s','--srcfolder',type=str,default=r'R:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250903-不分类', help='输入shapefile文件')
|
||||||
parser.add_argument('-o', '--outfolder',type=str,default=r'D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250903-不分类\A-预处理', help='输出geojson文件')
|
parser.add_argument('-o', '--outfilepath',type=str,default=r'D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250903-不分类\A-预处理\JMPort.txt', help='输出geojson文件')
|
||||||
|
parser.add_argument('-f', '--folderOutpath',type=str,help=r'PortfolderOutpath', default=r'D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口\20250903-不分类\A-预处理\PortPoints')
|
||||||
parser.add_argument('-m', '--mLC',type=str,help=r'MLC', default=r'D:\TYSAR-德清院\目标点位信息更新\0828目标点位\港口(民船).shp')
|
parser.add_argument('-m', '--mLC',type=str,help=r'MLC', default=r'D:\TYSAR-德清院\目标点位信息更新\0828目标点位\港口(民船).shp')
|
||||||
parser.add_argument('-j', '--jLC',type=str,help=r'JLC' ,default=r'D:\TYSAR-德清院\目标点位信息更新\0828目标点位\军港.shp')
|
parser.add_argument('-j', '--jLC',type=str,help=r'JLC' ,default=r'D:\TYSAR-德清院\目标点位信息更新\0828目标点位\军港.shp')
|
||||||
parser.add_argument('-jm', '--jmLC',type=str,help=r'MJLC', default=r'D:\TYSAR-德清院\目标点位信息更新\0828目标点位\军民一体港口.shp')
|
parser.add_argument('-jm', '--jmlc',type=str,help=r'MJLC', default=r'D:\TYSAR-德清院\目标点位信息更新\0828目标点位\军民一体港口.shp')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
@ -270,16 +278,18 @@ if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
parser = getParams()
|
parser = getParams()
|
||||||
srcfolder=parser.srcfolder
|
srcfolder=parser.srcfolder
|
||||||
outfolder=parser.outfolder
|
outfilepath=parser.outfilepath
|
||||||
|
folderOutpath=parser.folderOutpath
|
||||||
mLCPath=parser.mLC
|
mLCPath=parser.mLC
|
||||||
jLCPath=parser.jLC
|
jLCPath=parser.jLC
|
||||||
jmLCPath=parser.jmLC
|
jmLCPath=parser.jmLC
|
||||||
print('srcfolder=',srcfolder)
|
print('srcfolder=',srcfolder)
|
||||||
print('outfolder=',outfolder)
|
print('outfile=',outfilepath)
|
||||||
|
print('outfolder=',folderOutpath)
|
||||||
print('mLCPath=',mLCPath)
|
print('mLCPath=',mLCPath)
|
||||||
print('jLCPath=',jLCPath)
|
print('jLCPath=',jLCPath)
|
||||||
print('jmLCPath=',jmLCPath)
|
print('jmLCPath=',jmLCPath)
|
||||||
SpliteProcess(srcfolder,outfolder,mLCPath,jLCPath,jmLCPath)
|
SpliteProcess(srcfolder,folderOutpath,outfilepath,mLCPath,jLCPath,jmLCPath)
|
||||||
exit(2)
|
exit(2)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
Loading…
Reference in New Issue