fixed bugs mentioned in update-0503.xlsx
This commit is contained in:
parent
5c2e6f4e73
commit
fde841c037
@ -125,16 +125,24 @@ class BasicAICD(AlgFrontend):
|
||||
block_size = (xsize, cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
|
||||
np.seterr(divide='ignore',invalid='ignore')
|
||||
block_data = temp_in_ds.ReadAsArray(*block_xy, *block_size)
|
||||
max_diff=block_data.max()
|
||||
min_diff=block_data.min()
|
||||
|
||||
block_data = (block_data - min_diff) / (max_diff - min_diff) * 255
|
||||
|
||||
block_data = block_data.astype(np.uint8)
|
||||
out_normal_ds.GetRasterBand(1).WriteArray(block_data, *block_xy)
|
||||
# os.system('pause')
|
||||
# hist_t, _ = np.histogram(block_data, bins=256, range=(0, 256))
|
||||
# hist += hist_t
|
||||
# print(hist)
|
||||
del temp_in_ds
|
||||
del out_normal_ds
|
||||
try:
|
||||
# os.system('pause')
|
||||
os.remove(out_tif)
|
||||
except:
|
||||
pass
|
||||
|
@ -144,8 +144,9 @@ class EvaluationPlugin(BasicPlugin):
|
||||
|
||||
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))
|
||||
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:
|
||||
f.write(f'预测结果:{layer.path}\n')
|
||||
@ -169,7 +170,7 @@ class EvaluationPlugin(BasicPlugin):
|
||||
Kappa: {kappa(cfm)}
|
||||
''')
|
||||
f.flush()
|
||||
|
||||
# os.system('pause')
|
||||
txt=f'''
|
||||
预测结果:{layer.path}\n
|
||||
|
||||
@ -193,12 +194,13 @@ class EvaluationPlugin(BasicPlugin):
|
||||
F1: {cfm[1,1] / (np.sum(cfm[1,:]) + np.sum(cfm[:,1]) - cfm[1,1])}
|
||||
Kappa: {kappa(cfm)}
|
||||
'''
|
||||
|
||||
# self.msgbox = Win(txt)
|
||||
# self.msgbox.show()
|
||||
|
||||
self.msgbox = Win(txt)
|
||||
self.msgbox.show()
|
||||
# os.system(f'c:/windows/notepad.exe "{result_path}"')
|
||||
|
||||
# self.send_message.emit('精度评估完成')
|
||||
self.send_message.emit('精度评估完成,结果保存在'+result_path)
|
||||
|
||||
def show_dialog(self):
|
||||
dialog = EvalutationDialog(self.mainwindow)
|
||||
@ -212,10 +214,13 @@ class EvaluationPlugin(BasicPlugin):
|
||||
t.start()
|
||||
|
||||
from .window import Ui_Form
|
||||
class Win(QWidget,Ui_Form):
|
||||
# class Win(QWidget,Ui_Form):
|
||||
|
||||
# def __init__(self,txt):
|
||||
# super().__init__()
|
||||
|
||||
# self.setupUi(self)
|
||||
# self.label.setText(txt)
|
||||
|
||||
|
||||
def __init__(self,txt):
|
||||
super().__init__()
|
||||
|
||||
self.setupUi(self)
|
||||
self.label.setText(txt)
|
@ -138,7 +138,7 @@ class ExportPlugin(BasicPlugin):
|
||||
[1, 255, 0, 0]
|
||||
]
|
||||
|
||||
if self.style_path is '':
|
||||
if self.style_path == '':
|
||||
style = default_style
|
||||
else:
|
||||
style = np.loadtxt(self.style_path, comments='#', delimiter=',')
|
||||
@ -160,27 +160,42 @@ class ExportPlugin(BasicPlugin):
|
||||
# TODO: check data range is 0-1
|
||||
|
||||
def get_color(v):
|
||||
first_color = []
|
||||
second_color = []
|
||||
first_value = 0
|
||||
second_value = 1
|
||||
for s in style:
|
||||
if s[0] <= v:
|
||||
first_value = s[0]
|
||||
first_color = s[1:]
|
||||
else:
|
||||
second_value = s[0]
|
||||
second_color = s[1:]
|
||||
break
|
||||
if second_value == 1:
|
||||
return np.array(style[-1][1:])
|
||||
# first_color = []
|
||||
# second_color = []
|
||||
# first_value = 0
|
||||
# second_value = 1
|
||||
# for s in style:
|
||||
# if s[0] <= v:
|
||||
# first_value = s[0]
|
||||
# first_color = s[1:]
|
||||
# else:
|
||||
# second_value = s[0]
|
||||
# second_color = s[1:]
|
||||
# break
|
||||
# if second_value == 1:
|
||||
# return np.array(style[-1][1:])
|
||||
|
||||
# first_dis = (v - first_value) / (second_value - first_value)
|
||||
# second_dis = (second_value - v) / (second_value - first_value)
|
||||
# first_color = np.array(first_color)
|
||||
# second_color = np.array(second_color)
|
||||
# color = first_color* first_dis + second_color * second_dis
|
||||
# return np.floor(color)
|
||||
|
||||
if v==0:
|
||||
return np.array(style[-1][1:])
|
||||
elif v==1:
|
||||
return np.array(style[-2][1:])
|
||||
else:
|
||||
first_color =style[-1][1:]
|
||||
second_color=style[-2][1:]
|
||||
|
||||
first_color = np.array(first_color)
|
||||
second_color=np.array(second_color)
|
||||
color_inter=first_color*(1-v)+second_color*v
|
||||
return color_inter
|
||||
|
||||
|
||||
first_dis = (v - first_value) / (second_value - first_value)
|
||||
second_dis = (second_value - v) / (second_value - first_value)
|
||||
first_color = np.array(first_color)
|
||||
second_color = np.array(second_color)
|
||||
color = first_color* first_dis + second_color * second_dis
|
||||
return np.floor(color)
|
||||
|
||||
|
||||
get_color = np.frompyfunc(get_color, nin=1, nout=1)
|
||||
|
@ -13,46 +13,37 @@ from datetime import datetime
|
||||
import numpy as np
|
||||
import torch
|
||||
import torch.nn.functional as F
|
||||
def adaptiveMedianDeNoise(count, original):
|
||||
# 初始窗口大小
|
||||
startWindow = 3
|
||||
# 卷积范围
|
||||
c = count // 2
|
||||
rows, cols = original.shape
|
||||
newI = np.zeros(original.shape)
|
||||
# median =
|
||||
|
||||
for i in range(c, rows - c):
|
||||
for j in range(c, cols - c):
|
||||
startWindow = 3
|
||||
k = int(startWindow / 2)
|
||||
median = np.median(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
mi = np.min(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
ma = np.max(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
if mi < median < ma:
|
||||
if mi < original[i, j] < ma:
|
||||
newI[i, j] = original[i, j]
|
||||
else:
|
||||
newI[i, j] = median
|
||||
|
||||
else:
|
||||
while True:
|
||||
startWindow = startWindow + 2
|
||||
k = int(startWindow / 2)
|
||||
median = np.median(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
mi = np.min(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
ma = np.max(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
|
||||
if mi < median < ma or startWindow >= count:
|
||||
break
|
||||
|
||||
if mi < median < ma or startWindow > count:
|
||||
if mi < original[i, j] < ma:
|
||||
newI[i, j] = original[i, j]
|
||||
import cv2
|
||||
from tqdm import tqdm
|
||||
def adaptiveMedianDeNoise(count, image):
|
||||
origen = 3 # 初始窗口大小
|
||||
board = origen//2 # 初始应扩充的边界
|
||||
# max_board = max_size//2 # 最大可扩充的边界
|
||||
copy = cv2.copyMakeBorder(image, *[board]*4, borderType=cv2.BORDER_DEFAULT) # 扩充边界
|
||||
out_img = np.zeros(image.shape)
|
||||
for i in tqdm(range(image.shape[0])):
|
||||
for j in range(image.shape[1]):
|
||||
def sub_func(src, size): # 两个层次的子函数
|
||||
kernel = src[i:i+size, j:j+size]
|
||||
# print(kernel)
|
||||
z_med = np.median(kernel)
|
||||
z_max = np.max(kernel)
|
||||
z_min = np.min(kernel)
|
||||
if z_min < z_med < z_max: # 层次A
|
||||
if z_min < image[i][j] < z_max: # 层次B
|
||||
return image[i][j]
|
||||
else:
|
||||
newI[i, j] = median
|
||||
return z_med
|
||||
else:
|
||||
next_size = cv2.copyMakeBorder(src, *[1]*4, borderType=cv2.BORDER_DEFAULT) # 增尺寸
|
||||
size = size+2 # 奇数的核找中值才准确
|
||||
if size <= count:
|
||||
return sub_func(next_size, size) # 重复层次A
|
||||
else:
|
||||
return z_med
|
||||
out_img[i][j] = sub_func(copy, origen)
|
||||
|
||||
return newI
|
||||
return out_img
|
||||
|
||||
@FILTER.register
|
||||
class AdaptiveFilter(AlgFrontend):
|
||||
|
@ -13,45 +13,38 @@ from datetime import datetime
|
||||
import numpy as np
|
||||
import torch
|
||||
import torch.nn.functional as F
|
||||
def adaptiveMedianDeNoise(count, original):
|
||||
# 初始窗口大小
|
||||
startWindow = 3
|
||||
# 卷积范围
|
||||
c = count // 2
|
||||
rows, cols = original.shape
|
||||
newI = np.zeros(original.shape)
|
||||
# median =
|
||||
|
||||
for i in range(c, rows - c):
|
||||
for j in range(c, cols - c):
|
||||
k = int(startWindow / 2)
|
||||
median = np.median(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
mi = np.min(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
ma = np.max(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
if mi < median < ma:
|
||||
if mi < original[i, j] < ma:
|
||||
newI[i, j] = original[i, j]
|
||||
else:
|
||||
newI[i, j] = median
|
||||
|
||||
else:
|
||||
while True:
|
||||
startWindow = startWindow + 2
|
||||
k = int(startWindow / 2)
|
||||
median = np.median(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
mi = np.min(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
ma = np.max(original[i - k:i + k + 1, j - k:j + k + 1])
|
||||
|
||||
if mi < median < ma or startWindow >= count:
|
||||
break
|
||||
|
||||
if mi < median < ma or startWindow >= count:
|
||||
if mi < original[i, j] < ma:
|
||||
newI[i, j] = original[i, j]
|
||||
import pandas as pd
|
||||
import cv2
|
||||
from tqdm import tqdm
|
||||
def adaptiveMedianDeNoise(count, image):
|
||||
origen = 3 # 初始窗口大小
|
||||
board = origen//2 # 初始应扩充的边界
|
||||
# max_board = max_size//2 # 最大可扩充的边界
|
||||
copy = cv2.copyMakeBorder(image, *[board]*4, borderType=cv2.BORDER_DEFAULT) # 扩充边界
|
||||
out_img = np.zeros(image.shape)
|
||||
for i in tqdm(range(image.shape[0])):
|
||||
for j in range(image.shape[1]):
|
||||
def sub_func(src, size): # 两个层次的子函数
|
||||
kernel = src[i:i+size, j:j+size]
|
||||
# print(kernel)
|
||||
z_med = np.median(kernel)
|
||||
z_max = np.max(kernel)
|
||||
z_min = np.min(kernel)
|
||||
if z_min < z_med < z_max: # 层次A
|
||||
if z_min < image[i][j] < z_max: # 层次B
|
||||
return image[i][j]
|
||||
else:
|
||||
newI[i, j] = median
|
||||
return z_med
|
||||
else:
|
||||
next_size = cv2.copyMakeBorder(src, *[1]*4, borderType=cv2.BORDER_DEFAULT) # 增尺寸
|
||||
size = size+2 # 奇数的核找中值才准确
|
||||
if size <= count:
|
||||
return sub_func(next_size, size) # 重复层次A
|
||||
else:
|
||||
return z_med
|
||||
out_img[i][j] = sub_func(copy, origen)
|
||||
|
||||
return newI
|
||||
return out_img
|
||||
|
||||
@FILTER.register
|
||||
class AdaptiveNPFilter(AlgFrontend):
|
||||
|
@ -138,7 +138,7 @@ class OTSUAlg(AlgFrontend):
|
||||
band = ds.GetRasterBand(1)
|
||||
# band_count = ds.RasterCount
|
||||
|
||||
hist = np.zeros(256, dtype=np.int)
|
||||
hist = np.zeros(256, dtype=np.int_)
|
||||
xsize = ds.RasterXSize
|
||||
ysize = ds.RasterYSize
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user