Пример #1
0
def warp_image(op, resol, inverse=False, return_str=False, stack=None):
	sqlController = SqlController()
	fileLocationManager = FileLocationManager(stack)
	tf_csv = os.path.join(fileLocationManager.brain_info, 'transforms_to_anchor.csv')
	transforms_to_anchor = csv_to_dict(tf_csv)
	transforms_resol = op['resolution']
	string_to_um_from_resolution = sqlController.convert_resolution_string_to_um(stack, transforms_resol)
	string_to_um_to_resolution = sqlController.convert_resolution_string_to_um(stack, resol)

	# transforms_resol = op['resolution']
	transforms_scale_factor = string_to_um_from_resolution / string_to_um_to_resolution
	tf_mat_mult_factor = np.array([[1, 1, transforms_scale_factor], [1, 1, transforms_scale_factor]])

	if inverse:
		transforms_to_anchor = {
			img_name: convert_2d_transform_forms(np.linalg.inv(np.reshape(tf, (3, 3)))[:2] * tf_mat_mult_factor,
												 out_form='str') for img_name, tf in transforms_to_anchor.items()}
	else:
		transforms_to_anchor = {
			img_name: convert_2d_transform_forms(np.reshape(list(tf), (3, 3))[:2] * tf_mat_mult_factor, out_form='str') for
			img_name, tf in transforms_to_anchor.items()}

	return transforms_to_anchor
Пример #2
0
def convert_cropbox_to_arr_xywh_1um(data, in_fmt, in_resol, stack):
    #print('data', data, 'in_fmt', in_fmt)
    sqlController = SqlController(stack)
    if isinstance(data, dict):
        data['rostral_limit'] = float(data['rostral_limit'])
        data['caudal_limit'] = float(data['caudal_limit'])
        data['dorsal_limit'] = float(data['dorsal_limit'])
        data['ventral_limit'] = float(data['ventral_limit'])
        arr_xywh = np.array([
            data['rostral_limit'], data['dorsal_limit'],
            data['caudal_limit'] - data['rostral_limit'] + 1,
            data['ventral_limit'] - data['dorsal_limit'] + 1
        ])
        # Since this does not check for wrt, the user needs to make sure the cropbox is relative to the input prep (i.e. the wrt attribute is the same as input prep)
    elif isinstance(data, str):
        if in_fmt == 'str_xywh':
            d = re.sub('[!@#$cropwarp\]\[\']', '', data)
            l = d.split(',')
            a = [float(v) for v in l]
            arr_xywh = np.array(a)
        elif in_fmt == 'str_xxyy':
            #####UPGRADE from 2 to 3arr_xxyy = np.array(map(np.round, map(eval, data.split(','))))
            arr_xxyy = np.array(
                list(map(np.round, list(map(eval, data.split(','))))))
            arr_xywh = np.array([
                arr_xxyy[0], arr_xxyy[2], arr_xxyy[1] - arr_xxyy[0] + 1,
                arr_xxyy[3] - arr_xxyy[2] + 1
            ])
        else:
            raise
    else:
        if in_fmt == 'arr_xywh':
            arr_xywh = data
            #arr_xywh = np.array(data)
        elif in_fmt == 'arr_xxyy':
            arr_xywh = np.array([
                data[0], data[2], data[1] - data[0] + 1, data[3] - data[2] + 1
            ])
        else:
            print(in_fmt, data)
            raise

    string_to_um_in_resolution = sqlController.convert_resolution_string_to_um(
        stack, in_resol)
    arr_xywh_1um = arr_xywh * string_to_um_in_resolution
    print('arr_xywh_1um', arr_xywh_1um)
    return arr_xywh_1um
Пример #3
0
def convert_cropbox_from_arr_xywh_1um(data, out_fmt, out_resol, stack):
    sqlController = SqlController(stack)
    string_to_um_out_resolution = sqlController.convert_resolution_string_to_um(
        stack, out_resol)

    data = data / string_to_um_out_resolution
    if out_fmt == 'str_xywh':
        return ','.join(map(str, data))
    elif out_fmt == 'dict':
        raise Exception("too lazy to implement")
    elif out_fmt == 'arr_xywh':
        return data
    elif out_fmt == 'arr_xxyy':
        return np.array(
            [data[0], data[0] + data[2] - 1, data[1], data[1] + data[3] - 1])
    else:
        raise