1111
1212import brainbuilder .utils .ants_nibabel as nib
1313from brainbuilder .interp .acqvolume import create_thickened_volumes
14- from brainbuilder .utils .nl_deformation_flow import nl_deformation_flow_3d
14+ from brainbuilder .utils .nl_deformation_flow import nlflow_isometric
1515from brainbuilder .volalign import align_3d , verify_chunk_limits
1616
1717
@@ -80,81 +80,6 @@ def _interpolate_missing_sections(
8080 return vol_interp
8181
8282
83- def nl_deformation_flow_nii (acq_fin , output_dir , interp_acq_fin , clobber = False ):
84- if not os .path .exists (interp_acq_fin ) or clobber :
85- """
86- Process the acq volume by applying non-linear deformation flow.
87-
88- Parameters
89- ----------
90- acq_fin : str
91- Path to the acq volume file.
92- output_dir : str
93- Directory to save the output files.
94- clobber : bool, optional
95- If True, overwrite existing files. The default is False.
96-
97- Returns
98- -------
99- str
100- Path to the processed acq volume file.
101- """
102- acq_img = nib .load (acq_fin )
103- acq_vol = acq_img .get_fdata ()
104- acq_vol [acq_vol < 0 ] = 0
105-
106- origin = list (acq_img .affine [[0 , 2 ], 3 ])
107- spacing = list (acq_img .affine [[0 , 2 ], [0 , 2 ]])
108-
109- interp_acq_vol = nl_deformation_flow_3d (
110- acq_vol ,
111- output_dir + "/nl_flow/" ,
112- origin = origin ,
113- spacing = spacing ,
114- clobber = clobber ,
115- )
116-
117- interp_acq_img = nib .Nifti1Image (
118- interp_acq_vol , acq_img .affine , direction_order = "lpi"
119- )
120- interp_acq_img .to_filename (interp_acq_fin )
121-
122-
123- def resample_interp_vol_to_resolution (
124- interp_acq_orig_fin ,
125- interp_acq_iso_fin : str ,
126- resolution : float ,
127- clobber : bool = False ,
128- ) -> np .array :
129- """Resample the interpolated volume to the specified resolution.
130- Parameters
131- ----------
132- interp_acq_vol : np.array
133- Interpolated volume.
134- acq_img : nib.Nifti1Image
135-
136- """
137- if not os .path .exists (interp_acq_iso_fin ) or clobber :
138- interp_acq_img = nib .load (interp_acq_orig_fin ) # type:ignore[assignment]
139- interp_acq_vol = interp_acq_img .get_fdata ()
140-
141- slice_thickness = interp_acq_img .affine [1 , 1 ]
142-
143- y_new = int (np .round (interp_acq_vol .shape [1 ] / (resolution / slice_thickness )))
144-
145- interp_acq_vol = resize (
146- interp_acq_vol ,
147- (interp_acq_vol .shape [0 ], y_new , interp_acq_vol .shape [2 ]),
148- order = 1 ,
149- )
150-
151- aff_iso = interp_acq_img .affine
152-
153- aff_iso [1 , 1 ] = resolution
154-
155- nib .Nifti1Image (interp_acq_vol , aff_iso , direction_order = "lpi" ).to_filename (
156- interp_acq_iso_fin
157- )
15883
15984
16085def volumetric_interpolation (
@@ -210,20 +135,15 @@ def volumetric_interpolation(
210135 chunk_info_thickened = pd .read_csv (chunk_info_thickened_csv )
211136
212137 print (f"Interpolation Chunk: { chunk } , Acquisition: { acq } " )
138+ cls_fin = chunk_info_thickened ["thickened_cls" ].values [0 ]
213139 acq_fin = chunk_info_thickened ["thickened" ].values [0 ]
214140
215- interp_acq_iso_fin = acq_fin .replace ("thickened" , "interp-vol_iso" )
216- interp_acq_fin = acq_fin .replace ("thickened" , "interp-vol_orig" )
141+ interp_acq_iso_fin , nlflow_tfm_list = nlflow_isometric (acq_fin , curr_output_dir , resolution , clobber = clobber )
217142
218- print ("Resampling" , interp_acq_fin )
219- nl_deformation_flow_nii (
220- acq_fin , curr_output_dir , interp_acq_fin , clobber = clobber
221- )
143+ interp_cls_iso_fin = nlflow_isometric (
144+ cls_fin , curr_output_dir , resolution , tfm_list = nlflow_tfm_list , clobber = clobber
145+ )
222146
223- print ("Resampling" , interp_acq_iso_fin )
224- resample_interp_vol_to_resolution (
225- interp_acq_fin , interp_acq_iso_fin , resolution , clobber = clobber
226- )
227147
228148 row = pd .DataFrame (
229149 {
@@ -232,6 +152,7 @@ def volumetric_interpolation(
232152 "chunk" : [chunk ],
233153 "acquisition" : [acq ],
234154 "interp_nat" : [interp_acq_iso_fin ],
155+ "interp_cls_nat" : [interp_cls_iso_fin ],
235156 }
236157 )
237158
0 commit comments