
    2VhR                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 dZddZddZdd	Z	 	 	 	 	 	 	 dd
Zd Zd Zd Zd Zd ddZh dZ	 	 	 	 ddZ	 	 	 ddZd Zh dZ	 ddZ	 ddZ	 	 	 	 	 	 	 ddZy)    N)backend)convert_to_tensor)	draw_seed)scipy)bilinearnearestlanczos3lanczos5bicubicc                    t        |       } t        j                  |      }|dk(  rdnd}t        | j                        dvrt        d| j                         | j                  }t        j                  | j                  t              }| j                  |      } t        j                  g d| j                        }t        j                  | ||df      }t        j                  ||	      }|j                  |      S )
Nchannels_last      yInvalid images rank: expected rank 3 (single image) or rank 4 (batch of images). Received input with shape: images.shape=)gŏ1w-!?gbX9?gv/?dtypeaxesaxis)r   r   standardize_data_formatlenshape
ValueErrorr   result_typefloatastypenparray	tensordotexpand_dims)imagesdata_formatchannels_axisoriginal_dtypecompute_dtypergb_weights
grayscaless          M/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/numpy/image.pyrgb_to_grayscaler-      s    v&F11+>K%8BbM
6<<&"LL>+
 	
 \\N''e<M]]=)F ((36<<HKfk8KLJ
?J^,,    c                    t        |       } t        j                  | j                        }t        j                  |      }|dk(  rdnd}t        | j                        dvrt        d| j                         t        j                  |      st        d|       t        j                  |      j                  }t        j                  t        j                  |       |k  d|       } t        j                  | d|      \  }}}t        j                   ||      }t        j                   ||      }t        j                   ||      }d	 }t        j"                   ||||      |
      } | j%                  |      S )Nr   r   r   r   r   CInvalid images dtype: expected float dtype. Received: images.dtype=        r   c                 z   t        j                  t        j                  | |      |      }t        j                  t        j                  | |      |      }||z
  }t        j                  |dkD  |d      }t        j                  |dkD  |d      }t        j                  |dkD  ||z  d      }dd|z  z  }	t        j                  ||k(  |	|| z
  z  dz   |	| |z
  z  dz         }
t        j                  || k(  |	||z
  z  |
      }
t        j                  |dkD  |
d      |
dk  j	                  |
j
                        z   }
|
||fS )Nr         ?r1         @gUUUUUU?gUUUUUU?)r!   maximumminimumwherer    r   )rgbvaluer6   range_
safe_value
safe_range
saturationnormhues              r,   rgb_planes_to_hsv_planesz,rgb_to_hsv.<locals>.rgb_planes_to_hsv_planes@   s'   

2::a+Q/**RZZ1-q1XXeai4
XXfqj&#6
XXeai*)<cB
cJ&'hhQJAENY&AENY&

 hhuz41q5>37hhvz3,c	/A/A#))/LLJ%%r.   r   )r   r   standardize_dtyper   r   r   r   r   is_float_dtype	ml_dtypesfinfoepsr!   r7   abssplitsqueezestackr    )	r%   r&   r   r'   rG   redgreenbluerB   s	            r,   
rgb_to_hsvrO   (   sM   v&F%%fll3E11+>K%8BbM
6<<&"LL>+
 	

 !!%(&&+W.
 	
 //%
 
$
$CXXbffVns*C8Fxx=9C
**S-
(CJJum,E::dM*D&( XX eT2F ==r.   c                 V   t        |       } | j                  }t        j                  |      }|dk(  rdnd}t	        | j
                        dvrt        d| j
                         t        j                  |      s!t        dt        j                  |             t        j                  | d|      \  }}}t        j                  ||      }t        j                  ||      }t        j                  ||      }d }t        j                   ||||      |	      } | j                  |      S )
Nr   r   r   r   r   r0   r   c                    t        j                  | d      dz  }t        j                  t        j                  |dz
        dz
  dd      }t        j                  dt        j                  |dz
        z
  dd      }t        j                  dt        j                  |dz
        z
  dd      }d|z
  }||||z  z   z  }||||z  z   z  }	||||z  z   z  }
||	|
fS )Nr3   r4         @r1          @      @)r!   modcliprH   )rA   r?   r;   dhdrdgdbone_minus_srL   rM   rN   s              r,   hsv_planes_to_rgb_planesz,hsv_to_rgb.<locals>.hsv_planes_to_rgb_planesp   s    VVC#WWRVVBH%+S#6WWS266"s(++S#6WWS266"s(++S#6J&{Z"_45zB67j2o56E4r.   r   )r   r   r   r   r   r   r   rD   rC   r!   rI   rJ   rK   r    )r%   r&   r   r'   rA   r?   r;   r\   s           r,   
hsv_to_rgbr]   Z   s   v&FLLE11+>K%8BbM
6<<&"LL>+
 	

 !!%(&&-&?&?&F%GI
 	
  XXfa?CU
**S-
(CJ6JJJum,E
  XX j%8}F ==r.   c	           
      t   t        j                  |      }|t        vrt        dt         d|       |dk7  rt        d|       |r|rt        d      t	        |      dk(  st        d|       t        |      }|\  }	}
t	        | j                        dk(  rL|d	k(  r%| j                  d
   f|z   | j                  d   fz   }n| j                  d
   | j                  d   f|z   }n]t	        | j                        dk(  r-|d	k(  r|| j                  d   fz   }n,| j                  d
   f|z   }nt        d| j                         |rM| j                  }|d	k(  r|d   |d   }}n
|d   |d   }}t        t        ||	z        |
z        }t        t        ||      d      }t        t        ||
z        |	z        }t        t        ||      d      }t        t        ||z
        dz        }t        t        ||z
        dz        }|d	k(  rGt	        | j                        dk(  r| d d |||z   |||z   d d f   } nv| |||z   |||z   d d f   } n`t	        | j                        dk(  r| d d d d |||z   |||z   f   } n/| d d |||z   |||z   f   } n|r| j                  }| j                  d
   }|d	k(  r|d   |d   |d   }}}n|d   |d   |d   }}}t        t        ||	z        |
z        }t        ||      }t        t        ||
z        |	z        }t        ||      }t        t        ||z
        dz        }t        t        ||z
        dz        }|d	k(  r|d
kD  rt	        | j                        dk(  rht        j                  t        j                  ||||f| j                        |z  | t        j                  ||||f| j                        |z  gd      }nt        j                  t        j                  |||f| j                        |z  | t        j                  |||f| j                        |z  gd
      }nd|d
kD  rt	        | j                        dk(  rht        j                  t        j                  ||||f| j                        |z  | t        j                  ||||f| j                        |z  gd      }nt        j                  t        j                  |||f| j                        |z  | t        j                  |||f| j                        |z  gd      }ny| }nu|d
kD  rt	        | j                        dk(  rPt        j                  t        j                  ||||f      |z  | t        j                  ||||f      |z  gd      }nt        j                  t        j                  |||f      |z  | t        j                  |||f      |z  gd      }n|d
kD  rt	        | j                        dk(  rOt        j                  t        j                  ||||f      |z  | t        j                  ||||f      |z  gd      }nOt        j                  t        j                  |||f      |z  | t        j                  |||f      |z  gd      }n| }|} t        | |||      S )N<Invalid value for argument `interpolation`. Expected of one . Received: interpolation=constantz\Invalid value for argument `fill_mode`. Only `'constant'` is supported. Received: fill_mode=zIOnly one of `pad_to_aspect_ratio` & `crop_to_aspect_ratio` can be `True`.   zPArgument `size` must be a tuple of two elements (height, width). Received: size=r   r   r   r      r   r   r   r   r   )method	antialias)r   r   RESIZE_INTERPOLATIONSr   r   tupler   intr   maxminr!   concatenateonesr   _resize)r%   sizeinterpolationrf   crop_to_aspect_ratiopad_to_aspect_ratio	fill_mode
fill_valuer&   target_heighttarget_widthr   heightwidthcrop_height
crop_widthcrop_box_hstartcrop_box_wstart
batch_sizechannels
pad_height	pad_widthimg_box_hstartimg_box_wstart
padded_imgs                            r,   resizer      s    11+>K11J$%%?P
 	
 J11:=
 	
 3
 	
 t9>//3f6
 	
 ;D"&M<
6<<A/)LLO%,R0@/BBDLLOV\\!_5<D	V\\	a	/)6<<+--DLLO%,D"LL>+
 	
 /)!"IuRyEF!"IuRyEF% 56EF#fk2A6v45EF
UJ/3
eF[$89A=>eEJ$67!;</)6<< A%#o&CC#o
&BB  #o&CC#o
&BB 6<< A%#o&CC#o
&BBD  #o&CC#o
&BBD
 
\\!_
/)&+BirE"I8EF&+BirE"IefHu}45DE
,
f|34}DE	y)	U:#67!;<U9u#459:/)!v||$)!#GG!+^UH M&,ll )	)
 #GG!+^UH M&,ll )	) "J" "$GG!/ A&,ll )	)
 #GG!/ A&,ll )	) "J   !#v||$)!#GG!+V^X N&,ll )	)
 #GG!+V^X N&,ll )	) "J" "$GG!' B&,ll )	)
 #GG!' B&,ll )	) "J" $
!v||$)!#GG!+X~u M )) #GG!+X~u M ))
 "J "$GGX~u$EF()"GGX~u$EF()	 	"J  !#v||$)!#GG!+Xv~ N )) #GG!+Xv~ N ))
 "J "$GGXv~$FG()"GGXv~$FG()	 	"J $
64KKr.   c                 P   t        j                  ||      }d|z  }|rt        j                  |d      nd}t        j                  ||      dz   |z  ||z  z
  dz
  }	t        j                  |	t         j
                  d d f   t        j                  | |      d d t         j
                  f   z
        |z  }
 ||
      }t        j                  |dd      }t        j                  t        j                  |      dt        j                  t         j                        j                  z  kD  t        j                  |t        j                  |dk7  |d            d      }| dz
  }t        j                  t        j                  |	d	k\  |	|k        t         j
                  d d f   |d      S )
Nr3   r         ?r   T)r   keepdimsg     @@rc         )r!   r   r5   arangerH   newaxissumr7   rF   float32rG   dividelogical_and)
input_sizeoutput_sizescaletranslationkernelrf   r   	inv_scalekernel_scalesample_fxweightstotal_weight_suminput_size_minus_0_5s                 r,   compute_weight_matr   r  s    NN5+.EeI1:2::i-L 
;e	,s	2i?
	
!	"
	  	RZZ]#ii
%0BJJ?@	
 		  QiGvvgA=hh
 6BHHRZZ,@,D,D#DD
		RXX.!35EqI	
 	
G &+88
x4'5I)IJJJM	
 		 r.   c           
         
 d }d }d 
|dk(  rt               S |dk(  r|}n)|dk(  r
fd}n|dk(  r
fd	}n|d
k(  r|}nt        d      t         fdt        t	                    D              }|D cg c]+  } j
                  |   dk7  r|    j
                  |   z  nd- }	}t         ||	dgt	        |      z  ||      S c c}w )Nc                 Z    t        j                  ddt        j                  |       z
        S Nr   rc   )r!   r5   rH   )r   s    r,   _fill_triangle_kernelz&_resize.<locals>._fill_triangle_kernel  s    zz!Q]++r.   c                     d| z  dz
  | z  | z  dz   }t        j                  | dk\  d| z  dz   | z  dz
  | z  dz   |      }t        j                  | dk\  d|      S )Ng      ?g      @r3   r   rT   rS   r1   )r!   r7   )r   outs     r,   _fill_keys_cubic_kernelz(_resize.<locals>._fill_keys_cubic_kernel  sg    a#"a'#-hhqCx4!8c>Q"6"<!AC!GMxxS#s++r.   c                    | t        j                  t         j                  |z        z  t        j                  t         j                  |z  | z        z  }t        j                  |dkD  t        j                  |t        j                  |dk7  t         j                  dz  |dz  z  d            d      }t        j                  || kD  d|      S )NgMbP?r   rb   rc   r1   )r!   sinpir7   r   )radiusr   yr   s       r,   _fill_lanczos_kernelz%_resize.<locals>._fill_lanczos_kernel  s    RVVBEEAI&&	F0B)CChhHbii288AFBEE1Hq!tOQ#GH!
 xxF
C--r.   r   r   r	   c                      d|       S )NrR    r   r   s    r,   <lambda>z_resize.<locals>.<lambda>      /Q7 r.   r
   c                      d|       S )N      @r   r   s    r,   r   z_resize.<locals>.<lambda>  r   r.   r   zUnknown resize methodc              3   N   K   | ]  }j                   |   |   k7  s|  y wN)r   ).0iimager   s     r,   	<genexpr>z_resize.<locals>.<genexpr>  s)      A%((Bs   %%r   r3   r1   )_resize_nearestr   rh   ranger   r   _scale_and_translate)r   r   re   rf   r   r   r   spatial_dimsdr   r   s   ``        @r,   rn   rn     s   ,,
. ue,,	:	&	:	7	:	7	9	(011 U$ L
  &+[[^q%8a5;;q>!cAE 
  	L!! s   :0C
c                    | j                   t        fdt        t                    D              }|D ]  }|   |   }}t	        j
                  |t        j                        dz   |z  |z  }t	        j                  |      j                  t        j                        }t        d       gt              z  }|||<   | t        |         }  | S )Nc              3   :   K   | ]  }|   |   k7  s|  y wr   r   )r   r   input_shapeoutput_shapes     r,   r   z"_resize_nearest.<locals>.<genexpr>  s%      k!nQ.Os   r   r   )r   rh   r   r   r!   r   r   floorr    int32slice)	r   r   r   r   mnoffsetsindicesr   s	    `      @r,   r   r     s    ''K [)* L  1~|A199Qbjj1C71<q@((7#**2884;-#k"22
eGn Hr.   c           	         | j                   }t        |      dk(  r| S t        j                  | j                  t        j
                        r"| j                  t        j                        }d}	n| j                         }d}	t        |      D ]  \  }
}|| j                  z  }||   ||   }}t        ||||
   ||
   ||      j                  t        j                        }t        j                  |||df      }t        j                  |d|      } |	rat        j                  t        j                  |      | j!                         | j#                               }|j                  | j                        }|S )Nr   TFr   r   )r   r   r!   
issubdtyper   integerr    r   copy	enumeratendimr   r#   moveaxisrV   roundrk   rj   )r   r   r   r   r   r   rf   r   outputuse_roundingr   r   r   r   ws                  r,   r   r     s/    ''K
<A	}}QWWbjj)"**%,' ,1J1~|A1q%(KNFI

&
 	
 faq!f5VR+, &)1557AEEG<qww'Mr.   rc   )r   r   >   wrapmirrorr   reflectra   c                 <   t        j                  |      }|t        j                         vr,t	        dt        t        j                                d|       |t        vrt	        dt         d|       t        |      }t        | j                        dvrt	        d| j                         t        |j                        dvrt	        d|j                         | j                  }|d	k(  r| j                  d
      } d}t        | j                        dk(  rt        j                  | d      } d}t        |j                        dk(  rt        j                  |d      }|dk(  rt        j                  | d      } | j                  d   }t        j                  | j                  dd  D 	cg c]  }	t        j                   |	       c}	ddi}
t        j"                  |
D cg c]  }t        j                  |d       c}d      }t        j$                  ||ddddf      }|d d df   j'                         }|d d df   j'                         }|d d df   j'                         }|d d df   j'                         }||d d df<   ||d d df<   ||d d df<   ||d d df<   t        j(                  |ddgddggd      }t        j*                  ||ddf      }|d d dddf   j'                         }t        j(                  |ddgddgg      }d|d d dddf<   t        j,                  d||      }t        j.                  |dd      }|t        j*                  |g |j                  ddd      z  }t        j0                  t3        |      D cg c]  }t5        | |   ||   t        |   ||      ! c}d      }|dk(  rt        j                  |d      }|rt        j6                  |d      }|d	k(  r|j                  |      }|S c c}	w c c}w c c}w ) Nr_   r`   8Invalid value for argument `fill_mode`. Expected of one . Received: fill_mode=r   r   )rc   rb   zInvalid transform rank: expected rank 1 (single transform) or rank 2 (batch of transforms). Received input with shape: transform.shape=float16r   Fr   r   r   Trc   channels_firstr   rb   r   rc   indexingijr   rb   r      )r   constant_values)r   zBhwij, Bjk -> Bhwik)sourcedestination)newshapeorderrs   rt   r   r   rc   rb   )r   r   AFFINE_TRANSFORM_INTERPOLATIONSkeysr   setAFFINE_TRANSFORM_FILL_MODESr   r   r   r   r    r!   r$   	transposemeshgridr   rl   tiler   padreshapeeinsumr   rK   r   map_coordinatesrJ   )r%   	transformrp   rs   rt   r&   input_dtypeneed_squeezer}   ro   r   r   r   a0a2b1b2offsetcoordinatesr   affineds                        r,   affine_transformr     s&    11+>K;@@BBJ2779:; <*O-
 	

 33F*++A)N
 	

 "),I
6<<&"LL>+
 	

 9??6)(/1
 	
 ,,Kiy) L
6<<AQ/
9??q NN915	&&fl3aJ {{&,ll12&6	7d"))D/	7BFH nn-56	#6RG ggg
Aq!Q78G 
1a4			B	1a4			B	1a4			B	1a4			BIadOIadOIadOIadO yaVaV,<aPI

9z1a&89Iq!A#qy!&&(FVVF1v1v&67FIa1ai ))17IFK++k"!DK2::f/G/Gq/G!/GQ/GHHK hh :&		
  q	A5mD#%		
 G &&,,w5**W1-i..-Ne 
8 	78		
s   ,P"P$Pc           	      H   t        j                  |      }t        |      }t        |      }|t        vrt	        dt         d|       t        | j                        dvrt	        d| j                         |j                  dvs|j                  dd  dk7  rt	        d|j                         |j                  dvs|j                  dd  dk7  rt	        d	|j                         |j                  |j                  k7  r%t	        d
|j                   d|j                         | j                  }|dk(  r| j                  d      } d}t        | j                        dk(  rt        j                  | d      } d}t        |j                        dk(  rt        j                  |d      }t        |j                        dk(  rt        j                  |d      }|dk(  rt        j                  | d      } | j                  \  }}	}
}t        ||      }t        |j                        dk(  rt        j                  |d      }|j                  d   dk(  r|dkD  rt        j                  ||df      }t        j                  t        j                   |
t        j"                        t        j                   |	t        j"                        d      \  }}t        j$                  ||	|
|f      }t'        |      D ]  }||   \  }}}}}}}}||z  ||z  z   dz   }||z  ||z  z   |z   |z  }||z  ||z  z   |z   |z  }t        j(                  |j+                         |j+                         gd      }g }t'        |      D ]G  }| |d d d d |f   }t-        ||t        |   d|      } |j/                  | j1                  |	|
             I t        j(                  |d      ||<    |dk(  rt        j                  |d      }|rt        j2                  |d      }|j                  |      }|S )Nr_   r`   r   r   )rb   r   rd   )r   rb   zfInvalid start_points shape: expected (4,2) for a single image or (N,4,2) for a batch. Received shape: zdInvalid end_points shape: expected (4,2) for a single image or (N,4,2) for a batch. Received shape: zRstart_points and end_points must have the same shape. Received start_points.shape=z, end_points.shape=r   r   Fr   r   r   Trb   r   r   rc   r   xy)r   r3   ra   r   r   r   )r   r   r   r   r   r   r   r   r   r    r!   r$   r   compute_homography_matrixr   r   r   r   emptyr   rK   ravelr   appendr   rJ   )!r%   start_points
end_pointsrp   rt   r&   r   r   r}   rw   rx   r~   
transformsr   r   r   r   r   a1r   a3a4a5a6a7denomx_iny_incoordsmapped_channelschannelchannel_imgmapped_channels!                                    r,   perspective_transformr  u  s'    11+>K$\2L":.J;;J./ 0*O-
 	
 6<<&"LL>+
 	
 &,*<*<RS*AV*K88D8J8J7KM
 	
 f$
(8(8(=(G88B8H8H7IK
 	
 Z---,,8,>,>+? @  * 0 013
 	
 ,,Kiy)L
6<<AQ/
<!#~~l;
:!^^JQ7
&&fl3*0,,'Jx*<DJ
:!^^JQ7
aJNWWZ*a9
;;
		%rzz*
		&

+DAq XXz65(;<F: 7)3A&BBBBQa#%Qa"$-Qa"$-4::<6Q?X 
	JG Aq'!12K,5mD$%N "">#9#9&%#HI
	J HH_26q	+7. &&fl3F+]];'FMr.   c                 p	   | d d ddf   | d d ddf   }}| d d ddf   | d d ddf   }}| d d ddf   | d d ddf   }}| d d ddf   | d d ddf   }	}|d d ddf   |d d ddf   }}
|d d ddf   |d d ddf   }}|d d ddf   |d d ddf   }}|d d ddf   |d d ddf   }}t        j                  t        j                  |
|t        j                  |
      t        j                  |
      t        j                  |
      t        j                  |
      | |
z  | |z  gd      t        j                  t        j                  |
      t        j                  |
      t        j                  |
      |
|t        j                  |
      | |
z  | |z  gd      t        j                  ||t        j                  |      t        j                  |      t        j                  |      t        j                  |      | |z  | |z  gd      t        j                  t        j                  |      t        j                  |      t        j                  |      ||t        j                  |      | |z  | |z  gd      t        j                  ||t        j                  |      t        j                  |      t        j                  |      t        j                  |      | |z  | |z  gd      t        j                  t        j                  |      t        j                  |      t        j                  |      ||t        j                  |      | |z  | |z  gd      t        j                  ||t        j                  |      t        j                  |      t        j                  |      t        j                  |      | |z  | |z  gd      t        j                  t        j                  |      t        j                  |      t        j                  |      ||t        j                  |      |	 |z  |	 |z  gd      gd      }t        j                  ||||||||	gd      }t        j                  |d      }t         j
                  j                  ||      }t        j                  |ddg      }|S )Nr   rc   rb   r   r   r      )r!   rK   	ones_like
zeros_liker$   linalgsolver   )r   r  start_x1start_y1start_x2start_y2start_x3start_y3start_x4start_y4end_x1end_y1end_x2end_y2end_x3end_y3end_x4end_y4coefficient_matrixtarget_vectorhomography_matrixs                        r,   r   r     s   %aAg.Q1W0EhH%aAg.Q1W0EhH%aAg.Q1W0EhH%aAg.Q1W0EhH1a(*Q1W*=FF1a(*Q1W*=FF1a(*Q1W*=FF1a(*Q1W*=FFHHLL(MM&)MM&)MM&)I&I&	  HHMM&)MM&)MM&)LL(I&I&	  HHLL(MM&)MM&)MM&)I&I&	  HHMM&)MM&)MM&)LL(I&I&	  HHLL(MM&)MM&)MM&)I&I&	  HHMM&)MM&)MM&)LL(I&I&	  HHLL(MM&)MM&)MM&)I&I&	  HHMM&)MM&)MM&)LL(I&I&	 yi	
T Wl\ HH		
 M NN=r:M		(:MJ

#4r1g>r.   c                 v   t        |       } t        |      }|j                  d   t        | j                        k7  r(t        d| j                   d|j                  d          t        |j                        dk  rt        d|j                         |t        vr,t        dt        t        j                                d|       |t        d      vrt        ddd	g d
|       t        || j                        D cg c]  \  }}t        t        j                  |j                               j                  t               d	z   d      t        t        j                  |j                               j                  t              d	z   |z
  d      f }}}t        ||      D cg c]  \  }}||d   z    }	}}ddddj!                  ||      }
|dk(  rt        j"                  | ||
|      }nt        j"                  | ||
      }t$        j&                  j)                  ||	|||      }|S c c}}w c c}}w )Nr   zaFirst dim of `coordinates` must be the same as the rank of `inputs`. Received inputs with shape: z and coordinate leading dim of rb   zOInvalid coordinates rank: expected at least rank 2. Received input with shape: z8Invalid value for argument `fill_mode`. Expected one of r   z4Invalid value for argument `order`. Expected one of rc   z. Received: order=edger   	symmetric)r   r   r   ra   )moder   r.  )r   r.  cval)r   r   r   r   MAP_COORDINATES_FILL_MODESr   r   r   ziprj   r!   r   rk   r    ri   ceilgetr   r   ndimager   )inputsr   r   rs   rt   cro   paddingpshifted_coordspad_modepaddedresults                r,   r   r   y  sT    v&F#K0Ks6<<00++1<<. 9)//235
 	
 ;!++6+<+<*=?
 	
 22F-22456 7"%
 	

 E!HB1vh(1
 	
 ;5
 At !%%'"))#..2A6 '',q047;	
G  ,/w+DE41aa!A$hENE 
c)Y	 
 JG(J
 h7]]**e)* + F M- Fs   BH/'H5c           	      J   d }t        |       } t        |      }t        |      }| j                  }t        | j                        dvrt	        d| j                         d}t        | j                        dk(  rt        j                  | d      } d}|d	k(  rt        j                  | d
      } | j                  \  }}}	}
 ||||
|      }|d   dz  }|d   dz  }t        j                  |       }t        |      D ]r  }t        |
      D ]b  }t        j                  | |d d d d |f   ||f||ffd      }t        j                  j                  ||d d d d |f   d      ||d d d d |f<   d t |d	k(  rt        j                  |d      }|rt        j                  |d      }|S )Nc                     fdfd} || |      }|d d d d t         j                  f   }t        j                  |dd|f      }|j                        S )Nc                     t        j                  |       | dz
  dz  z
  }t        j                  d||z  dz  z        }|t        j                  |      z  S )Nr   rc   rb   r   )r!   r   expr   )ro   sigmar   kernel1dr   s       r,   _get_gaussian_kernel1dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel1d  sP    		$e,qA~=Avvda%iA%556HbffX...r.   c                     t        j                  |       }  | d   |d         } | d   |d         }t        j                  ||      S r   )r!   asarrayouter)ro   rB  
kernel1d_x
kernel1d_yrD  r   s       r,   _get_gaussian_kernel2dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel2d  sL    ::dE*D/QqBJ/QqBJ88J
33r.   rc   )r!   r   r   r    )kernel_sizerB  num_channelsr   rJ  r   rD  s      `  @r,   _create_gaussian_kernelz.gaussian_blur.<locals>._create_gaussian_kernel  sV    	/
	4 (U;1bjj()!Q!56}}U##r.   r   r   Fr   r   r   Tr   r   rb   rc   ra   r/  validr   )r   r   r   r   r   r!   r$   r   
empty_liker   r   r   signal
convolve2drJ   )r%   rK  rB  r&   rM  r   r   r}   rw   rx   rL  r   pad_hpad_wblurred_imagesr:   chr<  s                     r,   gaussian_blurrV    s   $" v&F#K0Ke$E,,K
6<<&"LL>+
 	
 L
6<<AQ/&&fl3.4ll+J|$UL+F NaENaE]]6*N: 	% 	BVVq!Q{#%0F
 +0,,*A*Aq!Rx(w +B +N1aB;'		 &&nlCN;r.   c                    t        j                  |      }|t        j                         vr,t	        dt        t        j                                d|       |t        vrt	        dt         d|       t        | j                        dvrt	        d| j                         t        |       } | j                  }t        ||      }t        ||      }t        d|z        d	z  t        d|z        d	z  f}	d
}
t        | j                        dk(  rt        j                  | d      } d}
|dk(  r| j                  \  }}}}d}n| j                  \  }}}}d	}t        |      }t        j                  j!                  |      }|j#                  |||fdd      j%                  |      |z  }|j#                  |||fdd      j%                  |      |z  }t'        t        j                  ||      |	||f|      }t'        t        j                  ||      |	||f|      }t        j(                  |      }t        j(                  |      }t        j*                  t        j,                  |      t        j,                  |            \  }}|d d d d d f   |d d d d d f   }}|||z  z   }|||z  z   }t        j.                  |       }|dk(  ret1        |      D ]V  }t        j2                  t1        |      D cg c]'  }t5        | |d|f   ||   ||   gt        |   ||      ) c}      |d|f<   X nlt1        |      D ]^  }t        j2                  t1        |      D cg c]'  }t5        | ||df   ||   ||   gt        |   ||      ) c}      |d d |d d d d f<   ` |
rt        j(                  |d      }|j%                  |      }|S c c}w c c}w )Nr_   r`   r   r   r   r   r      rc   Fr   r   r   Tr   r   r1   r3   )ro   locr   )rK  rB  r&   .r   )r   r   r   r   r   r   r   r   r   r   r   ri   r!   r$   r   randomdefault_rngnormalr    rV  rJ   r   r   r  r   rK   r   )r%   alpharB  rp   rs   rt   seedr&   r   rK  r   r}   rw   rx   r~   channel_axisrngdxdyr   r   distorted_xdistorted_ytransformed_imagesr   r:   s                             r,   elastic_transformrf    s
    11+>K;@@BBJ2779:; <*O-
 	

 33F*++A)N
 	
 6<<&"LL>+
 	
 v&F,,Ke;7Ee;7Eq5y>A%s1u9~'9:KL
6<<AQ/o%.4ll+
FE8.4ll+
HfeT?D
))


%C

VU3C
HOO	
 	  	

VU3C
HOO	
 	  

r-en	
B 

r-en	
B 
BB	BB;;ryy'6):;DAqT1aZ=!D!QJ-qAebj.Kebj.Kv.o%x 	A)+ #:.	  $q#qy)$QQ8=mL"+#-	*sAv&	 x 	A-/XX #:.	  $q!Sy)$QQ8=mL"+#-	.q!Qz*	 ZZ(:C+22;?=		s   3,O
,O
r   )r   FFFra   r1   N)r   ra   r   N)r   r   N)ra   r1   ))r   r   )r3   r3   N)g      4@r   r   r   r1   NN)rE   numpyr!   	keras.srcr   keras.src.backend.numpy.corer   keras.src.random.seed_generatorr   keras.src.utils.module_utilsr   rg   r-   rO   r]   r   r   rn   r   r   r   r   r   r  r   r1  r   rV  rf  r   r.   r,   <module>rl     s       : 5 . -,/ d% V mL`'T-` @ #   jb jZK\  BE6t ?CCP 
	yr.   