Exemple #1
0
def run(config):
    # Load options
    file_path = config.file_path
    g_path = config.g_path
    d_path = config.d_path

    # Initial values
    g_reapeat_num = 6
    d_reapeat_num = 6
    c_dim = 2
    g_conv_dim = 64
    image_size = 256
    d_conv_dim = 64

    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

    # Make generator netwrok and disciminator
    G = Generator(g_conv_dim, c_dim, g_reapeat_num).to(device)
    D = Discriminator(image_size, d_conv_dim, c_dim, d_reapeat_num).to(device)

    # Load Networks
    G.load(g_path)
    D.load(d_path)

    # Load X-ray image
    image = Image.open(file_path)
    w, h = image.size
    image = np.array(image.getdata()).reshape(w, h, 3)
    image = image.mean(axis=2).reshape(1, 1, w, h)
    image = normalizatrion(image)

    input_image = torch.from_numpy(image).type(torch.FloatTensor).to(device)

    # Generate target vector
    Target_normal = torch.tensor(np.array([[[0], [1]]]))
    Target_normal = Target_normal.type(torch.FloatTensor).to(device)

    # Synthesis to normal image
    Normal_image = G(input_image, Target_normal)

    # Make lesionmap
    # calculate difference input and output
    lesion_map = input_image - Normal_image[0]
    lesion_map = to_image(lesion_map[0], c=1)
    lesion_map = cv2.applyColorMap(lesion_map, cv2.COLORMAP_JET)

    input_img = to_image(input_image[0], c=3)
    normal_img = to_image(Normal_image[0], c=3)
    synthesis_img = (input_image * 0.7 + lesion_map * 0.3).astype(np.uint8)

    subject_image = cv2.hconcat(
        [input_img, lesion_map, normal_img, synthesis_img])
    plt.imshow(subject_image)
    plt.show()