estimate_blur¶
- pysaber.estimate_blur(rads, sod, odd, pix_wid, edge, thresh=1e-06, pad=[3, 3], masks=None, bdary_mask=5.0, perp_mask=5.0, power=1.0, save_dir='./', only_src=False, only_det=False, mix_det=True)¶
Estimate parameters of point spread functions (PSF) that model X-ray source blur and/or detector blur from normalized radiographs of a straight sharp edge or mutually perpendicular intersecting pair of sharp edges.
This function is used to estimate parameters of the PSFs that model X-ray source blur and/or detector blur. It takes as input the normalized radiographs at multiple source to object distances (SOD) and object to detector distances (ODD). If each radiograph has a single straight edge, then the measurement must be repeated for two different, preferably perpendicular, orientations of the edge. If the radiograph consists of two intersecting perpendicular edges, then a single radiograph at each specified SOD/ODD is sufficient. Simultaneous estimation of source and detector blur will require radiographs at a minimum of two different value pairs for SOD/ODD. During PSF parameter estimation, the influence of certain regions within each radiograph can be removed by masking. For more details, please read ahead and also refer to the documents listed in References.
- Parameters
rads (list) – List of radiographs, each of type numpy.ndarray, at various SODs and ODDs. Each radiograph must be normalized using the bright-field (also called flat-field) and dark-field images.
sod (list) – List of source to object distances (SOD), each of type float, at which each corresponding radiograph in the list
radswas acquired.odd (list) – List of object to detector distances (ODD), each of type float, at which each corresponding radiograph in the list
radswas acquired.pix_wid (float) – Effective width of each detector pixel. Note that this is the effective pixel size given by dividing the physical width of each detector pixel by the zoom factor of the optical lens.
edge (str) – Used to indicate whether there is a single straight edge or two mutually perpendicular edges in each radiograph. If
edgeisperpendicular, then each radiograph is assumed to have two mutually perpendicular edges. If it isstraight, then each radiograph is assumed to have a single straight edge. Onlyperpendicularandstraightare legal choices foredge.thresh (float) – Convergence threshold for the minimizer during parameter estimation. The iterations stop when the ratio of the reduction in the error function (cost value) and the magnitude of the error function is lower than
thresh. This is the parameterftolthat is specified in theoptionsparameter ofscipy.optimize.minimize. The optimizer used is L-BFGS-B. During joint estimation of source and detector blur, the convergence threshold for the minimizer during the first two initialization steps is ten times this value.pad (list) – List of two integers that determine the amount of padding that must be applied to the radiographs to reduce aliasing during convolution. The number of rows/columns after padding is equal to
pad_factor[0]/pad_factor[1]times the number of rows/columns in each radiograph before padding. For example, if the first element inpad_factoris2, then the radiograph is padded to twice its size along the first dimension.masks (list) – List of boolean masks, each of type numpy.ndarray and same shape as the radiograph, that is used to exclude pixels from blur estimation. This is in addition to the masking specified by
bdary_maskandperp_mask. An example use case is if some pixels in the radiographrads[i]are bad, then those pixels can be excluded from blur estimation by setting the corresponding entries inmasks[i]toFalseandTrueotherwise. If None, no user specified mask is used.bdary_mask (float) – Percentage of image region in the radiographs as measured from the outer edge going inwards that must be excluded from blur estimation. Pixels are excluded (or masked) beginning from the outermost periphery of the image and working inwards until the specified percentage of pixels is reached.
perp_mask (float) – Percentage of circular region to ignore during blur estimation around the intersecting corner of two perpendicular edges. Ignored if
edgeisstraight.power (float) – Shape parameter of the density function used to model each PSF. For example, choosing a value of one for
powercreates an exponential (Laplacian) density function. Choosing a value of two forpowercreates a Gaussian density function.save_dir (str) – Directory where estimated parameters are saved in yaml file format. Source blur parameters are saved in the file
source_params.ymlwithin the foldersave_dir. Similary, detector blur and transmission function parameters are saved asdetector_params.ymlandtransmission_params.yml.only_src (bool) – If
True, only estimate source blur parameters.only_det (bool) – If
True, only estimate detector blur parameters.mix_det (bool) – If
True, do not use mixture model for detector blur.
- Returns
Tuple of objects containing the estimated parameters. If estimating both source and detector blur parameters, returns the three element tuple (
src_pars,det_pars,tran_pars). If estimating only source blur parameters, returns the two element tuple (src_pars,tran_pars). If estimating only detector blur parameters, returns the two element tuple (det_pars,tran_pars).src_parsanddet_parsare python dictionaries.tran_parsis a list of lists.src_parscontains the estimated parameters of X-ray source PSF. It consists of several key-value pairs. The value for keysource_FWHM_x_axisis the full width half maximum (FWHM) of the source PSF along the x-axis (i.e., second numpy.ndarray dimension). The value for keysource_FWHM_y_axisis the FWHM of source PSF along the y-axis (i.e., first numpy.ndarray dimension). All FWHMs are for the source PSF in the plane of the X-ray source (and not the plane of the detector). The value for keycutoff_FWHM_multiplierdecides the non-zero spatial extent of the source PSF. The PSF is clipped to zero beginning at a distance, as measured from the PSF’s origin, equal to the maximum ofsrc_pars['cutoff_FWHM_multiplier']timessrc_pars['source_FWHM_x_axis']/2andsrc_pars['cutoff_FWHM_multiplier']timessrc_pars['source_FWHM_y_axis']/2.det_parscontains estimated parameters of detector PSF. It consists of several key-value pairs. The value for keydetector_FWHM_1is the FWHM of the first density function in the mixture density model for detector blur. The first density function is the most dominant part of detector blur. The value for keydetector_FWHM_2is the FWHM of the second density function in the mixture density model. This density function has the largest FWHM and models the long running tails of the detector blur’s PSF. The value for keydetector_weight_1is between0and1and is a measure of the amount of contribution of the first density function to the detector blur. The values for keyscutoff_FWHM_1_multiplierandcutoff_FWHM_2_multiplierdecide the non-zero spatial extent of the detector PSF. The PSF is clipped to zero beginning at a distance, as measured from the PSF’s origin, equal to the maximum ofdet_pars['cutoff_FWHM_1_multiplier']timesdet_pars['detector_FWHM_1']/2anddet_pars['cutoff_FWHM_2_multiplier']timesdet_pars['detector_FWHM_2']/2. Ifmix_detisFalse, then value for keydetector_weight_1is fixed at1and value for keydetector_FWHM_2is fixed at0.tran_parscontains estimated parameters of the transmission function for each input radiograph. This return value is a list of lists, where each inner nested list consists of two parameters of type float. These float values give the low and high values respectively of the transmission function. The number of nested lists in the returned list equals the number of input radiographs. Note that the transmission function is the normalized radiograph image that would have resulted in the absence of blur and noise.- Return type
tuple