add some icons
This commit is contained in:
parent
3d753a88a5
commit
2445b7aec0
@ -6,7 +6,15 @@ CVEO团队
|
|||||||
Python3.7 + PyQt + QGIS
|
Python3.7 + PyQt + QGIS
|
||||||
|
|
||||||
## 配置方式
|
## 配置方式
|
||||||
|
|
||||||
|
```
|
||||||
conda create -f conda.yaml
|
conda create -f conda.yaml
|
||||||
|
```
|
||||||
|
或
|
||||||
|
|
||||||
|
```
|
||||||
|
conda env create -n cevo_qt -f conda.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
# 打包方式
|
# 打包方式
|
||||||
|
@ -11,6 +11,7 @@ dependencies:
|
|||||||
- pyqtads=3.8.2=py37hf2a7229_0
|
- pyqtads=3.8.2=py37hf2a7229_0
|
||||||
- python=3.7.10=h7840368_101_cpython
|
- python=3.7.10=h7840368_101_cpython
|
||||||
- python_abi=3.7=2_cp37m
|
- python_abi=3.7=2_cp37m
|
||||||
|
- pip
|
||||||
- pyyaml=5.4.1=py37hcc03f2d_1
|
- pyyaml=5.4.1=py37hcc03f2d_1
|
||||||
- qgis=3.18.3=py37h3dc7164_2
|
- qgis=3.18.3=py37h3dc7164_2
|
||||||
- qt=5.12.9=h5909a2a_4
|
- qt=5.12.9=h5909a2a_4
|
||||||
|
BIN
icons/Algorithm_icon/功能-01.png
Normal file
BIN
icons/Algorithm_icon/功能-01.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
BIN
icons/Algorithm_icon/功能-02.png
Normal file
BIN
icons/Algorithm_icon/功能-02.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
BIN
icons/Algorithm_icon/功能-03.png
Normal file
BIN
icons/Algorithm_icon/功能-03.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
icons/植被变化.png
Normal file
BIN
icons/植被变化.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
@ -1 +1 @@
|
|||||||
vd4FiYncytyziGH9GNCAA8hGGr1/79Xmphtc5+PHPJDpxvqj1hP7+985QMojYO4M5Qn/aqEAvFgeDN3CA8x1YAK8SdCgSXSBJpRBK8wqPQjBY1ak96QfdPCrTLunr+xuPxK3Gxe772adTTsee2+ot7WePYUsC4y4NcS5+rlP1if87xtYqVeSwx3c64cOmAGP
|
IEhM2L0c7TWXeIEGUm8n1nMToPxkWiapMjEFtLFLHad4a1+2IKcrD2wbRobBLmTIdux5iOV+AV+t2JY75+w5NAU+umtYPWmpbAiphAQ1S8s8/h7fclRBU6Ym8oXDxCmZoWpCLCpJd8lE/R3nfKBoexDRYXecz/lw58wkdZbHktpNVKfjoe827/aKa7gmYNXO
|
@ -1,6 +1,14 @@
|
|||||||
|
from rscder.utils.icons import IconInstance
|
||||||
|
from .SH import SH
|
||||||
|
from .LHBA import LHBA
|
||||||
|
from .OCD import OCD
|
||||||
|
from .AHT import AHT
|
||||||
|
from .ACD import ACD
|
||||||
|
import numpy as np
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from osgeo import gdal
|
from osgeo import gdal
|
||||||
import math,os
|
import math
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
from PyQt5 import QtWidgets
|
from PyQt5 import QtWidgets
|
||||||
from sklearn.cluster import k_means
|
from sklearn.cluster import k_means
|
||||||
@ -10,29 +18,26 @@ from misc import Register, AlgFrontend
|
|||||||
|
|
||||||
UNSUPER_CD = Register('无监督变化检测方法')
|
UNSUPER_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]):
|
def warp(file, ds: gdal.Dataset, srcWin=[0, 0, 0, 0]):
|
||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
xsize=ds.RasterXSize
|
xsize = ds.RasterXSize
|
||||||
ysize=ds.RasterYSize
|
ysize = ds.RasterYSize
|
||||||
geo=ds.GetGeoTransform()
|
geo = ds.GetGeoTransform()
|
||||||
orj=ds.GetProjection()
|
orj = ds.GetProjection()
|
||||||
band=ds.RasterCount
|
band = ds.RasterCount
|
||||||
if os.path.exists(file):
|
if os.path.exists(file):
|
||||||
os.remove(file)
|
os.remove(file)
|
||||||
out_ds:gdal.Dataset=driver.Create(file, xsize, ysize, band, gdal.GDT_Byte)
|
out_ds: gdal.Dataset = driver.Create(
|
||||||
|
file, xsize, ysize, band, gdal.GDT_Byte)
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(orj)
|
out_ds.SetProjection(orj)
|
||||||
for b in range(1,band+1):
|
for b in range(1, band+1):
|
||||||
out_ds.GetRasterBand(b).WriteArray(ds.ReadAsArray(*srcWin,band_list=[b]),*(0,0))
|
out_ds.GetRasterBand(b).WriteArray(
|
||||||
|
ds.ReadAsArray(*srcWin, band_list=[b]), *(0, 0))
|
||||||
del out_ds
|
del out_ds
|
||||||
|
|
||||||
|
|
||||||
@UNSUPER_CD.register
|
@UNSUPER_CD.register
|
||||||
class BasicCD(AlgFrontend):
|
class BasicCD(AlgFrontend):
|
||||||
|
|
||||||
@ -41,10 +46,14 @@ class BasicCD(AlgFrontend):
|
|||||||
return '差分法'
|
return '差分法'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None,*args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
@staticmethod
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
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
|
cell_size = layer_parent.cell_size
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
@ -56,35 +65,39 @@ class BasicCD(AlgFrontend):
|
|||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(proj)
|
out_ds.SetProjection(proj)
|
||||||
|
|
||||||
max_diff = 0
|
max_diff = 0
|
||||||
min_diff = math.inf
|
min_diff = math.inf
|
||||||
|
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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):#该改这里了
|
for j in range(yblocks + 1): # 该改这里了
|
||||||
if send_message is not None:
|
if send_message is not None:
|
||||||
send_message.emit(f'计算{j}/{yblocks}')
|
send_message.emit(f'计算{j}/{yblocks}')
|
||||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||||
block_xy=(0,j * cell_size[1])
|
block_xy = (0, j * cell_size[1])
|
||||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||||
break
|
break
|
||||||
block_size=(xsize, cell_size[1])
|
block_size = (xsize, cell_size[1])
|
||||||
block_size1 = (xsize, cell_size[1])
|
block_size1 = (xsize, cell_size[1])
|
||||||
block_size2 = (xsize,cell_size[1])
|
block_size2 = (xsize, cell_size[1])
|
||||||
if block_xy[1] + block_size[1] > ysize:
|
if block_xy[1] + block_size[1] > ysize:
|
||||||
block_size = (xsize, ysize - block_xy[1])
|
block_size = (xsize, ysize - block_xy[1])
|
||||||
if block_xy1[1] + block_size1[1] > end1y:
|
if block_xy1[1] + block_size1[1] > end1y:
|
||||||
block_size1 = (xsize,end1y - block_xy1[1])
|
block_size1 = (xsize, end1y - block_xy1[1])
|
||||||
if block_xy2[1] + block_size2[1] > end2y:
|
if block_xy2[1] + block_size2[1] > end2y:
|
||||||
block_size2 = (xsize, end2y - block_xy2[1])
|
block_size2 = (xsize, end2y - block_xy2[1])
|
||||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||||
@ -112,8 +125,10 @@ class BasicCD(AlgFrontend):
|
|||||||
send_message.emit('归一化概率中...')
|
send_message.emit('归一化概率中...')
|
||||||
temp_in_ds = gdal.Open(out_tif)
|
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_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
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.SetGeoTransform(geo)
|
||||||
out_normal_ds.SetProjection(proj)
|
out_normal_ds.SetProjection(proj)
|
||||||
# hist = np.zeros(256, dtype=np.int32)
|
# hist = np.zeros(256, dtype=np.int32)
|
||||||
@ -141,6 +156,7 @@ class BasicCD(AlgFrontend):
|
|||||||
send_message.emit('差分法计算完成')
|
send_message.emit('差分法计算完成')
|
||||||
return out_normal_tif
|
return out_normal_tif
|
||||||
|
|
||||||
|
|
||||||
@UNSUPER_CD.register
|
@UNSUPER_CD.register
|
||||||
class LSTS(AlgFrontend):
|
class LSTS(AlgFrontend):
|
||||||
|
|
||||||
@ -148,6 +164,10 @@ class LSTS(AlgFrontend):
|
|||||||
def get_name():
|
def get_name():
|
||||||
return 'LSTS'
|
return 'LSTS'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_widget(parent=None):
|
def get_widget(parent=None):
|
||||||
|
|
||||||
@ -157,12 +177,12 @@ class LSTS(AlgFrontend):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_params(widget=None):
|
def get_params(widget=None):
|
||||||
return dict(n=5, w_size=(3,3))
|
return dict(n=5, w_size=(3, 3))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message=None,n=5,w_size=(3,3), *args, **kws):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, n=5, w_size=(3, 3), *args, **kws):
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
|
|
||||||
cell_size = layer_parent.cell_size
|
cell_size = layer_parent.cell_size
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
@ -172,46 +192,51 @@ class LSTS(AlgFrontend):
|
|||||||
yblocks = ysize // cell_size[1]
|
yblocks = ysize // cell_size[1]
|
||||||
|
|
||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
out_tif = os.path.join(Project().other_path, '%d.tif'%(int(datetime.now().timestamp() * 1000)))
|
out_tif = os.path.join(Project().other_path, '%d.tif' % (
|
||||||
|
int(datetime.now().timestamp() * 1000)))
|
||||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(proj)
|
out_ds.SetProjection(proj)
|
||||||
pixnum=w_size[0]*w_size[1]
|
pixnum = w_size[0]*w_size[1]
|
||||||
# send_message.emit('pixnum:'pixnum)
|
# send_message.emit('pixnum:'pixnum)
|
||||||
max_diff = 0
|
max_diff = 0
|
||||||
min_diff = math.inf
|
min_diff = math.inf
|
||||||
win_h=w_size[0]//2 #half hight of window
|
win_h = w_size[0]//2 # half hight of window
|
||||||
win_w=w_size[1]//2 #half width of window
|
win_w = w_size[1]//2 # half width of window
|
||||||
a=[[(i+1)**j for j in range(n+1)] for i in range(pixnum)]
|
a = [[(i+1)**j for j in range(n+1)] for i in range(pixnum)]
|
||||||
A=np.array(a).astype(np.float64)#
|
A = np.array(a).astype(np.float64)
|
||||||
|
|
||||||
k_=np.array(range(1,n+1))
|
k_ = np.array(range(1, n+1))
|
||||||
df1=np.zeros(pixnum).astype(np.float64)
|
df1 = np.zeros(pixnum).astype(np.float64)
|
||||||
df2=np.zeros(pixnum).astype(np.float64)
|
df2 = np.zeros(pixnum).astype(np.float64)
|
||||||
|
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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):
|
for j in range(yblocks + 1):
|
||||||
if send_message is not None:
|
if send_message is not None:
|
||||||
send_message.emit(f'计算{j}/{yblocks}')
|
send_message.emit(f'计算{j}/{yblocks}')
|
||||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||||
block_xy=(0,j * cell_size[1])
|
block_xy = (0, j * cell_size[1])
|
||||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||||
break
|
break
|
||||||
block_size=(xsize, cell_size[1])
|
block_size = (xsize, cell_size[1])
|
||||||
block_size1 = (xsize, cell_size[1])
|
block_size1 = (xsize, cell_size[1])
|
||||||
block_size2 = (xsize,cell_size[1])
|
block_size2 = (xsize, cell_size[1])
|
||||||
if block_xy[1] + block_size[1] > ysize:
|
if block_xy[1] + block_size[1] > ysize:
|
||||||
block_size = (xsize, ysize - block_xy[1])
|
block_size = (xsize, ysize - block_xy[1])
|
||||||
if block_xy1[1] + block_size1[1] > end1y:
|
if block_xy1[1] + block_size1[1] > end1y:
|
||||||
block_size1 = (xsize,end1y - block_xy1[1])
|
block_size1 = (xsize, end1y - block_xy1[1])
|
||||||
if block_xy2[1] + block_size2[1] > end2y:
|
if block_xy2[1] + block_size2[1] > end2y:
|
||||||
block_size2 = (xsize, end2y - block_xy2[1])
|
block_size2 = (xsize, end2y - block_xy2[1])
|
||||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||||
@ -222,33 +247,35 @@ class LSTS(AlgFrontend):
|
|||||||
block_data2 = block_data2[None, ...]
|
block_data2 = block_data2[None, ...]
|
||||||
# pdb.set_trace()
|
# pdb.set_trace()
|
||||||
else:
|
else:
|
||||||
block_data1=np.mean(block_data1,0)
|
block_data1 = np.mean(block_data1, 0)
|
||||||
block_data2=np.mean(block_data2,0)
|
block_data2 = np.mean(block_data2, 0)
|
||||||
block_diff=np.zeros(block_data1.shape).astype(np.float64)
|
block_diff = np.zeros(block_data1.shape).astype(np.float64)
|
||||||
|
|
||||||
for i in range(win_h,block_size1[1]-win_h):
|
for i in range(win_h, block_size1[1]-win_h):
|
||||||
for j_ in range(win_w,block_size1[0]-win_w):
|
for j_ in range(win_w, block_size1[0]-win_w):
|
||||||
pix=0
|
pix = 0
|
||||||
|
|
||||||
#get b
|
# get b
|
||||||
# b1=block_data[i+win_h:i+win_h] c in range(j_-win_w,j_+win_w+1)
|
# b1=block_data[i+win_h:i+win_h] c in range(j_-win_w,j_+win_w+1)
|
||||||
b1=block_data1[i-win_h:i+win_h+1,j_-win_w:j_+win_w+1]
|
b1 = block_data1[i-win_h:i+win_h+1, j_-win_w:j_+win_w+1]
|
||||||
b2=block_data2[i-win_h:i+win_h+1,j_-win_w:j_+win_w+1]
|
b2 = block_data2[i-win_h:i+win_h+1, j_-win_w:j_+win_w+1]
|
||||||
b1=[b if (r+1)//2 else b[::-1] for r,b in enumerate(b1)]
|
b1 = [b if (r+1)//2 else b[::-1] for r, b in enumerate(b1)]
|
||||||
b2=[b if (r+1)//2 else b[::-1] for r,b in enumerate(b2)]
|
b2 = [b if (r+1)//2 else b[::-1] for r, b in enumerate(b2)]
|
||||||
b1=np.expand_dims(np.concatenate(b1,0),1)
|
b1 = np.expand_dims(np.concatenate(b1, 0), 1)
|
||||||
b2=np.expand_dims(np.concatenate(b2,0),1)
|
b2 = np.expand_dims(np.concatenate(b2, 0), 1)
|
||||||
|
|
||||||
x1=np.squeeze(np.linalg.pinv(A).dot(b1))
|
x1 = np.squeeze(np.linalg.pinv(A).dot(b1))
|
||||||
x2=np.squeeze(np.linalg.pinv(A).dot(b2))
|
x2 = np.squeeze(np.linalg.pinv(A).dot(b2))
|
||||||
#df
|
# df
|
||||||
k_=range(1,n+1)
|
k_ = range(1, n+1)
|
||||||
for pix in range(1,pixnum+1):
|
for pix in range(1, pixnum+1):
|
||||||
df1[pix-1]=x1[1:n+1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
df1[pix-1] = x1[1:n +
|
||||||
df2[pix-1]=x2[1:n+1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
||||||
|
df2[pix-1] = x2[1:n +
|
||||||
|
1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
||||||
|
|
||||||
#distance 欧式距离
|
# distance 欧式距离
|
||||||
block_diff[i][j_]=np.dot(df1-df2,df1-df2)**0.5
|
block_diff[i][j_] = np.dot(df1-df2, df1-df2)**0.5
|
||||||
|
|
||||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||||
max_diff = max(max_diff, block_diff.max())
|
max_diff = max(max_diff, block_diff.max())
|
||||||
@ -263,8 +290,10 @@ class LSTS(AlgFrontend):
|
|||||||
send_message.emit('归一化概率中...')
|
send_message.emit('归一化概率中...')
|
||||||
temp_in_ds = gdal.Open(out_tif)
|
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_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
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.SetGeoTransform(geo)
|
||||||
out_normal_ds.SetProjection(proj)
|
out_normal_ds.SetProjection(proj)
|
||||||
# hist = np.zeros(256, dtype=np.int32)
|
# hist = np.zeros(256, dtype=np.int32)
|
||||||
@ -302,10 +331,14 @@ class CVAAlg(AlgFrontend):
|
|||||||
return 'CVA'
|
return 'CVA'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
@staticmethod
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
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
|
cell_size = layer_parent.cell_size
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
@ -317,35 +350,38 @@ class CVAAlg(AlgFrontend):
|
|||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(proj)
|
out_ds.SetProjection(proj)
|
||||||
max_diff = 0
|
max_diff = 0
|
||||||
min_diff = math.inf
|
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])
|
||||||
|
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
|
||||||
|
|
||||||
for j in range(yblocks + 1):
|
for j in range(yblocks + 1):
|
||||||
if send_message is not None:
|
if send_message is not None:
|
||||||
send_message.emit(f'计算{j}/{yblocks}')
|
send_message.emit(f'计算{j}/{yblocks}')
|
||||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||||
block_xy=(0,j * cell_size[1])
|
block_xy = (0, j * cell_size[1])
|
||||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||||
break
|
break
|
||||||
block_size=(xsize, cell_size[1])
|
block_size = (xsize, cell_size[1])
|
||||||
block_size1 = (xsize, cell_size[1])
|
block_size1 = (xsize, cell_size[1])
|
||||||
block_size2 = (xsize,cell_size[1])
|
block_size2 = (xsize, cell_size[1])
|
||||||
if block_xy[1] + block_size[1] > ysize:
|
if block_xy[1] + block_size[1] > ysize:
|
||||||
block_size = (xsize, ysize - block_xy[1])
|
block_size = (xsize, ysize - block_xy[1])
|
||||||
if block_xy1[1] + block_size1[1] > end1y:
|
if block_xy1[1] + block_size1[1] > end1y:
|
||||||
block_size1 = (xsize,end1y - block_xy1[1])
|
block_size1 = (xsize, end1y - block_xy1[1])
|
||||||
if block_xy2[1] + block_size2[1] > end2y:
|
if block_xy2[1] + block_size2[1] > end2y:
|
||||||
block_size2 = (xsize, end2y - block_xy2[1])
|
block_size2 = (xsize, end2y - block_xy2[1])
|
||||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||||
@ -355,7 +391,7 @@ class CVAAlg(AlgFrontend):
|
|||||||
block_data1 = block_data1[None, ...]
|
block_data1 = block_data1[None, ...]
|
||||||
block_data2 = block_data2[None, ...]
|
block_data2 = block_data2[None, ...]
|
||||||
# pdb.set_trace()
|
# pdb.set_trace()
|
||||||
block_diff=np.sum((block_data1-block_data2)**2,0)**0.5
|
block_diff = np.sum((block_data1-block_data2)**2, 0)**0.5
|
||||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||||
max_diff = max(max_diff, block_diff.max())
|
max_diff = max(max_diff, block_diff.max())
|
||||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||||
@ -369,8 +405,10 @@ class CVAAlg(AlgFrontend):
|
|||||||
send_message.emit('归一化概率中...')
|
send_message.emit('归一化概率中...')
|
||||||
temp_in_ds = gdal.Open(out_tif)
|
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_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
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.SetGeoTransform(geo)
|
||||||
out_normal_ds.SetProjection(proj)
|
out_normal_ds.SetProjection(proj)
|
||||||
# hist = np.zeros(256, dtype=np.int32)
|
# hist = np.zeros(256, dtype=np.int32)
|
||||||
@ -398,6 +436,7 @@ class CVAAlg(AlgFrontend):
|
|||||||
send_message.emit('欧式距离计算完成')
|
send_message.emit('欧式距离计算完成')
|
||||||
return out_normal_tif
|
return out_normal_tif
|
||||||
|
|
||||||
|
|
||||||
@UNSUPER_CD.register
|
@UNSUPER_CD.register
|
||||||
class ACDAlg(AlgFrontend):
|
class ACDAlg(AlgFrontend):
|
||||||
|
|
||||||
@ -406,7 +445,11 @@ class ACDAlg(AlgFrontend):
|
|||||||
return 'ACD'
|
return 'ACD'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -418,39 +461,41 @@ class ACDAlg(AlgFrontend):
|
|||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
|
# 运算
|
||||||
|
|
||||||
#运算
|
|
||||||
send_message.emit('开始ACD计算.....')
|
send_message.emit('开始ACD计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
ACD(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
ACD(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
@ -466,7 +511,11 @@ class AHTAlg(AlgFrontend):
|
|||||||
return 'AHT'
|
return 'AHT'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -477,39 +526,41 @@ class AHTAlg(AlgFrontend):
|
|||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
|
# 运算
|
||||||
|
|
||||||
#运算
|
|
||||||
send_message.emit('开始AHT计算.....')
|
send_message.emit('开始AHT计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
AHT(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
AHT(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
@ -525,7 +576,11 @@ class OCDAlg(AlgFrontend):
|
|||||||
return 'OCD'
|
return 'OCD'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -536,45 +591,48 @@ class OCDAlg(AlgFrontend):
|
|||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
|
# 运算
|
||||||
|
|
||||||
#运算
|
|
||||||
send_message.emit('开始OCD计算.....')
|
send_message.emit('开始OCD计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
OCD(temp_tif1,temp_tif2,out_normal_tif,Project().other_path)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
OCD(temp_tif1, temp_tif2, out_normal_tif, Project().other_path)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
|
|
||||||
return out_normal_tif
|
return out_normal_tif
|
||||||
|
|
||||||
|
|
||||||
@UNSUPER_CD.register
|
@UNSUPER_CD.register
|
||||||
class LHBAAlg(AlgFrontend):
|
class LHBAAlg(AlgFrontend):
|
||||||
|
|
||||||
@ -583,7 +641,11 @@ class LHBAAlg(AlgFrontend):
|
|||||||
return 'LHBA'
|
return 'LHBA'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -592,40 +654,43 @@ class LHBAAlg(AlgFrontend):
|
|||||||
print(args)
|
print(args)
|
||||||
send_message = Empty()
|
send_message = Empty()
|
||||||
|
|
||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
#运算
|
# 运算
|
||||||
send_message.emit('开始LHBA计算.....')
|
send_message.emit('开始LHBA计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
LHBA(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
LHBA(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
@ -640,7 +705,11 @@ class SHAlg(AlgFrontend):
|
|||||||
return 'SH'
|
return 'SH'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().ARITHMETIC3
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -649,41 +718,43 @@ class SHAlg(AlgFrontend):
|
|||||||
print(args)
|
print(args)
|
||||||
send_message = Empty()
|
send_message = Empty()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
#运算
|
# 运算
|
||||||
send_message.emit('开始SH计算.....')
|
send_message.emit('开始SH计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
SH(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
SH(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
|
@ -3,7 +3,7 @@ from threading import Thread
|
|||||||
from plugins.misc.main import AlgFrontend
|
from plugins.misc.main import AlgFrontend
|
||||||
from rscder.gui.actions import ActionManager
|
from rscder.gui.actions import ActionManager
|
||||||
from rscder.plugins.basic import BasicPlugin
|
from rscder.plugins.basic import BasicPlugin
|
||||||
from PyQt5.QtWidgets import QAction, QToolBar, QMenu, QDialog, QHBoxLayout, QVBoxLayout, QPushButton,QWidget,QLabel,QLineEdit,QPushButton,QComboBox,QDialogButtonBox
|
from PyQt5.QtWidgets import QAction, QToolBar, QMenu, QDialog, QHBoxLayout, QVBoxLayout, QPushButton, QWidget, QLabel, QLineEdit, QPushButton, QComboBox, QDialogButtonBox
|
||||||
|
|
||||||
from rscder.gui.layercombox import PairLayerCombox
|
from rscder.gui.layercombox import PairLayerCombox
|
||||||
from rscder.utils.icons import IconInstance
|
from rscder.utils.icons import IconInstance
|
||||||
@ -13,8 +13,9 @@ from thres import THRES
|
|||||||
from misc import table_layer, AlgSelectWidget
|
from misc import table_layer, AlgSelectWidget
|
||||||
from follow import FOLLOW
|
from follow import FOLLOW
|
||||||
|
|
||||||
|
|
||||||
class VegtationCDMethod(QDialog):
|
class VegtationCDMethod(QDialog):
|
||||||
def __init__(self,parent=None, alg:AlgFrontend=None):
|
def __init__(self, parent=None, alg: AlgFrontend = None):
|
||||||
super(VegtationCDMethod, self).__init__(parent)
|
super(VegtationCDMethod, self).__init__(parent)
|
||||||
self.alg = alg
|
self.alg = alg
|
||||||
self.setWindowTitle('植被变化检测:{}'.format(alg.get_name()))
|
self.setWindowTitle('植被变化检测:{}'.format(alg.get_name()))
|
||||||
@ -23,7 +24,7 @@ class VegtationCDMethod(QDialog):
|
|||||||
self.setMinimumWidth(500)
|
self.setMinimumWidth(500)
|
||||||
|
|
||||||
def initUI(self):
|
def initUI(self):
|
||||||
#图层
|
# 图层
|
||||||
self.layer_combox = PairLayerCombox(self)
|
self.layer_combox = PairLayerCombox(self)
|
||||||
layerbox = QHBoxLayout()
|
layerbox = QHBoxLayout()
|
||||||
layerbox.addWidget(self.layer_combox)
|
layerbox.addWidget(self.layer_combox)
|
||||||
@ -42,12 +43,12 @@ class VegtationCDMethod(QDialog):
|
|||||||
self.cancel_button.setIcon(IconInstance().CANCEL)
|
self.cancel_button.setIcon(IconInstance().CANCEL)
|
||||||
self.cancel_button.clicked.connect(self.reject)
|
self.cancel_button.clicked.connect(self.reject)
|
||||||
self.cancel_button.setDefault(False)
|
self.cancel_button.setDefault(False)
|
||||||
buttonbox=QDialogButtonBox(self)
|
buttonbox = QDialogButtonBox(self)
|
||||||
buttonbox.addButton(self.ok_button,QDialogButtonBox.NoRole)
|
buttonbox.addButton(self.ok_button, QDialogButtonBox.NoRole)
|
||||||
buttonbox.addButton(self.cancel_button,QDialogButtonBox.NoRole)
|
buttonbox.addButton(self.cancel_button, QDialogButtonBox.NoRole)
|
||||||
buttonbox.setCenterButtons(True)
|
buttonbox.setCenterButtons(True)
|
||||||
|
|
||||||
totalvlayout=QVBoxLayout()
|
totalvlayout = QVBoxLayout()
|
||||||
totalvlayout.addLayout(layerbox)
|
totalvlayout.addLayout(layerbox)
|
||||||
totalvlayout.addWidget(self.filter_select)
|
totalvlayout.addWidget(self.filter_select)
|
||||||
if self.param_widget is not None:
|
if self.param_widget is not None:
|
||||||
@ -62,6 +63,7 @@ class VegtationCDMethod(QDialog):
|
|||||||
|
|
||||||
self.setLayout(totalvlayout)
|
self.setLayout(totalvlayout)
|
||||||
|
|
||||||
|
|
||||||
@FOLLOW.register
|
@FOLLOW.register
|
||||||
class VegetationCDFollow(AlgFrontend):
|
class VegetationCDFollow(AlgFrontend):
|
||||||
|
|
||||||
@ -71,7 +73,7 @@ class VegetationCDFollow(AlgFrontend):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_icon():
|
def get_icon():
|
||||||
return IconInstance().UNSUPERVISED
|
return IconInstance().VEGETATION
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_widget(parent=None):
|
def get_widget(parent=None):
|
||||||
@ -86,7 +88,7 @@ class VegetationCDFollow(AlgFrontend):
|
|||||||
thres_select = AlgSelectWidget(widget, THRES)
|
thres_select = AlgSelectWidget(widget, THRES)
|
||||||
thres_select.setObjectName('thres_select')
|
thres_select.setObjectName('thres_select')
|
||||||
|
|
||||||
totalvlayout=QVBoxLayout()
|
totalvlayout = QVBoxLayout()
|
||||||
totalvlayout.addWidget(layer_combox)
|
totalvlayout.addWidget(layer_combox)
|
||||||
totalvlayout.addWidget(filter_select)
|
totalvlayout.addWidget(filter_select)
|
||||||
totalvlayout.addWidget(unsupervised_select)
|
totalvlayout.addWidget(unsupervised_select)
|
||||||
@ -98,16 +100,17 @@ class VegetationCDFollow(AlgFrontend):
|
|||||||
return widget
|
return widget
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_params(widget:QWidget=None):
|
def get_params(widget: QWidget = None):
|
||||||
if widget is None:
|
if widget is None:
|
||||||
return dict()
|
return dict()
|
||||||
|
|
||||||
layer_combox = widget.findChild(PairLayerCombox, 'layer_combox')
|
layer_combox = widget.findChild(PairLayerCombox, 'layer_combox')
|
||||||
filter_select = widget.findChild(AlgSelectWidget, 'filter_select')
|
filter_select = widget.findChild(AlgSelectWidget, 'filter_select')
|
||||||
unsupervised_select = widget.findChild(AlgSelectWidget, 'unsupervised_select')
|
unsupervised_select = widget.findChild(
|
||||||
|
AlgSelectWidget, 'unsupervised_select')
|
||||||
thres_select = widget.findChild(AlgSelectWidget, 'thres_select')
|
thres_select = widget.findChild(AlgSelectWidget, 'thres_select')
|
||||||
|
|
||||||
layer1=layer_combox.layer1
|
layer1 = layer_combox.layer1
|
||||||
pth1 = layer_combox.layer1.path
|
pth1 = layer_combox.layer1.path
|
||||||
pth2 = layer_combox.layer2.path
|
pth2 = layer_combox.layer2.path
|
||||||
|
|
||||||
@ -120,27 +123,27 @@ class VegetationCDFollow(AlgFrontend):
|
|||||||
|
|
||||||
return dict(
|
return dict(
|
||||||
layer1=layer1,
|
layer1=layer1,
|
||||||
pth1 = pth1,
|
pth1=pth1,
|
||||||
pth2 = pth2,
|
pth2=pth2,
|
||||||
falg = falg,
|
falg=falg,
|
||||||
fparams = fparams,
|
fparams=fparams,
|
||||||
cdalg = cdalg,
|
cdalg=cdalg,
|
||||||
cdparams = cdparams,
|
cdparams=cdparams,
|
||||||
thalg = thalg,
|
thalg=thalg,
|
||||||
thparams = thparams,
|
thparams=thparams,
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(layer1=None,
|
def run_alg(layer1=None,
|
||||||
pth1 = None,
|
pth1=None,
|
||||||
pth2 = None,
|
pth2=None,
|
||||||
falg = None,
|
falg=None,
|
||||||
fparams = None,
|
fparams=None,
|
||||||
cdalg = None,
|
cdalg=None,
|
||||||
cdparams = None,
|
cdparams=None,
|
||||||
thalg = None,
|
thalg=None,
|
||||||
thparams = None,
|
thparams=None,
|
||||||
send_message = None):
|
send_message=None):
|
||||||
|
|
||||||
if cdalg is None or thalg is None:
|
if cdalg is None or thalg is None:
|
||||||
return
|
return
|
||||||
@ -148,21 +151,21 @@ class VegetationCDFollow(AlgFrontend):
|
|||||||
name = layer1.name
|
name = layer1.name
|
||||||
|
|
||||||
if falg is not None:
|
if falg is not None:
|
||||||
pth1 = falg.run_alg(pth1, name=name, send_message= send_message, **fparams)
|
pth1 = falg.run_alg(
|
||||||
pth2 = falg.run_alg(pth2, name=name, send_message= send_message, **fparams)
|
pth1, name=name, send_message=send_message, **fparams)
|
||||||
|
pth2 = falg.run_alg(
|
||||||
|
pth2, name=name, send_message=send_message, **fparams)
|
||||||
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent, send_message= send_message,**cdparams)
|
|
||||||
thpth = thalg.run_alg(cdpth, name=name, send_message= send_message, **thparams)
|
|
||||||
|
|
||||||
table_layer(thpth,layer1,name, send_message)
|
|
||||||
|
|
||||||
|
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent,
|
||||||
|
send_message=send_message, **cdparams)
|
||||||
|
thpth = thalg.run_alg(
|
||||||
|
cdpth, name=name, send_message=send_message, **thparams)
|
||||||
|
|
||||||
|
table_layer(thpth, layer1, name, send_message)
|
||||||
|
|
||||||
|
|
||||||
class VegtationPlugin(BasicPlugin):
|
class VegtationPlugin(BasicPlugin):
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def info():
|
def info():
|
||||||
return {
|
return {
|
||||||
@ -178,7 +181,7 @@ class VegtationPlugin(BasicPlugin):
|
|||||||
# ActionManager().veg_menu.addMenu(veg_menu)
|
# ActionManager().veg_menu.addMenu(veg_menu)
|
||||||
|
|
||||||
for key in VEG_CD.keys():
|
for key in VEG_CD.keys():
|
||||||
alg:AlgFrontend = VEG_CD[key]
|
alg: AlgFrontend = VEG_CD[key]
|
||||||
if alg.get_name() is None:
|
if alg.get_name() is None:
|
||||||
name = key
|
name = key
|
||||||
else:
|
else:
|
||||||
@ -190,7 +193,6 @@ class VegtationPlugin(BasicPlugin):
|
|||||||
|
|
||||||
veg_menu.addAction(action)
|
veg_menu.addAction(action)
|
||||||
|
|
||||||
|
|
||||||
def run_cd(self, alg):
|
def run_cd(self, alg):
|
||||||
dialog = VegtationCDMethod(self.mainwindow, alg)
|
dialog = VegtationCDMethod(self.mainwindow, alg)
|
||||||
dialog.show()
|
dialog.show()
|
||||||
@ -199,9 +201,9 @@ class VegtationPlugin(BasicPlugin):
|
|||||||
t = Thread(target=self.run_cd_alg, args=(dialog,))
|
t = Thread(target=self.run_cd_alg, args=(dialog,))
|
||||||
t.start()
|
t.start()
|
||||||
|
|
||||||
def run_cd_alg(self, w:VegtationCDMethod):
|
def run_cd_alg(self, w: VegtationCDMethod):
|
||||||
|
|
||||||
layer1=w.layer_combox.layer1
|
layer1 = w.layer_combox.layer1
|
||||||
pth1 = w.layer_combox.layer1.path
|
pth1 = w.layer_combox.layer1.path
|
||||||
pth2 = w.layer_combox.layer2.path
|
pth2 = w.layer_combox.layer2.path
|
||||||
name = layer1.layer_parent.name
|
name = layer1.layer_parent.name
|
||||||
@ -215,12 +217,14 @@ class VegtationPlugin(BasicPlugin):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if falg is not None:
|
if falg is not None:
|
||||||
pth1 = falg.run_alg(pth1, name=name, send_message=self.send_message, **fparams)
|
pth1 = falg.run_alg(
|
||||||
pth2 = falg.run_alg(pth2, name=name, send_message=self.send_message, **fparams)
|
pth1, name=name, send_message=self.send_message, **fparams)
|
||||||
|
pth2 = falg.run_alg(
|
||||||
|
pth2, name=name, send_message=self.send_message, **fparams)
|
||||||
|
|
||||||
|
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent,
|
||||||
|
send_message=self.send_message, **cdparams)
|
||||||
|
thpth = thalg.run_alg(
|
||||||
|
cdpth, name=name, send_message=self.send_message, **thparams)
|
||||||
|
|
||||||
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent, send_message=self.send_message,**cdparams)
|
table_layer(thpth, layer1, name, self.send_message)
|
||||||
thpth = thalg.run_alg(cdpth, name=name, send_message=self.send_message, **thparams)
|
|
||||||
|
|
||||||
table_layer(thpth,layer1,name,self.send_message)
|
|
||||||
|
|
||||||
|
@ -1,38 +1,43 @@
|
|||||||
|
from .SH import SH
|
||||||
|
from .LHBA import LHBA
|
||||||
|
from .OCD import OCD
|
||||||
|
from .AHT import AHT
|
||||||
|
from .ACD import ACD
|
||||||
|
import numpy as np
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from osgeo import gdal
|
from osgeo import gdal
|
||||||
import math,os
|
import math
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
from PyQt5 import QtWidgets
|
from PyQt5 import QtWidgets
|
||||||
from sklearn.cluster import k_means
|
from sklearn.cluster import k_means
|
||||||
from rscder.utils.geomath import geo2imageRC, imageRC2geo
|
from rscder.utils.geomath import geo2imageRC, imageRC2geo
|
||||||
|
from rscder.utils.icons import IconInstance
|
||||||
from rscder.utils.project import Project, PairLayer
|
from rscder.utils.project import Project, PairLayer
|
||||||
from misc import Register, AlgFrontend
|
from misc import Register, AlgFrontend
|
||||||
|
|
||||||
VEG_CD = Register('植被变化检测方法')
|
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]):
|
def warp(file, ds: gdal.Dataset, srcWin=[0, 0, 0, 0]):
|
||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
xsize=ds.RasterXSize
|
xsize = ds.RasterXSize
|
||||||
ysize=ds.RasterYSize
|
ysize = ds.RasterYSize
|
||||||
geo=ds.GetGeoTransform()
|
geo = ds.GetGeoTransform()
|
||||||
orj=ds.GetProjection()
|
orj = ds.GetProjection()
|
||||||
band=ds.RasterCount
|
band = ds.RasterCount
|
||||||
if os.path.exists(file):
|
if os.path.exists(file):
|
||||||
os.remove(file)
|
os.remove(file)
|
||||||
out_ds:gdal.Dataset=driver.Create(file, xsize, ysize, band, gdal.GDT_Byte)
|
out_ds: gdal.Dataset = driver.Create(
|
||||||
|
file, xsize, ysize, band, gdal.GDT_Byte)
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(orj)
|
out_ds.SetProjection(orj)
|
||||||
for b in range(1,band+1):
|
for b in range(1, band+1):
|
||||||
out_ds.GetRasterBand(b).WriteArray(ds.ReadAsArray(*srcWin,band_list=[b]),*(0,0))
|
out_ds.GetRasterBand(b).WriteArray(
|
||||||
|
ds.ReadAsArray(*srcWin, band_list=[b]), *(0, 0))
|
||||||
del out_ds
|
del out_ds
|
||||||
|
|
||||||
|
|
||||||
@VEG_CD.register
|
@VEG_CD.register
|
||||||
class BasicCD(AlgFrontend):
|
class BasicCD(AlgFrontend):
|
||||||
|
|
||||||
@ -41,10 +46,14 @@ class BasicCD(AlgFrontend):
|
|||||||
return '差分法'
|
return '差分法'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None,*args, **kargs):
|
def get_icon():
|
||||||
|
return IconInstance().VEGETATION
|
||||||
|
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
@staticmethod
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
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
|
cell_size = layer_parent.cell_size
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
@ -56,35 +65,39 @@ class BasicCD(AlgFrontend):
|
|||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(proj)
|
out_ds.SetProjection(proj)
|
||||||
|
|
||||||
max_diff = 0
|
max_diff = 0
|
||||||
min_diff = math.inf
|
min_diff = math.inf
|
||||||
|
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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):#该改这里了
|
for j in range(yblocks + 1): # 该改这里了
|
||||||
if send_message is not None:
|
if send_message is not None:
|
||||||
send_message.emit(f'计算{j}/{yblocks}')
|
send_message.emit(f'计算{j}/{yblocks}')
|
||||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||||
block_xy=(0,j * cell_size[1])
|
block_xy = (0, j * cell_size[1])
|
||||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||||
break
|
break
|
||||||
block_size=(xsize, cell_size[1])
|
block_size = (xsize, cell_size[1])
|
||||||
block_size1 = (xsize, cell_size[1])
|
block_size1 = (xsize, cell_size[1])
|
||||||
block_size2 = (xsize,cell_size[1])
|
block_size2 = (xsize, cell_size[1])
|
||||||
if block_xy[1] + block_size[1] > ysize:
|
if block_xy[1] + block_size[1] > ysize:
|
||||||
block_size = (xsize, ysize - block_xy[1])
|
block_size = (xsize, ysize - block_xy[1])
|
||||||
if block_xy1[1] + block_size1[1] > end1y:
|
if block_xy1[1] + block_size1[1] > end1y:
|
||||||
block_size1 = (xsize,end1y - block_xy1[1])
|
block_size1 = (xsize, end1y - block_xy1[1])
|
||||||
if block_xy2[1] + block_size2[1] > end2y:
|
if block_xy2[1] + block_size2[1] > end2y:
|
||||||
block_size2 = (xsize, end2y - block_xy2[1])
|
block_size2 = (xsize, end2y - block_xy2[1])
|
||||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||||
@ -112,8 +125,10 @@ class BasicCD(AlgFrontend):
|
|||||||
send_message.emit('归一化概率中...')
|
send_message.emit('归一化概率中...')
|
||||||
temp_in_ds = gdal.Open(out_tif)
|
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_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
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.SetGeoTransform(geo)
|
||||||
out_normal_ds.SetProjection(proj)
|
out_normal_ds.SetProjection(proj)
|
||||||
# hist = np.zeros(256, dtype=np.int32)
|
# hist = np.zeros(256, dtype=np.int32)
|
||||||
@ -141,6 +156,7 @@ class BasicCD(AlgFrontend):
|
|||||||
send_message.emit('差分法计算完成')
|
send_message.emit('差分法计算完成')
|
||||||
return out_normal_tif
|
return out_normal_tif
|
||||||
|
|
||||||
|
|
||||||
@VEG_CD.register
|
@VEG_CD.register
|
||||||
class LSTS(AlgFrontend):
|
class LSTS(AlgFrontend):
|
||||||
|
|
||||||
@ -157,12 +173,12 @@ class LSTS(AlgFrontend):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_params(widget=None):
|
def get_params(widget=None):
|
||||||
return dict(n=5, w_size=(3,3))
|
return dict(n=5, w_size=(3, 3))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message=None,n=5,w_size=(3,3), *args, **kws):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, n=5, w_size=(3, 3), *args, **kws):
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
|
|
||||||
cell_size = layer_parent.cell_size
|
cell_size = layer_parent.cell_size
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
@ -172,46 +188,51 @@ class LSTS(AlgFrontend):
|
|||||||
yblocks = ysize // cell_size[1]
|
yblocks = ysize // cell_size[1]
|
||||||
|
|
||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
out_tif = os.path.join(Project().other_path, '%d.tif'%(int(datetime.now().timestamp() * 1000)))
|
out_tif = os.path.join(Project().other_path, '%d.tif' % (
|
||||||
|
int(datetime.now().timestamp() * 1000)))
|
||||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(proj)
|
out_ds.SetProjection(proj)
|
||||||
pixnum=w_size[0]*w_size[1]
|
pixnum = w_size[0]*w_size[1]
|
||||||
# send_message.emit('pixnum:'pixnum)
|
# send_message.emit('pixnum:'pixnum)
|
||||||
max_diff = 0
|
max_diff = 0
|
||||||
min_diff = math.inf
|
min_diff = math.inf
|
||||||
win_h=w_size[0]//2 #half hight of window
|
win_h = w_size[0]//2 # half hight of window
|
||||||
win_w=w_size[1]//2 #half width of window
|
win_w = w_size[1]//2 # half width of window
|
||||||
a=[[(i+1)**j for j in range(n+1)] for i in range(pixnum)]
|
a = [[(i+1)**j for j in range(n+1)] for i in range(pixnum)]
|
||||||
A=np.array(a).astype(np.float64)#
|
A = np.array(a).astype(np.float64)
|
||||||
|
|
||||||
k_=np.array(range(1,n+1))
|
k_ = np.array(range(1, n+1))
|
||||||
df1=np.zeros(pixnum).astype(np.float64)
|
df1 = np.zeros(pixnum).astype(np.float64)
|
||||||
df2=np.zeros(pixnum).astype(np.float64)
|
df2 = np.zeros(pixnum).astype(np.float64)
|
||||||
|
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), 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):
|
for j in range(yblocks + 1):
|
||||||
if send_message is not None:
|
if send_message is not None:
|
||||||
send_message.emit(f'计算{j}/{yblocks}')
|
send_message.emit(f'计算{j}/{yblocks}')
|
||||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||||
block_xy=(0,j * cell_size[1])
|
block_xy = (0, j * cell_size[1])
|
||||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||||
break
|
break
|
||||||
block_size=(xsize, cell_size[1])
|
block_size = (xsize, cell_size[1])
|
||||||
block_size1 = (xsize, cell_size[1])
|
block_size1 = (xsize, cell_size[1])
|
||||||
block_size2 = (xsize,cell_size[1])
|
block_size2 = (xsize, cell_size[1])
|
||||||
if block_xy[1] + block_size[1] > ysize:
|
if block_xy[1] + block_size[1] > ysize:
|
||||||
block_size = (xsize, ysize - block_xy[1])
|
block_size = (xsize, ysize - block_xy[1])
|
||||||
if block_xy1[1] + block_size1[1] > end1y:
|
if block_xy1[1] + block_size1[1] > end1y:
|
||||||
block_size1 = (xsize,end1y - block_xy1[1])
|
block_size1 = (xsize, end1y - block_xy1[1])
|
||||||
if block_xy2[1] + block_size2[1] > end2y:
|
if block_xy2[1] + block_size2[1] > end2y:
|
||||||
block_size2 = (xsize, end2y - block_xy2[1])
|
block_size2 = (xsize, end2y - block_xy2[1])
|
||||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||||
@ -222,33 +243,35 @@ class LSTS(AlgFrontend):
|
|||||||
block_data2 = block_data2[None, ...]
|
block_data2 = block_data2[None, ...]
|
||||||
# pdb.set_trace()
|
# pdb.set_trace()
|
||||||
else:
|
else:
|
||||||
block_data1=np.mean(block_data1,0)
|
block_data1 = np.mean(block_data1, 0)
|
||||||
block_data2=np.mean(block_data2,0)
|
block_data2 = np.mean(block_data2, 0)
|
||||||
block_diff=np.zeros(block_data1.shape).astype(np.float64)
|
block_diff = np.zeros(block_data1.shape).astype(np.float64)
|
||||||
|
|
||||||
for i in range(win_h,block_size1[1]-win_h):
|
for i in range(win_h, block_size1[1]-win_h):
|
||||||
for j_ in range(win_w,block_size1[0]-win_w):
|
for j_ in range(win_w, block_size1[0]-win_w):
|
||||||
pix=0
|
pix = 0
|
||||||
|
|
||||||
#get b
|
# get b
|
||||||
# b1=block_data[i+win_h:i+win_h] c in range(j_-win_w,j_+win_w+1)
|
# b1=block_data[i+win_h:i+win_h] c in range(j_-win_w,j_+win_w+1)
|
||||||
b1=block_data1[i-win_h:i+win_h+1,j_-win_w:j_+win_w+1]
|
b1 = block_data1[i-win_h:i+win_h+1, j_-win_w:j_+win_w+1]
|
||||||
b2=block_data2[i-win_h:i+win_h+1,j_-win_w:j_+win_w+1]
|
b2 = block_data2[i-win_h:i+win_h+1, j_-win_w:j_+win_w+1]
|
||||||
b1=[b if (r+1)//2 else b[::-1] for r,b in enumerate(b1)]
|
b1 = [b if (r+1)//2 else b[::-1] for r, b in enumerate(b1)]
|
||||||
b2=[b if (r+1)//2 else b[::-1] for r,b in enumerate(b2)]
|
b2 = [b if (r+1)//2 else b[::-1] for r, b in enumerate(b2)]
|
||||||
b1=np.expand_dims(np.concatenate(b1,0),1)
|
b1 = np.expand_dims(np.concatenate(b1, 0), 1)
|
||||||
b2=np.expand_dims(np.concatenate(b2,0),1)
|
b2 = np.expand_dims(np.concatenate(b2, 0), 1)
|
||||||
|
|
||||||
x1=np.squeeze(np.linalg.pinv(A).dot(b1))
|
x1 = np.squeeze(np.linalg.pinv(A).dot(b1))
|
||||||
x2=np.squeeze(np.linalg.pinv(A).dot(b2))
|
x2 = np.squeeze(np.linalg.pinv(A).dot(b2))
|
||||||
#df
|
# df
|
||||||
k_=range(1,n+1)
|
k_ = range(1, n+1)
|
||||||
for pix in range(1,pixnum+1):
|
for pix in range(1, pixnum+1):
|
||||||
df1[pix-1]=x1[1:n+1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
df1[pix-1] = x1[1:n +
|
||||||
df2[pix-1]=x2[1:n+1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
||||||
|
df2[pix-1] = x2[1:n +
|
||||||
|
1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
||||||
|
|
||||||
#distance 欧式距离
|
# distance 欧式距离
|
||||||
block_diff[i][j_]=np.dot(df1-df2,df1-df2)**0.5
|
block_diff[i][j_] = np.dot(df1-df2, df1-df2)**0.5
|
||||||
|
|
||||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||||
max_diff = max(max_diff, block_diff.max())
|
max_diff = max(max_diff, block_diff.max())
|
||||||
@ -263,8 +286,10 @@ class LSTS(AlgFrontend):
|
|||||||
send_message.emit('归一化概率中...')
|
send_message.emit('归一化概率中...')
|
||||||
temp_in_ds = gdal.Open(out_tif)
|
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_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
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.SetGeoTransform(geo)
|
||||||
out_normal_ds.SetProjection(proj)
|
out_normal_ds.SetProjection(proj)
|
||||||
# hist = np.zeros(256, dtype=np.int32)
|
# hist = np.zeros(256, dtype=np.int32)
|
||||||
@ -302,10 +327,10 @@ class CVAAlg(AlgFrontend):
|
|||||||
return 'CVA'
|
return 'CVA'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
|
|
||||||
cell_size = layer_parent.cell_size
|
cell_size = layer_parent.cell_size
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
@ -317,35 +342,38 @@ class CVAAlg(AlgFrontend):
|
|||||||
driver = gdal.GetDriverByName('GTiff')
|
driver = gdal.GetDriverByName('GTiff')
|
||||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
out_ds.SetGeoTransform(geo)
|
out_ds.SetGeoTransform(geo)
|
||||||
out_ds.SetProjection(proj)
|
out_ds.SetProjection(proj)
|
||||||
max_diff = 0
|
max_diff = 0
|
||||||
min_diff = math.inf
|
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])
|
||||||
|
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
|
||||||
|
|
||||||
for j in range(yblocks + 1):
|
for j in range(yblocks + 1):
|
||||||
if send_message is not None:
|
if send_message is not None:
|
||||||
send_message.emit(f'计算{j}/{yblocks}')
|
send_message.emit(f'计算{j}/{yblocks}')
|
||||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||||
block_xy=(0,j * cell_size[1])
|
block_xy = (0, j * cell_size[1])
|
||||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||||
break
|
break
|
||||||
block_size=(xsize, cell_size[1])
|
block_size = (xsize, cell_size[1])
|
||||||
block_size1 = (xsize, cell_size[1])
|
block_size1 = (xsize, cell_size[1])
|
||||||
block_size2 = (xsize,cell_size[1])
|
block_size2 = (xsize, cell_size[1])
|
||||||
if block_xy[1] + block_size[1] > ysize:
|
if block_xy[1] + block_size[1] > ysize:
|
||||||
block_size = (xsize, ysize - block_xy[1])
|
block_size = (xsize, ysize - block_xy[1])
|
||||||
if block_xy1[1] + block_size1[1] > end1y:
|
if block_xy1[1] + block_size1[1] > end1y:
|
||||||
block_size1 = (xsize,end1y - block_xy1[1])
|
block_size1 = (xsize, end1y - block_xy1[1])
|
||||||
if block_xy2[1] + block_size2[1] > end2y:
|
if block_xy2[1] + block_size2[1] > end2y:
|
||||||
block_size2 = (xsize, end2y - block_xy2[1])
|
block_size2 = (xsize, end2y - block_xy2[1])
|
||||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||||
@ -355,7 +383,7 @@ class CVAAlg(AlgFrontend):
|
|||||||
block_data1 = block_data1[None, ...]
|
block_data1 = block_data1[None, ...]
|
||||||
block_data2 = block_data2[None, ...]
|
block_data2 = block_data2[None, ...]
|
||||||
# pdb.set_trace()
|
# pdb.set_trace()
|
||||||
block_diff=np.sum((block_data1-block_data2)**2,0)**0.5
|
block_diff = np.sum((block_data1-block_data2)**2, 0)**0.5
|
||||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||||
max_diff = max(max_diff, block_diff.max())
|
max_diff = max(max_diff, block_diff.max())
|
||||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||||
@ -369,8 +397,10 @@ class CVAAlg(AlgFrontend):
|
|||||||
send_message.emit('归一化概率中...')
|
send_message.emit('归一化概率中...')
|
||||||
temp_in_ds = gdal.Open(out_tif)
|
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_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
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.SetGeoTransform(geo)
|
||||||
out_normal_ds.SetProjection(proj)
|
out_normal_ds.SetProjection(proj)
|
||||||
# hist = np.zeros(256, dtype=np.int32)
|
# hist = np.zeros(256, dtype=np.int32)
|
||||||
@ -398,6 +428,7 @@ class CVAAlg(AlgFrontend):
|
|||||||
send_message.emit('欧式距离计算完成')
|
send_message.emit('欧式距离计算完成')
|
||||||
return out_normal_tif
|
return out_normal_tif
|
||||||
|
|
||||||
|
|
||||||
@VEG_CD.register
|
@VEG_CD.register
|
||||||
class ACDAlg(AlgFrontend):
|
class ACDAlg(AlgFrontend):
|
||||||
|
|
||||||
@ -406,7 +437,7 @@ class ACDAlg(AlgFrontend):
|
|||||||
return 'ACD'
|
return 'ACD'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -418,39 +449,41 @@ class ACDAlg(AlgFrontend):
|
|||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
|
# 运算
|
||||||
|
|
||||||
#运算
|
|
||||||
send_message.emit('开始ACD计算.....')
|
send_message.emit('开始ACD计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
ACD(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
ACD(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
@ -466,7 +499,7 @@ class AHTAlg(AlgFrontend):
|
|||||||
return 'AHT'
|
return 'AHT'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -477,39 +510,41 @@ class AHTAlg(AlgFrontend):
|
|||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
|
# 运算
|
||||||
|
|
||||||
#运算
|
|
||||||
send_message.emit('开始AHT计算.....')
|
send_message.emit('开始AHT计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
AHT(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
AHT(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
@ -525,7 +560,7 @@ class OCDAlg(AlgFrontend):
|
|||||||
return 'OCD'
|
return 'OCD'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -536,45 +571,48 @@ class OCDAlg(AlgFrontend):
|
|||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
|
# 运算
|
||||||
|
|
||||||
#运算
|
|
||||||
send_message.emit('开始OCD计算.....')
|
send_message.emit('开始OCD计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
OCD(temp_tif1,temp_tif2,out_normal_tif,Project().other_path)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
OCD(temp_tif1, temp_tif2, out_normal_tif, Project().other_path)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
|
|
||||||
return out_normal_tif
|
return out_normal_tif
|
||||||
|
|
||||||
|
|
||||||
@VEG_CD.register
|
@VEG_CD.register
|
||||||
class LHBAAlg(AlgFrontend):
|
class LHBAAlg(AlgFrontend):
|
||||||
|
|
||||||
@ -583,7 +621,7 @@ class LHBAAlg(AlgFrontend):
|
|||||||
return 'LHBA'
|
return 'LHBA'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -592,40 +630,43 @@ class LHBAAlg(AlgFrontend):
|
|||||||
print(args)
|
print(args)
|
||||||
send_message = Empty()
|
send_message = Empty()
|
||||||
|
|
||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
#运算
|
# 运算
|
||||||
send_message.emit('开始LHBA计算.....')
|
send_message.emit('开始LHBA计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
LHBA(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
LHBA(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
@ -640,7 +681,7 @@ class SHAlg(AlgFrontend):
|
|||||||
return 'SH'
|
return 'SH'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
def run_alg(pth1: str, pth2: str, layer_parent: PairLayer, send_message=None, *args, **kargs):
|
||||||
|
|
||||||
if send_message is None:
|
if send_message is None:
|
||||||
class Empty:
|
class Empty:
|
||||||
@ -649,41 +690,43 @@ class SHAlg(AlgFrontend):
|
|||||||
print(args)
|
print(args)
|
||||||
send_message = Empty()
|
send_message = Empty()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xsize = layer_parent.size[0]
|
xsize = layer_parent.size[0]
|
||||||
ysize = layer_parent.size[1]
|
ysize = layer_parent.size[1]
|
||||||
geo=layer_parent.grid.geo
|
geo = layer_parent.grid.geo
|
||||||
proj=layer_parent.grid.proj
|
proj = layer_parent.grid.proj
|
||||||
#提取公共部分
|
# 提取公共部分
|
||||||
send_message.emit('提取重叠区域数据.....')
|
send_message.emit('提取重叠区域数据.....')
|
||||||
|
|
||||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
ds2: gdal.Dataset = gdal.Open(pth2)
|
||||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
temp_tif2 = os.path.join(Project().other_path, 'temp2.tif')
|
||||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start2x, start2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
end2x, end2y = geo2imageRC(ds2.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif2, ds2, srcWin=[start2x, start2y, xsize, ysize])
|
||||||
del ds2
|
del ds2
|
||||||
send_message.emit('图像二提取完成')
|
send_message.emit('图像二提取完成')
|
||||||
|
|
||||||
|
ds1: gdal.Dataset = gdal.Open(pth1)
|
||||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
|
||||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
start1x, start1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
), layer_parent.mask.xy[0], layer_parent.mask.xy[1])
|
||||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
end1x, end1y = geo2imageRC(ds1.GetGeoTransform(
|
||||||
|
), layer_parent.mask.xy[2], layer_parent.mask.xy[3])
|
||||||
|
warp(temp_tif1, ds1, srcWin=[start1x, start1y, xsize, ysize])
|
||||||
del ds1
|
del ds1
|
||||||
send_message.emit('图像一提取完成')
|
send_message.emit('图像一提取完成')
|
||||||
|
|
||||||
#运算
|
# 运算
|
||||||
send_message.emit('开始SH计算.....')
|
send_message.emit('开始SH计算.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(
|
||||||
SH(temp_tif1,temp_tif2,out_normal_tif)
|
layer_parent.name, int(np.random.rand() * 100000)))
|
||||||
#添加投影
|
SH(temp_tif1, temp_tif2, out_normal_tif)
|
||||||
|
# 添加投影
|
||||||
send_message.emit('录入投影信息.....')
|
send_message.emit('录入投影信息.....')
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
ds=gdal.Open(out_normal_tif,1)
|
ds = gdal.Open(out_normal_tif, 1)
|
||||||
ds.SetGeoTransform(geo)
|
ds.SetGeoTransform(geo)
|
||||||
ds.SetProjection(proj)
|
ds.SetProjection(proj)
|
||||||
del ds
|
del ds
|
||||||
|
@ -2,6 +2,7 @@ from PyQt5.QtGui import QIcon
|
|||||||
from PyQt5.QtCore import QObject
|
from PyQt5.QtCore import QObject
|
||||||
from .misc import singleton
|
from .misc import singleton
|
||||||
|
|
||||||
|
|
||||||
@singleton
|
@singleton
|
||||||
class IconInstance(QObject):
|
class IconInstance(QObject):
|
||||||
|
|
||||||
@ -46,6 +47,10 @@ class IconInstance(QObject):
|
|||||||
self.RASTER = QIcon('./icons/影像.png')
|
self.RASTER = QIcon('./icons/影像.png')
|
||||||
self.VEGETATION = QIcon('./icons/植被变化.png')
|
self.VEGETATION = QIcon('./icons/植被变化.png')
|
||||||
self.NOISE = QIcon('./icons/噪声处理.png')
|
self.NOISE = QIcon('./icons/噪声处理.png')
|
||||||
|
self.ARITHMETIC1 = QIcon('./icons/Algorithm_icon/功能-01.png')
|
||||||
|
self.ARITHMETIC2 = QIcon('./icons/Algorithm_icon/功能-02.png')
|
||||||
|
self.ARITHMETIC3 = QIcon('./icons/Algorithm_icon/功能-03.png')
|
||||||
|
self.ARITHMETIC3.QSize()
|
||||||
|
|
||||||
self.DATA_LOAD = QIcon('./icons/数据加载.png')
|
self.DATA_LOAD = QIcon('./icons/数据加载.png')
|
||||||
|
|
||||||
|
BIN
test-data/AAA.tif.ovr
Normal file
BIN
test-data/AAA.tif.ovr
Normal file
Binary file not shown.
BIN
test-data/BBB.tif.ovr
Normal file
BIN
test-data/BBB.tif.ovr
Normal file
Binary file not shown.
22
test-data/test01/test01.prj
Normal file
22
test-data/test01/test01.prj
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
cell_size:
|
||||||
|
- 100
|
||||||
|
- 100
|
||||||
|
layers:
|
||||||
|
- enable: true
|
||||||
|
layers: []
|
||||||
|
name: AAA.-BBB.
|
||||||
|
pth1: E:/xhong/CVEOdemo/fourth/rscder/test-data/AAA.tif
|
||||||
|
pth2: E:/xhong/CVEOdemo/fourth/rscder/test-data/BBB.tif
|
||||||
|
style_info1:
|
||||||
|
NIR: 4
|
||||||
|
b: 3
|
||||||
|
g: 2
|
||||||
|
r: 1
|
||||||
|
style_info2:
|
||||||
|
NIR: 4
|
||||||
|
b: 3
|
||||||
|
g: 2
|
||||||
|
r: 1
|
||||||
|
max_memory: 100
|
||||||
|
max_threads: 4
|
||||||
|
root: E:\xhong\CVEOdemo\fourth\rscder\test-data\test01
|
Loading…
x
Reference in New Issue
Block a user