import os import cv2 import numpy as np from PIL import Image # 基于感兴趣区域每个像素的体积叠加得到 def calculate_volume(mask_dir): # 读取mask图像 masks = [] for filename in os.listdir(mask_dir): image = Image.open(os.path.join(mask_dir, filename)) masks.append(np.array(image)) total_volume = 0 for mask in masks: # 计算mask图像高亮像素数量 highlighted_pixels = 0 for i in range(mask.shape[0]): for j in range(mask.shape[1]): if mask[i, j] > 0: highlighted_pixels += 1 # 转换为体积 volume = highlighted_pixels * 0.390625*0.390625*5 total_volume += volume print(f'基于像素计算得到的体积为{total_volume / 1000} ml') def calculate_volume2(mask_dir): spacing = [0.390625, 0.390625] thickness = 5 total_area = 0 for mask_name in os.listdir(mask_dir): mask_path = os.path.join(mask_dir, mask_name) mask = Image.open(mask_path) # 从mask获取轮廓信息 mask = np.array(mask) contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: area = cv2.contourArea(contour) area_mm2 = area * spacing[0] * spacing[1] total_area += area_mm2 volume = (total_area * thickness) / 1000 print(f'基于contourArea计算得到的体积为{volume} ml') if __name__ == '__main__': calculate_volume(r'F:\CTP三类\色条映射的测试数据和rapid对比结果\CAOCHENGJIEcbv30') calculate_volume2(r'F:\CTP三类\色条映射的测试数据和rapid对比结果\CAOCHENGJIEcbv30')
梗死核心体积验证
于 2023-05-05 17:34:19 首次发布