コード例 #1
0
def run(input_dir, phantom, suffix=".raw", output_dir="../data/simresults"):
    """
    Compute the variance in three ROIs of several volumes in the given input
    directory. Pass a suffix if desired.
    Run this in in scripts/ if no output_dir specified.
        phantom | string, prefix to output filename
    """
    from constants import NOISELEVEL_FILE
    OUTPUT_FNAME = NOISELEVEL_FILE.format(phantom)
    raw_files = [f for f in os.listdir(input_dir) if f.endswith(suffix)]

    d = OrderedDict()

    for f in tqdm(sorted(raw_files)):
        img = np.fromfile(
                os.path.join(input_dir, f),
                dtype=np.float16).reshape((250, 512, 311))
        variances = compute_var_from_volume(img)
        # Fetch frame and flux info from filename.
        filtermode = find_filtermode(f)
        frms = f[:3]
        flux = f[8:13]
        d[f] = (filtermode, frms, flux) + variances

    if d:
        outpath = os.path.join(output_dir, OUTPUT_FNAME)
        # output file will be sorted because first loop runs over sorted filenames.
        write_header = not os.path.exists(outpath)
        with open(outpath, 'a+') as f:
            if write_header:
                f.write("#fmode,fmrs,flux,var1,var2,var3\n")
            for vtuple in d.values():
                # CSV style
                f.write("{},{},{},{},{},{}\n".format(*vtuple))
コード例 #2
0
EDGESHARPNESS_INPUT_DIR = VOLUME_OUTPUT_DIR
EDGESHARPNESS_OUTPUT_DIR = "../data/simresults"
EDGESHARPNESS_FILEPATH = os.path.join(
        EDGESHARPNESS_OUTPUT_DIR, 
        EDGESHARPNESS_FILE.format(
            PHANTOM_NAME+"-tv",
            EDGESHARPNESS_ROI_NAME,
            EDGESHARPNESS_PREFILTER_SIGMA 
            )
        )

NOISELEVEL_OUTPUT_DIR = "../data/simresults"
NOISELEVEL_FILEPATH = os.path.join(
        NOISELEVEL_OUTPUT_DIR,
        NOISELEVEL_FILE.format(PHANTOM_NAME+"-tv")
        )

RMSE_INPUT_DIR = PHANTOM_INPUT_DIR 
RMSE_OUTPUT_DIR = "../data/simresults"
RMSE_GROUND_TRUTH_PATH = os.path.join(RMSE_INPUT_DIR, RMSE_GROUND_TRUTH_FILE)
RMSE_MASK_PATH = os.path.join(RMSE_INPUT_DIR, RMSE_MASK_FILE)
# Ground truth and mask data needs to be loaded only once.
RMSE_GROUND_TRUTH = np.fromfile(RMSE_GROUND_TRUTH_PATH, dtype=np.float32)
RMSE_MASK = np.fromfile(RMSE_MASK_PATH, dtype=np.uint8)
RMSE_FILEPATH = os.path.join(
        RMSE_OUTPUT_DIR,
        RMSE_FILE.format(PHANTOM_NAME+"-tv")
        )

# For single test run.
コード例 #3
0
ファイル: cl_postfilter.py プロジェクト: pylipp/mscthesis
def run(input_dir, phantom, save_volume, 
        suffix="_0filter_fdk.raw",
        es_params=None,
        compute_noise_level=False,
        output_dir="../data/simresults",
        **bf_kwargs
        ):
    """ 
    Run postfilter routine on all files in input_dir that have the specified
    suffix. 
        phantom | str, prefix for analysis files 
        save_volume | bool, whether to save the postfiltered volume or not 
        es_params | None or tuple(roi_name, sigma)
        output_dir | Run this in scripts/ if not specified 
        bf_kwargs | sigmaISq, sigmaP, spacing, kernelScaling
    """
    raw_nofilter_files = [f for f in listdir(input_dir) if f.endswith(suffix)]

    COMPUTE_EDGESHARPNESS = es_params is not None 
    COMPUTE_ROI_VARIANCE = compute_noise_level

    if COMPUTE_EDGESHARPNESS:
        EDGESHARPNESS_FILEPATH = os.path.join(output_dir,
                EDGESHARPNESS_FILE.format(phantom, *es_params))
    ROI_VARIANCES_FILEPATH = os.path.join(output_dir, NOISELEVEL_FILE.format(phantom))

    for i,file in tqdm(enumerate(raw_nofilter_files)):
        # convert to float32 because pyopencl cannot handle float16.
        img_in = np.fromfile(
                os.path.join(input_dir, file), 
                dtype=np.float16).reshape((250,512,311)).astype(np.float32)
        img_out = _apply_bilateral_filter(img_in, queue, **bf_kwargs)

        # Analysis
        if COMPUTE_ROI_VARIANCE:
            variances = compute_var_from_volume(img_out)
            write_header = not os.path.exists(ROI_VARIANCES_FILEPATH)
            with open(ROI_VARIANCES_FILEPATH, 'a+') as rvf:
                if write_header:
                    rvf.write("#fmode,fmrs,flux,var1,var2,var3\n")
                rvf.write("{},{},{},{},{},{}\n".format(
                    2,
                    file[:3],
                    file[8:13],
                    *variances 
                    )
                )
        if COMPUTE_EDGESHARPNESS:
            es, esd = compute_es_from_volume(img_out, *es_params[::-1])
            write_header = not os.path.exists(EDGESHARPNESS_FILEPATH)
            with open(EDGESHARPNESS_FILEPATH, 'a+') as esf:
                if write_header:
                    esf.write("#fmode,frms,flux,shrpns,uncrty\n")
                esf.write("{},{},{},{},{}\n".format(
                    2, # post filtermode
                    file[:3],
                    file[8:13],
                    es,
                    esd
                    )
                )
        if save_volume:       
            # volume output directory is the input directory, i.e. on the server.
            img_out.astype(np.float16).tofile(
                    os.path.join(
                        input_dir,
                        file.replace(suffix, "_2filter_fdk.raw")))
コード例 #4
0
PHANTOM_FILE = PHANTOMS[PHANTOM_NAME]["rawfile"]
PHANTOM_FILEPATH = os.path.join(PHANTOM_INPUT_DIR, PHANTOM_FILE)
IR_SCALING = PHANTOMS[PHANTOM_NAME]["ir_scaling"]

FDK_SCALING_FILE = "fdk_postscaling.dat"
FDK_SCALING_FILEPATH = os.path.join(VOLUME_OUTPUT_DIR, FDK_SCALING_FILE)

EDGESHARPNESS_INPUT_DIR = VOLUME_OUTPUT_DIR
EDGESHARPNESS_OUTPUT_DIR = "../data/simresults"
EDGESHARPNESS_FILEPATH = os.path.join(
    EDGESHARPNESS_OUTPUT_DIR,
    EDGESHARPNESS_FILE.format(PHANTOM_NAME, EDGESHARPNESS_ROI_NAME, EDGESHARPNESS_PREFILTER_SIGMA),
)

NOISELEVEL_OUTPUT_DIR = "../data/simresults"
NOISELEVEL_FILEPATH = os.path.join(NOISELEVEL_OUTPUT_DIR, NOISELEVEL_FILE.format(PHANTOM_NAME))


# For single test run.
"""
PARAMETERS = {
        "CBSIMULATION": {
            "FRAMES": (479,),
            "FLUX": (5e7,),
            "NOISE": (True, )
            },
        "FILTERING": {
            "MODE": ("no",)
            },
        "RECO": {
            "MODE": ("FDK", ), 
コード例 #5
0
EDGESHARPNESS_INPUT_DIR = VOLUME_OUTPUT_DIR
EDGESHARPNESS_OUTPUT_DIR = "../data/simresults"
EDGESHARPNESS_FILEPATH = os.path.join(
        EDGESHARPNESS_OUTPUT_DIR, 
        EDGESHARPNESS_FILE.format(
            PHANTOM_NAME+"-mlem",
            EDGESHARPNESS_ROI_NAME,
            EDGESHARPNESS_PREFILTER_SIGMA 
            )
        )

NOISELEVEL_OUTPUT_DIR = "../data/simresults"
NOISELEVEL_FILEPATH = os.path.join(
        NOISELEVEL_OUTPUT_DIR,
        NOISELEVEL_FILE.format(PHANTOM_NAME+"-mlem")
        )


# For single test run.
"""
PARAMETERS = {
        "CBSIMULATION": {
            "FRAMES": (479,),
            "FLUX": (5e7,),
            "NOISE": (True, )
            },
        "FILTERING": {
            "MODE": ("no",)
            },
        "RECO": {
コード例 #6
0
EDGESHARPNESS_INPUT_DIR = VOLUME_OUTPUT_DIR
EDGESHARPNESS_OUTPUT_DIR = "../data/simresults"
EDGESHARPNESS_FILEPATH = os.path.join(
        EDGESHARPNESS_OUTPUT_DIR, 
        EDGESHARPNESS_FILE.format(
            PHANTOM_NAME+"-sirt",
            EDGESHARPNESS_ROI_NAME,
            EDGESHARPNESS_PREFILTER_SIGMA 
            )
        )

NOISELEVEL_OUTPUT_DIR = "../data/simresults"
NOISELEVEL_FILEPATH = os.path.join(
        NOISELEVEL_OUTPUT_DIR,
        NOISELEVEL_FILE.format(PHANTOM_NAME+"-sirt")
        )

RMSE_INPUT_DIR = PHANTOM_INPUT_DIR 
RMSE_OUTPUT_DIR = "../data/simresults"
RMSE_GROUND_TRUTH_PATH = os.path.join(RMSE_INPUT_DIR, RMSE_GROUND_TRUTH_FILE)
RMSE_MASK_PATH = os.path.join(RMSE_INPUT_DIR, RMSE_MASK_FILE)
# Ground truth and mask data needs to be loaded only once.
RMSE_GROUND_TRUTH = np.fromfile(RMSE_GROUND_TRUTH_PATH, dtype=np.float32)
RMSE_MASK = np.fromfile(RMSE_MASK_PATH, dtype=np.uint8)
RMSE_FILEPATH = os.path.join(
        RMSE_OUTPUT_DIR,
        RMSE_FILE.format(PHANTOM_NAME+"-sirt")
        )

# For single test run.