xDesCO / utils.py
Nguyễn Thành Đạt
update code
036e7c4
import cv2
import numpy as np
# from shared_queue import image_queue
def read_image(file_bytes):
np_img = np.frombuffer(file_bytes, np.uint8)
img = cv2.imdecode(np_img, cv2.IMREAD_COLOR)
return img
def combine_mask(image, mask, label2color={1: (255, 255, 0), 2: (0, 255, 255)}, alpha=0.1):
image = to_color(image)
image = cv2.resize(image, mask.shape)
mask_image = np.zeros_like(image)
for label, color in label2color.items():
mask_image[mask == label] = color
mask_image = cv2.addWeighted(image, 1 - alpha, mask_image, alpha, 0)
return mask_image
def to_color(image):
if len(image.shape) == 3 and image.shape[-1] == 3:
return image
return cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)
def to_gray(image):
if len(image.shape) == 3 and image.shape[-1] == 3:
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return image
def prob_process(prob_list):
prob = prob_list[0]
max_idx = np.argmax(prob)
min_idx = np.argmin(prob)
prob[max_idx] += prob[min_idx]
prob[min_idx] = 0
if max_idx == 0:
return 1 - prob[max_idx]
elif max_idx ==1:
return prob[max_idx]
else:
return 1 + prob[max_idx]
def combine_prob_jsw(prob, jsw_m, jsw_mm):
processed_prob = prob_process(prob)
temp = np.array([processed_prob, jsw_m, jsw_mm])
if temp.any():
temp = np.hstack(temp)
else:
temp = temp.flatten()
return temp
def scale_coordinates(links, original_size, mask_size):
scale_factor = original_size / mask_size
scaled_links = [(int(x * scale_factor), int(y * scale_factor)) for x, y in links]
return scaled_links
def get_annotations(probabilites):
OSTEOPYTE_LEVELS = {
0: "Definite osteophytes",
1: "No osteophytes",
2: "Possible osteophytes",
}
JNS_LEVELS = {
0: "Definite JSN",
1: "Mild JSN",
2: "No JSN",
3: "Severe JSN",
}
return {
"osteophyte": OSTEOPYTE_LEVELS[np.argmax(probabilites[5:8])],
"jsn": JNS_LEVELS[np.argmax(probabilites[8:12])],
}