예제 #1
0
파일: seg_qc.py 프로젝트: yajing2018/DASH3R
def main(args):
    parser = parsefn()
    subj_dir, img, seg, gap, tile, alpha, ax, roi, flip, min_sl, out = parse_inputs(
        parser, args)

    # pred preprocess dir
    pred_dir = '%s/pred_process' % os.path.abspath(subj_dir)
    if not os.path.exists(pred_dir):
        os.mkdir(pred_dir)

    # trim seg to focus
    c3 = C3d()

    mosaic_slicer = CreateTiledMosaic()

    if seg:
        c3.inputs.in_file = seg
        c3.inputs.args = "-trim %sx%sx%svox" % (roi, roi, roi)
        seg_trim_file = "%s/%s_trim_mosaic.nii.gz" % (
            pred_dir, os.path.basename(seg).split('.')[0])
        # seg_trim_file = "seg_trim.nii.gz"
        c3.inputs.out_file = seg_trim_file
        c3.run()

        # trim struct like seg
        c3.inputs.in_file = seg_trim_file
        c3.inputs.args = "%s -reslice-identity" % img
        struct_trim_file = "%s/%s_trim_mosaic.nii.gz" % (
            pred_dir, os.path.basename(img).split('.')[0])
        # struct_trim_file = "struct_trim.nii.gz"
        c3.inputs.out_file = struct_trim_file
        c3.run()

        # create rgb image from seg
        converter = ConvertScalarImageToRGB()

        converter.inputs.dimension = 3
        converter.inputs.input_image = seg_trim_file
        converter.inputs.colormap = 'jet'
        converter.inputs.minimum_input = 0
        converter.inputs.maximum_input = 10
        out_rgb = "%s/%s_trim_rgb.nii.gz" % (
            pred_dir, os.path.basename(seg).split('.')[0])
        converter.inputs.output_image = out_rgb
        converter.run()

        mosaic_slicer.inputs.rgb_image = out_rgb
        mosaic_slicer.inputs.mask_image = seg_trim_file
        mosaic_slicer.inputs.alpha_value = alpha

    else:
        struct_trim_file = img

        mosaic_slicer.inputs.rgb_image = struct_trim_file

    # stretch and clip intensities
    c3.inputs.in_file = struct_trim_file
    c3.inputs.args = "-stretch 2% 98% 0 255 -clip 0 255"
    c3.inputs.out_file = struct_trim_file
    c3.run()

    # slices to show
    if gap == 1:
        max_sl = 100
    elif gap == 2:
        max_sl = 220
    elif gap == 5:
        max_sl = 275
    else:
        max_sl = 300

    slices = '[%s,%s,%s]' % (gap, min_sl, max_sl)

    mosaic_slicer.inputs.input_image = struct_trim_file

    mosaic_slicer.inputs.output_image = out
    mosaic_slicer.inputs.direction = ax
    # mosaic_slicer.inputs.pad_or_crop = '[ -15x -50 , -15x -30 ,0]'
    mosaic_slicer.inputs.tile_geometry = tile
    mosaic_slicer.inputs.slices = slices
    mosaic_slicer.inputs.flip_slice = flip
    mosaic_slicer.terminal_output = "none"
    mosaic_slicer.run()