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 PyQt5.QtCore import Qt
 | 
				
			||||||
from osgeo import gdal
 | 
					from osgeo import gdal
 | 
				
			||||||
from rscder.utils.icons import IconInstance 
 | 
					from rscder.utils.icons import IconInstance 
 | 
				
			||||||
from rscder.utils.project import Project, SingleBandRasterLayer
 | 
					from rscder.utils.project import Project, ResultPointLayer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def kappa(confusion_matrix):
 | 
					def kappa(confusion_matrix):
 | 
				
			||||||
    pe_rows = np.sum(confusion_matrix, axis=0)
 | 
					    pe_rows = np.sum(confusion_matrix, axis=0)
 | 
				
			||||||
@ -99,12 +99,12 @@ class EvaluationPlugin(BasicPlugin):
 | 
				
			|||||||
        self.action.triggered.connect(self.show_dialog)
 | 
					        self.action.triggered.connect(self.show_dialog)
 | 
				
			||||||
        ActionManager().postop_menu.addAction(self.action)
 | 
					        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:
 | 
					        if layer is None or gt is None:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        self.send_message.emit('正在进行精度评估...')
 | 
					        self.send_message.emit('正在进行精度评估...')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pred_ds = gdal.Open(layer.path)
 | 
					        pred_ds = gdal.Open(layer.result_path['path'])
 | 
				
			||||||
        pred_band = pred_ds.GetRasterBand(1)
 | 
					        pred_band = pred_ds.GetRasterBand(1)
 | 
				
			||||||
        gt_ds = gdal.Open(gt)
 | 
					        gt_ds = gdal.Open(gt)
 | 
				
			||||||
        gt_band = gt_ds.GetRasterBand(1)
 | 
					        gt_band = gt_ds.GetRasterBand(1)
 | 
				
			||||||
@ -137,13 +137,13 @@ class EvaluationPlugin(BasicPlugin):
 | 
				
			|||||||
            gt_block = gt_band.ReadAsArray(*block_offset, *block_size)
 | 
					            gt_block = gt_band.ReadAsArray(*block_offset, *block_size)
 | 
				
			||||||
            pred_block = pred_block.astype(np.uint8)
 | 
					            pred_block = pred_block.astype(np.uint8)
 | 
				
			||||||
            gt_block = gt_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]
 | 
					            pred_block = pred_block[valid_mask]
 | 
				
			||||||
            gt_block = gt_block[valid_mask]
 | 
					            gt_block = gt_block[valid_mask]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for k in range(2):
 | 
					            for k in range(2):
 | 
				
			||||||
                for l 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')
 | 
					        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:
 | 
					        with open(result_path, 'w', encoding='utf-8') as f:
 | 
				
			||||||
@ -178,9 +178,9 @@ class EvaluationPlugin(BasicPlugin):
 | 
				
			|||||||
        dialog.exec_()
 | 
					        dialog.exec_()
 | 
				
			||||||
        if dialog.result() == QDialog.Accepted:
 | 
					        if dialog.result() == QDialog.Accepted:
 | 
				
			||||||
            layer = dialog.layer_select.current_layer
 | 
					            layer = dialog.layer_select.current_layer
 | 
				
			||||||
            if not isinstance(layer, SingleBandRasterLayer):
 | 
					            # if not isinstance(layer, SingleBandRasterLayer):
 | 
				
			||||||
                self.send_message.emit('请选择一个单波段栅格图层')
 | 
					            #     self.send_message.emit('请选择一个单波段栅格图层')
 | 
				
			||||||
                return
 | 
					            #     return
 | 
				
			||||||
            t = Thread(target=self.run_alg, args=(layer, dialog.gt_file))
 | 
					            t = Thread(target=self.run_alg, args=(layer, dialog.gt_file))
 | 
				
			||||||
            t.start()
 | 
					            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]
 | 
					                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')
 | 
					                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)
 | 
					    # print(result_layer.result_path)
 | 
				
			||||||
    layer.layer_parent.add_result_layer(result_layer)
 | 
					    layer.layer_parent.add_result_layer(result_layer)
 | 
				
			||||||
    if send_message is not None:
 | 
					    if send_message is not None:
 | 
				
			||||||
 | 
				
			|||||||
@ -89,6 +89,7 @@ class BasicCD(AlgFrontend):
 | 
				
			|||||||
            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])
 | 
				
			||||||
@ -100,18 +101,24 @@ class BasicCD(AlgFrontend):
 | 
				
			|||||||
                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])
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            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_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
 | 
				
			||||||
            block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
 | 
					            block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
 | 
				
			||||||
 | 
					            # if block_data1.shape[0] == 0:
 | 
				
			||||||
 | 
					            #     continue
 | 
				
			||||||
            if band == 1:
 | 
					            if band == 1:
 | 
				
			||||||
                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 = block_data1.sum(0) - block_data2.sum(0)
 | 
					            block_diff = block_data1.sum(0) - block_data2.sum(0)
 | 
				
			||||||
            block_diff = block_diff.astype(np.float32)
 | 
					            block_diff = block_diff.astype(np.float32)
 | 
				
			||||||
            block_diff = np.abs(block_diff)
 | 
					            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())
 | 
					            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)
 | 
				
			||||||
            if send_message is not None:
 | 
					            if send_message is not None:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user