[docs]classZonePlate(Subject):"""Synthetic data generated from a zone plate. The zone plate is a circular diffraction grating that produces concentric rings of light and dark bands. This dataset is useful for testing image processing algorithms, particularly those related to frequency analysis and interpolation. See equation 10.63 in `Practical Handbook on Image Processing for Scientific Applications <https://www.routledge.com/Practical-Handbook-on-Image-Processing-for-Scientific-and-Technical-Applications/Jahne/p/book/9780849319006?srsltid=AfmBOoptrtzILIlMx9FYqvx6UrGbevfD66x2k242iprFdn_CfyOWXjjH>`_ by Bernd Jähne. Args: size: The size of the generated image along all dimensions. """def__init__(self,size:int=501):ifsize<3:raiseValueError('Size must be at least 3.')self.size=sizeimage=self._generate_image(size)super().__init__(image=image)@staticmethoddef_generate_image(size:int)->ScalarImage:ifsize%2==1:fin=(size-1)//2ini=-finelse:fin=size//2ini=-fin+1x=np.arange(ini,fin)y=np.arange(ini,fin)z=np.arange(ini,fin)X,Y,Z=np.meshgrid(x,y,z)r=np.sqrt(X**2+Y**2+Z**2)km=0.8*np.pirm=iniw=rm/10term1=np.sin((km*r**2)/(2*rm))term2=0.5*np.tanh((rm-r)/w)+0.5g=term1*term2affine=np.eye(4)origin=np.array([ini,ini,ini])affine[:3,3]=originreturnScalarImage(tensor=g[np.newaxis],affine=affine)