VReason-Demo / cxas /extraction /compactness.py
EvidenceAIResearch's picture
Upload RadGenome demo Space
0d8d0b4 verified
Raw
History Blame Contribute Delete
962 Bytes
import cv2
import numpy as np
import math
from cxas.extraction.func_helpers import get_perimeter_from_contour, get_area
from cxas.label_mapper import id2label_dict
def get_all_compactness(mask, img=None, draw = False):
out = {}
for i in range(mask.shape[0]):
if mask[i].sum() == 0:
compactness = -1
else:
compactness = get_compactness(mask[i].astype(np.uint8), 1, 1).item()
out[id2label_dict[str(i)]+'_compactness'] = compactness
return out
def get_compactness(mask, spacing_x, spacing_y):
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
perimeter = get_perimeter_from_contour(contours[0], spacing_x)
area = get_area(mask, spacing_x, spacing_y)
# print('perimeter',area, perimeter)
if perimeter != 0:
compactness = 4 * math.pi * area / (perimeter * perimeter)
else:
return np.array(-1)
return np.array(compactness)