def get_st_d(hsd_in, he_label, he_mode): DEF = cfg.config_const() if he_mode == 0: lab_val = DEF.H_LABEL if he_mode == 1: lab_val = DEF.E_LABEL elif he_mode == 2: lab_val = DEF.B_LABEL else: print("[ERROR]: HE MODE input fail!") lab_val = -1 np_label = np.array(he_label) label_mask = (np_label == lab_val) dat_cnt = np.sum(label_mask) dat_mask = hsd_in[:, :, 2] * label_mask val_min = np.min(dat_mask) val_min_mask = label_mask * val_min dat_mask_off = dat_mask - val_min_mask #dat = () arr_dat = dat_mask_off.reshape(dat_mask_off.shape[0] * dat_mask_off.shape[1]) sort_val = sorted(arr_dat) sort_val.reverse() outs_val = np.array(sort_val) + val_min std_val = np.std(outs_val[:dat_cnt]) return std_val
def get_landmask(dat, he_label, cxy_mode, he_mode): ''' :param dat:[cx,cy,d] :param he_label: array cx cy d :param cxy_mode: cx :0 cy:1 :param he_mode: h:0 e:1 :return: ''' DEF = cfg.config_const() if he_mode == 0: lab_val = DEF.H_LABEL elif he_mode == 1: lab_val = DEF.E_LABEL else: print("[ERROR]: HE MODE input fail!") lab_val = -1 np_he_label = np.array(he_label) lab = (np_he_label == lab_val) dat_cnt = np.sum(lab) dat_use = dat[:, :, cxy_mode] * lab dat_min = np.min(dat_use) dat_off = dat_use - lab * dat_min array_dat = dat_off.reshape(dat_off.shape[0] * dat_off.shape[1]) array_dat.sort(axis=1) ##? array_dat = array_dat + dat_min lm1 = array_dat[int(dat_cnt * 0.99)] lm25 = array_dat[int(dat_cnt * 0.75)] lm50 = array_dat[int(dat_cnt * 0.5)] lm75 = array_dat[int(dat_cnt * 0.25)] lm99 = array_dat[int(dat_cnt * 0.01)] return lm1, lm25, lm50, lm75, lm99
def get_feature_mean(hsd_dat, he_label, HE_mode): ''' :param hsd_dat:hsd :param he_label: h e :param mode:0:H 1:E 2:background :return: ''' DEF = cfg.config_const() if HE_mode == 0: label_val = DEF.H_LABEL elif HE_mode == 1: label_val = DEF.E_LABEL elif HE_mode == 2: label_val = DEF.B_LABEL else: print("[ERROR] the mode input fail!") label_val = -1 np_label = np.array(he_label) label_mask = (np_label == label_val) dat_cnt = np.sum(label_mask) dat_sum_cx = np.sum(hsd_dat[:, :, 0] * label_mask) dat_sum_cy = np.sum(hsd_dat[:, :, 1] * label_mask) dat_sum_d = np.sum(hsd_dat[:, :, 2] * label_mask) m_cx = dat_sum_cx / dat_cnt m_cy = dat_sum_cy / dat_cnt m_d = dat_sum_d / dat_cnt return [m_cx, m_cy, m_d]
def density_transfer_he(hsd_in, he_label, img_info, tmpl_param, img_st_d, tmpl_st_d, he_mode): ''' :param hsd_in: :param he_label: :param img_info: :param tmpl_param: :param he_mode: :return: ''' DEF = cfg.config_const() if he_mode == 0: lab_val = DEF.H_LABEL elif he_mode == 1: lab_val = DEF.E_LABEL else: print("[ERROR]: HE MODE input fail!") lab_val = -1 hsd_dat = hsd_in * (he_label == lab_val) hsd_dat_d = hsd_dat[:, :, 2] tmpl_mean = tmpl_param[0] tmpl_u = tmpl_mean[lab_val] img_mean = img_info[0][0] img_u = img_mean[lab_val] hsd_dat_d_out = (hsd_dat_d - img_u) / img_st_d * tmpl_st_d + tmpl_u
def main(unused_argv=None): print_mode() cfg_run = cfg.config_run() cfg_const = cfg.config_const() if cfg.init() != 0: print("config init fail!") return 1 if cfg_run.mode == cfg_const.TRAIN_MODE: train() elif cfg_run.mode == cfg_const.EVAL_MODE: eval() elif cfg_run.mode == cfg_const.TEST_MODE: test() else: print("Input run mode[%s] fail!" % (cfg_run.mode)) return 0
def get_landmask_max_min(dat, cxy_mode, he_label): ''' :param dat: [cx cy d] data :param cxy_mode: cx:0 cy 1 :param he_label: h e background label :return: ''' DEF = cfg.config_const() lab = ((he_label == DEF.H_LABEL) | (he_label == DEF.E_LABEL)) dat_cnt = np.sum(lab) dat_use = dat[:, :, cxy_mode] dat_min = np.min(dat_use) dat_off = dat_use - lab * dat_min arr_dat = dat_off.reshape((dat_off.shape[0] * dat_off.shape[1])) arr_dat_sorted = sorted(arr_dat) arr_dat_sorted.reverse() arr_dat = np.array(arr_dat_sorted) + dat_min lm_max = arr_dat[0] lm_min = arr_dat[dat_cnt - 1] return lm_min, lm_max
def angle_change(hsd_in, angle, he_mode): ''' :param hsd_in: :param he_lable: :param tmpl_angle: :param he_mode: :return: ''' DEF = cfg.config_const() if he_mode == 0: lab_val = DEF.H_LABEL elif he_mode == 1: lab_val = DEF.E_LABEL else: print("[ERROR]: HE MODE input fail!") lab_val = -1 hsd_dat = hsd_in hsd_out = hsd_dat * angle[lab_val] return hsd_out
def background_transfer(hsd_in, he_label, img_info, tmpl_param): ''' :param hsd_in: hsd_dat[b][:,:,0:2] Cx Cy D of b kinds of pixels :param he_label: :param img_info: :param tmpl_param: :return: hsd_dat[b][:,:,0:2] Cx Cy D of b kinds of pixels after transform ''' DEF = cfg.config_const() img_mean = img_info[0][0] img_u_b = img_mean[2] tmpl_mean = tmpl_param[0] tmpl_u_b = tmpl_mean[2] hsd_dat = hsd_in * (he_label == DEF.B_LABEL) hsd_dat_out = hsd_dat - img_u_b + tmpl_u_b return hsd_dat_out
def landmask_change(hsd_in, he_label, lm_label, img_landmask, tmpl_landmask, cxy_mode): ''' :param hsd_in: :param he_label: :param lm_label: :param img_landmask: :param tmpl_landmask: :param cxy_mode: :return: ''' DEF = cfg.config_const() hsd_dat = hsd_in[:, :, cxy_mode] * ((he_label == DEF.H_LABEL) | (he_label == DEF.E_LABEL)) img_scaled = np.zeros(hsd_dat.shape) for i in range(0, 5): img_scaled = (img_scaled) + (hsd_dat * (lm_label == i) * (img_landmask[i] / tmpl_landmask[i])) return img_scaled
def mean_change(hsd_in, he_label, he_mean, he_mode): ''' :param hsd_in: :param he_label: :param img_info: :param he_mode: :return: ''' DEF = cfg.config_const() if he_mode == 0: lab_val = DEF.H_LABEL elif he_mode == 1: lab_val = DEF.E_LABEL else: print("[ERROR]: HE MODE input fail!") lab_val = -1 hsd_dat = hsd_in * (he_label == DEF.H_LABEL | he_label == DEF.E_LABEL) mean = he_mean[lab_val] #h_mean or e_mean hsd_dat_out = hsd_dat - mean return hsd_dat_out
def pixels_classify(img, sort_label, labels, w, h): label_idx = 0 img_shape = img.shape heb_label = np.zeros((img_shape[0], img_shape[1])) DEF = cfg.config_const() for i in range(w): for j in range(h): if (labels[label_idx] == sort_label[0]): heb_label[i][j] = DEF.H_LABEL if (labels[label_idx] == sort_label[1]): heb_label[i][j] = DEF.E_LABEL if (labels[label_idx] == sort_label[2]): #if a pixel is b classes in k-mean,and its density is lower than 0.2, classify this pixel to background if (hsl.pixel_rgb2hsd(img[i][j])[2] < 0.2): heb_label[i][j] = DEF.B_LABEL # if a pixel is b classes in k-mean,but its density is higher than 0.2, classify this pixel to cytoplasm # and then change its orig label else: heb_label[i][j] = DEF.E_LABEL label_idx += 1 return heb_label