fix project bug

result path
This commit is contained in:
copper 2022-11-07 20:52:36 +08:00
parent bbf60e76ae
commit 848c720435
3 changed files with 19 additions and 12 deletions

View File

@ -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()

View File

@ -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:

View File

@ -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: