fix project bug
result path
This commit is contained in:
parent
bbf60e76ae
commit
848c720435
@ -12,7 +12,7 @@ from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtCore import Qt
|
||||
from osgeo import gdal
|
||||
from rscder.utils.icons import IconInstance
|
||||
from rscder.utils.project import Project, SingleBandRasterLayer
|
||||
from rscder.utils.project import Project, ResultPointLayer
|
||||
|
||||
def kappa(confusion_matrix):
|
||||
pe_rows = np.sum(confusion_matrix, axis=0)
|
||||
@ -99,12 +99,12 @@ class EvaluationPlugin(BasicPlugin):
|
||||
self.action.triggered.connect(self.show_dialog)
|
||||
ActionManager().postop_menu.addAction(self.action)
|
||||
|
||||
def run_alg(self, layer:SingleBandRasterLayer, gt):
|
||||
def run_alg(self, layer:ResultPointLayer, gt):
|
||||
if layer is None or gt is None:
|
||||
return
|
||||
self.send_message.emit('正在进行精度评估...')
|
||||
|
||||
pred_ds = gdal.Open(layer.path)
|
||||
pred_ds = gdal.Open(layer.result_path['path'])
|
||||
pred_band = pred_ds.GetRasterBand(1)
|
||||
gt_ds = gdal.Open(gt)
|
||||
gt_band = gt_ds.GetRasterBand(1)
|
||||
@ -137,13 +137,13 @@ class EvaluationPlugin(BasicPlugin):
|
||||
gt_block = gt_band.ReadAsArray(*block_offset, *block_size)
|
||||
pred_block = pred_block.astype(np.uint8)
|
||||
gt_block = gt_block.astype(np.uint8)
|
||||
valid_mask = ((pred_block == 1) | (pred_block == 0)) & ((gt_block == 1) | (gt_block == 0))
|
||||
valid_mask = ((pred_block == 1) | (pred_block == 0)) & ((gt_block >= 1) | (gt_block == 0))
|
||||
pred_block = pred_block[valid_mask]
|
||||
gt_block = gt_block[valid_mask]
|
||||
|
||||
for k in range(2):
|
||||
for l in range(2):
|
||||
cfm[k,l] += np.sum((pred_block == k) & (gt_block == l))
|
||||
cfm[k,l] += np.sum((pred_block == k) & (gt_block >= l))
|
||||
|
||||
result_path = os.path.join(Project().other_path, f'{layer.name}_{os.path.basename(gt)}_evaluation.txt')
|
||||
with open(result_path, 'w', encoding='utf-8') as f:
|
||||
@ -178,9 +178,9 @@ class EvaluationPlugin(BasicPlugin):
|
||||
dialog.exec_()
|
||||
if dialog.result() == QDialog.Accepted:
|
||||
layer = dialog.layer_select.current_layer
|
||||
if not isinstance(layer, SingleBandRasterLayer):
|
||||
self.send_message.emit('请选择一个单波段栅格图层')
|
||||
return
|
||||
# if not isinstance(layer, SingleBandRasterLayer):
|
||||
# self.send_message.emit('请选择一个单波段栅格图层')
|
||||
# return
|
||||
t = Thread(target=self.run_alg, args=(layer, dialog.gt_file))
|
||||
t.start()
|
||||
|
@ -39,7 +39,7 @@ def table_layer(pth:str,layer:BasicLayer, name, send_message = None):
|
||||
center_y = center_y * geo[5] + geo [3]
|
||||
f.write(f'{center_x},{center_y},{block_data_xy.mean() * 100},{int(block_data_xy.mean() > 0.5)}\n')
|
||||
|
||||
result_layer = ResultPointLayer(out_csv, enable=True, proj=layer.proj, geo=layer.geo,result_path={})
|
||||
result_layer = ResultPointLayer(out_csv, enable=True, proj=layer.proj, geo=layer.geo,result_path=dict(path=pth))
|
||||
# print(result_layer.result_path)
|
||||
layer.layer_parent.add_result_layer(result_layer)
|
||||
if send_message is not None:
|
||||
|
@ -89,6 +89,7 @@ class BasicCD(AlgFrontend):
|
||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||
block_xy2 = (start2x, start2y+j*cell_size[1])
|
||||
block_xy = (0, j * cell_size[1])
|
||||
|
||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||
break
|
||||
block_size = (xsize, cell_size[1])
|
||||
@ -100,18 +101,24 @@ class BasicCD(AlgFrontend):
|
||||
block_size1 = (xsize, end1y - block_xy1[1])
|
||||
if block_xy2[1] + block_size2[1] > end2y:
|
||||
block_size2 = (xsize, end2y - block_xy2[1])
|
||||
|
||||
if block_size1[0] * block_size1[1] == 0 or block_size2[0] * block_size2[1] == 0:
|
||||
continue
|
||||
|
||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||
block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
|
||||
|
||||
# if block_data1.shape[0] == 0:
|
||||
# continue
|
||||
if band == 1:
|
||||
block_data1 = block_data1[None, ...]
|
||||
block_data2 = block_data2[None, ...]
|
||||
# pdb.set_trace()
|
||||
|
||||
block_diff = block_data1.sum(0) - block_data2.sum(0)
|
||||
block_diff = block_diff.astype(np.float32)
|
||||
block_diff = np.abs(block_diff)
|
||||
|
||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||
|
||||
min_diff = min(min_diff, block_diff[block_diff >= 0].min())
|
||||
max_diff = max(max_diff, block_diff.max())
|
||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||
if send_message is not None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user