remove unused method
This commit is contained in:
parent
3d753a88a5
commit
db13327b9c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -10,35 +10,14 @@ from misc import Register, AlgFrontend
|
||||
|
||||
VEG_CD = Register('植被变化检测方法')
|
||||
|
||||
import numpy as np
|
||||
from .ACD import ACD
|
||||
from .AHT import AHT
|
||||
from .OCD import OCD
|
||||
from .LHBA import LHBA
|
||||
from .SH import SH
|
||||
|
||||
def warp(file,ds:gdal.Dataset,srcWin=[0,0,0,0]):
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
xsize=ds.RasterXSize
|
||||
ysize=ds.RasterYSize
|
||||
geo=ds.GetGeoTransform()
|
||||
orj=ds.GetProjection()
|
||||
band=ds.RasterCount
|
||||
if os.path.exists(file):
|
||||
os.remove(file)
|
||||
out_ds:gdal.Dataset=driver.Create(file, xsize, ysize, band, gdal.GDT_Byte)
|
||||
out_ds.SetGeoTransform(geo)
|
||||
out_ds.SetProjection(orj)
|
||||
for b in range(1,band+1):
|
||||
out_ds.GetRasterBand(b).WriteArray(ds.ReadAsArray(*srcWin,band_list=[b]),*(0,0))
|
||||
del out_ds
|
||||
|
||||
@VEG_CD.register
|
||||
class BasicCD(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return '差分法'
|
||||
return '植被覆盖度变化'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None,*args, **kargs):
|
||||
|
113
plugins/veg_method/scripts/vfc.py
Normal file
113
plugins/veg_method/scripts/vfc.py
Normal file
@ -0,0 +1,113 @@
|
||||
from rscder.utils.geomath import geo2imageRC, imageRC2geo
|
||||
from rscder.utils.project import Project, PairLayer
|
||||
from misc import Register, AlgFrontend
|
||||
|
||||
from . import VEG_CD
|
||||
|
||||
@VEG_CD.register
|
||||
class VFCCD(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return '植被覆盖度变化'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None,*args, **kargs):
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
|
||||
cell_size = layer_parent.cell_size
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
|
||||
band = ds1.RasterCount
|
||||
yblocks = ysize // cell_size[1]
|
||||
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
out_ds.SetGeoTransform(geo)
|
||||
out_ds.SetProjection(proj)
|
||||
|
||||
max_diff = 0
|
||||
min_diff = math.inf
|
||||
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
for j in range(yblocks + 1):#该改这里了
|
||||
if send_message is not None:
|
||||
send_message.emit(f'计算{j}/{yblocks}')
|
||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
||||
block_xy=(0,j * cell_size[1])
|
||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||
break
|
||||
block_size=(xsize, cell_size[1])
|
||||
block_size1 = (xsize, cell_size[1])
|
||||
block_size2 = (xsize,cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
if block_xy1[1] + block_size1[1] > end1y:
|
||||
block_size1 = (xsize,end1y - block_xy1[1])
|
||||
if block_xy2[1] + block_size2[1] > end2y:
|
||||
block_size2 = (xsize, end2y - block_xy2[1])
|
||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||
block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
|
||||
|
||||
if band == 1:
|
||||
block_data1 = block_data1[None, ...]
|
||||
block_data2 = block_data2[None, ...]
|
||||
# pdb.set_trace()
|
||||
block_diff = block_data1.sum(0) - block_data2.sum(0)
|
||||
block_diff = block_diff.astype(np.float32)
|
||||
block_diff = np.abs(block_diff)
|
||||
|
||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||
max_diff = max(max_diff, block_diff.max())
|
||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||
if send_message is not None:
|
||||
|
||||
send_message.emit(f'完成{j}/{yblocks}')
|
||||
del ds2
|
||||
del ds1
|
||||
out_ds.FlushCache()
|
||||
del out_ds
|
||||
if send_message is not None:
|
||||
send_message.emit('归一化概率中...')
|
||||
temp_in_ds = gdal.Open(out_tif)
|
||||
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
||||
out_normal_ds.SetGeoTransform(geo)
|
||||
out_normal_ds.SetProjection(proj)
|
||||
# hist = np.zeros(256, dtype=np.int32)
|
||||
for j in range(yblocks+1):
|
||||
block_xy = (0, j * cell_size[1])
|
||||
if block_xy[1] > ysize:
|
||||
break
|
||||
block_size = (xsize, cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
block_data = temp_in_ds.ReadAsArray(*block_xy, *block_size)
|
||||
block_data = (block_data - min_diff) / (max_diff - min_diff) * 255
|
||||
block_data = block_data.astype(np.uint8)
|
||||
out_normal_ds.GetRasterBand(1).WriteArray(block_data, *block_xy)
|
||||
# hist_t, _ = np.histogram(block_data, bins=256, range=(0, 256))
|
||||
# hist += hist_t
|
||||
# print(hist)
|
||||
del temp_in_ds
|
||||
del out_normal_ds
|
||||
try:
|
||||
os.remove(out_tif)
|
||||
except:
|
||||
pass
|
||||
if send_message is not None:
|
||||
send_message.emit('差分法计算完成')
|
||||
return out_normal_tif
|
Loading…
x
Reference in New Issue
Block a user