[docs]classSharpnessEstimation(Algorithm):"""Calculate sharpness of the normalized iris. The goal of this algorithm is to calculate the sharpness of the normalized iris using the variance of Laplacian. LIMITATIONS: This method may be biased against dark images with inadequate lighting. """
[docs]classParameters(Algorithm.Parameters):"""Parameters class for SharpnessEstimation objects. lap_ksize (int): Laplacian kernel size, must be odd integer no larger than 31. erosion_ksize (Tuple[int, int]): Mask erosion kernel size, must be odd integers. """lap_ksize:int=Field(...,gt=0,le=31)erosion_ksize:Tuple[int,int]=Field(...,gt=0)_is_odd0=validator("lap_ksize",allow_reuse=True)(pydantic_v.is_odd)_is_odd=validator("erosion_ksize",allow_reuse=True,each_item=True)(pydantic_v.is_odd)
__parameters_type__=Parametersdef__init__(self,lap_ksize:int=11,erosion_ksize:Tuple[int,int]=(29,15),callbacks:List[Callback]=[],)->None:"""Assign parameters. Args: lap_ksize (int, optional): kernal size for Laplacian. Defaults to 11. erosion_ksize (Tuple[int, int], optional): kernal size for mask erosion. Defaults to (29,15). callbacks (List[Callback]): callbacks list. Defaults to []. """super().__init__(lap_ksize=lap_ksize,erosion_ksize=erosion_ksize,callbacks=callbacks)
[docs]defrun(self,normalization_output:NormalizedIris)->Sharpness:"""Calculate sharpness of the normalized iris. Args: normalization_output (NormalizedIris): Normalized iris. Returns: Sharpness: Sharpness object. """output_im=cv2.Laplacian(normalization_output.normalized_image/255,cv2.CV_32F,ksize=self.params.lap_ksize)mask_im=cv2.erode(normalization_output.normalized_mask.astype(np.uint8),kernel=np.ones(self.params.erosion_ksize,np.uint8))sharpness_score=output_im[mask_im==1].std()ifnp.sum(mask_im==1)>0else0.0returnSharpness(score=sharpness_score)