程序是基于Python的
刚开始做配准的图像时的标签计算dice和iou
整幅图像也可以计算,不过只能计算非背景区域的
import cv2
import numpy as np
def DSC(pred, target):
smooth = 1e-5
m1 = pred.flatten()#打平
m2 = target.flatten()
intersection = (m1 * m2).sum()
dsc = (2. * intersection ) / (m1.sum() + m2.sum() + smooth)
return dsc
def IOU(pred, target):
smooth = 1e-5
m1 = pred.flatten()#打平
m2 = target.flatten()
intersection = (m1 * m2).sum()
dsc = intersection / (m1.sum() + m2.sum() - intersection)
return dsc
def compute_label_dice(gt, pred):
# 需要计算的标签类别,不包括背景和图像中不存在的区域
cls_lst = [255]
dice_lst = []
for cls in cls_lst:
dice = DSC(pred==cls, gt==cls)
dice_lst.append(dice)
return np.mean(dice_lst), dice_lst
def compute_label_IOU(gt, pred):
cls_lst = [255]
IOU_lst = []
for cls in cls_lst:
dice = IOU(pred==cls, gt==cls)
IOU_lst.append(dice)
return np.mean(IOU_lst)
from PIL import Image, ImageSequence
im = Image.open("image1.gif") # 使用Image的open函数打开test.gif图像
for frame in ImageSequence.Iterator(im): # for循环迭代的取im里的帧
frame.save("image1.png") # 取到一个帧调用一下save函数保存,每次保存明明为frameX.png
image_original = cv2.imread("image1.png",cv2.IMREAD_GRAYSCALE)
image_original = np.array(image_original)
image_warped = cv2.imread("image2.jpg",cv2.IMREAD_GRAYSCALE)
image_warped = np.array(image_warped)
print(type(image_original), image_original.shape)
print(type(image_warped), image_warped.shape)
dsc, dice_lst_1D = compute_label_dice( image_original, image_warped)
iou = compute_label_IOU(image_original, image_warped)
print("Dice", dsc)
print("IOU", iou)