Source code for unravel.register.bias_correct
#!/usr/bin/env python3
"""
Use ``reg_bias_correct`` or ``bias_corr`` from UNRAVEL to apply N4 bias field correction to an .nii.gz image.
Note:
- No padding or registration is performed.
Usage:
------
bias_corr -i <template.nii.gz> -o <output.nii.gz> [-mas <mask.nii.gz>] [-v]
"""
import ants
import nibabel as nib
import numpy as np
from pathlib import Path
from rich import print
from rich.traceback import install
from unravel.core.help_formatter import RichArgumentParser, SuppressMetavar, SM
from unravel.core.img_io import save_as_nii
from unravel.core.utils import log_command
from unravel.register.reg import bias_correction
[docs]
def parse_args():
parser = RichArgumentParser(formatter_class=SuppressMetavar, add_help=False, docstring=__doc__)
reqs = parser.add_argument_group("Required arguments")
reqs.add_argument("-i", "--input", required=True, help="Input image.nii.gz", action=SM)
reqs.add_argument("-o", "--output", required=True, help="Output bias-corrected image.nii.gz", action=SM)
opts = parser.add_argument_group("Optional arguments")
opts.add_argument( "-mas", "--mask", help="Optional brain mask for bias correction. Default: None", default=None, action=SM)
opts.add_argument( "-sf", "--shrink_factor", help="Shrink factor for N4 bias correction. Default: 2", type=int, default=2, action=SM )
general = parser.add_argument_group("General arguments")
general.add_argument("-v", "--verbose", action="store_true", default=False)
return parser.parse_args()
[docs]
@log_command
def main():
install()
args = parse_args()
input_path = Path(args.input)
if not input_path.exists():
raise FileNotFoundError(f"Input image not found: {input_path}")
print(f"\n[bold]Bias correcting template:[/bold] {input_path.name}")
if args.mask is None or args.mask == "None":
img_bias_corrected = bias_correction(str(input_path), mask_path=None, shrink_factor=args.shrink_factor, verbose=args.verbose)
else:
mask_path = Path(args.mask)
if not mask_path.exists():
raise FileNotFoundError(f"Mask not found: {mask_path}")
img_bias_corrected = bias_correction(str(input_path), mask_path=str(mask_path), shrink_factor=args.shrink_factor, verbose=args.verbose)
# Convert back to NIfTI
output_path = Path(args.output)
save_as_nii(img_bias_corrected, output_path, reference=input_path)
if __name__ == "__main__":
main()