
    2Vhz                         d dl Z d dlZd dlZd dl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dZ	 	 	 ddZd Zd Zd Zd d d eedZd Zd Z	 ddZ	 ddZ	 	 	 	 	 	 	 d dZy)!    N)backend)convert_to_tensor)	draw_seed)bilinearnearestlanczos3lanczos5bicubicareac                    t        |       } t        j                  |      }|dk(  rdnd}t        | j                        dvrt        d| j                         | j                  }t        j                  | j                  t              }t        j                  | |      } t        g d| j                        }t        j                  | ||df      } t        j                  | |	      } t        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tfcast	tensordotexpand_dims)imagesdata_formatchannels_axisoriginal_dtypecompute_dtypergb_weightss         R/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/tensorflow/image.pyrgb_to_grayscaler+      s    v&F11+>K%8BbM
6<<&"LL>+
 	
 \\N''e<MWWV]+F $ K \\&+]B4GHF^^F7F776>**    c                    t        |       } | j                  }t        j                  |      }t	        | j
                        dvrt        d| j
                         t        j                  |      s!t        dt        j                  |             |dk(  rEt	        | j
                        dk(  rt        j                  | d      } nt        j                  | d      } t        j                  j                  |       } |dk(  r^t	        | j
                        dk(  rt        j                  | d      } | S t	        | j
                        d	k(  rt        j                  | d
      } | S Nr   r   zCInvalid images dtype: expected float dtype. Received: images.dtype=channels_firstr   r      r      r2   r1   r   r   r   r2   r1   r   r1   r   r2   )r   r   r   r   r   r   r   is_float_dtypestandardize_dtyper    	transposeimage
rgb_to_hsvr$   r%   r   s      r*   r:   r:   -   8   v&FLLE11+>K
6<<&"LL>+
 	

 !!%(&&-&?&?&F%GI
 	
 &&v||!\\&,7F\\&)4FXX  (F&&v||!\\&,7F M !#\\&)4FMr,   c                    t        |       } | j                  }t        j                  |      }t	        | j
                        dvrt        d| j
                         t        j                  |      s!t        dt        j                  |             |dk(  rEt	        | j
                        dk(  rt        j                  | d      } nt        j                  | d      } t        j                  j                  |       } |dk(  r^t	        | j
                        dk(  rt        j                  | d      } | S t	        | j
                        d	k(  rt        j                  | d
      } | S r.   )r   r   r   r   r   r   r   r6   r7   r    r8   r9   
hsv_to_rgbr;   s      r*   r>   r>   J   r<   r,   c	           
      
    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vrt        d	 j                         |d
k(  rEt	         j                        dk(  rt        j                   d       nt        j                   d       |rt        j                         }	|	d   |	d   c|\  }
}t        j                  t        j                  |
z  d      |z  d      }t        j                  t        j                  |      d      }t        j                  |d      }t        j                  t        j                  |z  d      |
z  d      }t        j                  t        j                  |      d      }t        j                  |d      }t        j                  t        j                  |z
  d      dz  d      }t        j                  t        j                  |z
  d      dz  d      }t	         j                        dk(  r d d |||z   |||z   d d f    nM |||z   |||z   d d f    n7|r4t        j                         }	|	d   |	d   c|\  }
}t        j                  t        j                  |
z  d      |z  d      }t        j                  |      }t        j                  |d      }t        j                  t        j                  |z  d      |
z  d      }t        j                  |      }t        j                  |d      }t        j                  t        j                  |z
  d      dz  d      t        j                  t        j                  |z
  d      dz  d      t	         j                        dk(  r|t        j                         d   t        j                         d   t        j                  dkD   fd fd      t        j                  dkD   fdfd      nat        j                         d   t        j                  dkD   fd fd      t        j                  dkD   fdfd       t        j                  j                   |||      }|d
k(  r^t	         j                        dk(  rt        j                  |d      }|S t	         j                        dk(  rt        j                  |d      }|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`.r1   zPArgument `size` must be a tuple of two elements (height, width). Received: size=r   r   r/   r   r0   r3   r   float32int32r2   r   r   c            
          t        j                  t        j                   fj                        z  t        j                   fj                        z  gd      S Nr   r2   r   r    concatonesr   )
batch_sizechannels
fill_valuer$   img_box_hstartwidths   r*   <lambda>zresize.<locals>.<lambda>   sq    		'I"(,, %	%
 'I"(,, %	%  r,   c                       S N r$   s   r*   rP   zresize.<locals>.<lambda>        r,   c            
          t        j                  t        j                   fj                        z  t        j                   fj                        z  gd      S )Nr   r1   r   rH   )rK   rL   rM   heightr$   img_box_wstart
padded_imgs   r*   rP   zresize.<locals>.<lambda>   sq    		'J"(,, %	%
 #'J"(,, %	%  r,   c                       S rR   rS   rY   s   r*   rP   zresize.<locals>.<lambda>       
 r,   c            	          t        j                  t        j                   fj                        z  t        j                   fj                        z  gd      S )Nr   r   r   rH   )rL   rM   r$   rN   rO   s   r*   rP   zresize.<locals>.<lambda>   sm    		+UH="(,, %	%
 +UH="(,, %	%  r,   c                       S rR   rS   rT   s   r*   rP   zresize.<locals>.<lambda>  rU   r,   c            	          t        j                  t        j                   fj                        z  t        j                   fj                        z  gd      S rG   rH   )rL   rM   rW   r$   rX   rY   s   r*   rP   zresize.<locals>.<lambda>  sm    		#^X>"(,, %	%
 ##^X>"(,, %	%  r,   c                       S rR   rS   r[   s   r*   rP   zresize.<locals>.<lambda>"  r\   r,   )method	antialiasr4   r5   )r   r   RESIZE_INTERPOLATIONSr   r   tupler   r    r8   r!   maximumminimumcondr9   resize)r$   sizeinterpolationrb   crop_to_aspect_ratiopad_to_aspect_ratio	fill_moderM   r%   r   target_heighttarget_widthcrop_height
crop_widthcrop_box_hstartcrop_box_wstart
pad_height	pad_widthresizedrK   rL   rW   rN   rX   rY   rO   s   `      `           @@@@@@@r*   rh   rh   g   s:    11+>K11J$%%?P
 	
 J11:=
 	
 3
 	
 t9>//3f6
 	
 ;D
6<<&"LL>+
 	

 &&v||!\\&,7F\\&)4F b	59&*#|ggGGEM)95D
 jjFK!@!Dggk73WWGGF\)95E

 ZZ

5* =qA
WWZ1
''GGF[()4q8'
 ''GGEJ&	2Q6
 v||!/K"??/J">>F /K"??/J">>F
 
 b	59&*#|WWGGEM)95D

 ZZ
3
WWZ1
GGGGF\)95E
	 JJui0	GGIw/	GGJ'3a7
 GGI%y1A5w
 v||!&)!,Jxx'*H"   %J( "   #%J* xx'*H"  %J( "   #%J( hhoo]i  G &&v||!ll7L9G N !#ll7I6GNr,   )r   r   )rB   r   wrapreflectc           	         t        j                  |      }|t        vrt        dt         d|       |t        vrt        dt         d|       t        | j                        dvrt        d| j                         t        |j                        dvrt        d|j                         d	}t        | j                        d
k(  rt        j                  | d      } d}t        |j                        dk(  rt        j                  |d      }|dk(  rt        j                  | d      } t        j                  j                  | t        j                  |t        j                        t        j                  |       dd ||j                         |j                               }t        j                  || j                        }|dk(  rt        j                  |d      }|rt        j                   |d      }|S )Nr@   rA   8Invalid value for argument `fill_mode`. Expected of one . Received: fill_mode=r   r   )r2   r1   zInvalid transform rank: expected rank 1 (single transform) or rank 2 (batch of transforms). Received input with shape: transform.shape=Fr   r   r   Tr2   r/   r0   r   r   )r$   
transformsoutput_shaperM   rj   rm   r4   )r   r   AFFINE_TRANSFORM_INTERPOLATIONSr   AFFINE_TRANSFORM_FILL_MODESr   r   r    r#   r8   raw_opsImageProjectiveTransformV3r!   rD   upperensure_shapesqueeze)r$   	transformrj   rm   rM   r%   need_squeezeaffineds           r*   affine_transformr   >  s    11+>K;;J./ 0*O-
 	

 33F*++A)N
 	
 6<<&"LL>+
 	

 9??6)(/1
 	
 L
6<<AQ/
9??q NN915	&&fl3jj33779BJJ7XXf%a+#))+//# 4 G oogv||4G&&,,w5**W1-Nr,   c                    t        j                  |      }t        |t        j                        }t        |t        j                        }|t
        vrt        dt
         d|       t        | j                        dvrt        d| j                         |j                  j                  dvs|j                  dd  dk7  rt        d	|j                         |j                  j                  dvs|j                  dd  dk7  rt        d
|j                         |j                  |j                  k7  r%t        d|j                   d|j                         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      } t        ||      }t        |j                        dk(  rt        j                  |d      }t        j                  j                  | t        j                  |t        j                        t        j                  |       dd ||j!                               }t        j"                  || j                        }|dk(  rt        j                  |d      }|rt        j$                  |d      }|S )Nr   r@   rA   r   r   )r1   r   rC   )r   r1   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=Fr   r   r   Tr1   r/   r0   r2   r   )r$   r|   r}   rM   rj   r4   )r   r   r   r    rD   r~   r   r   r   rankr#   r8   compute_homography_matrixr   r   r!   r   r   r   )	r$   start_points
end_pointsrj   rM   r%   r   r   outputs	            r*   perspective_transformr   z  s    11+>K$\DL":RZZ@J;;J./ 0*O-
 	

 6<<&"LL>+
 	
 f,0B0B230G L 1 88D8J8J7KM
 	
 F*j.>.>rs.Cv.M88B8H8H7IK
 	
 Z---,,8,>,>+? @  * 0 013
 	
 L
6<<AQ/
<!#~~l;
:!^^JQ7
&&fl3),
CI
9??q NN915	ZZ22779BJJ7XXf%a+#))+ 3 F __VV\\2F&&fl3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   r2   r1   r   r   r      )r    stack	ones_like
zeros_liker#   linalgsolvereshape)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                 N    |dz
  }t        j                  | |z   d|z  z  |z
        S )Nr2   r1   )r    abs)indexri   ss      r*   _mirror_index_fixerr   V  s,    qA66519Q'!+,,r,   c                 t    t         j                  j                  t        d| z  dz   d|z  dz         dz
  d      S )Nr1   r2   )r    mathfloordivr   r   ri   s     r*   _reflect_index_fixerr   \  s:    77AIM1t8a<81<a r,   c                     | S rR   rS   r   s     r*   rP   rP   c  s    E r,   c                 6    t        j                  | d|dz
        S )Nr   r2   )r    clip_by_valuer   s     r*   rP   rP   d  s    2#3#3E1dQh#G r,   c                     | |z  S rR   rS   r   s     r*   rP   rP   e  s
     r,   )rB   r   rw   mirrorrx   c                     | j                   j                  r| nt        j                  |       } t        j                  | t        j
                        }t        j                  d| j                         }||fgS Nr2   )r   
is_integerr    roundr!   rE   rB   )
coordinater   weights      r*   _nearest_indices_and_weightsr   k  s\     &&11
rxx
7K  GGJ)E[[J,,-FFOr,   c                     t        j                  |       }| |z
  }d|z
  }t        j                  |t         j                        }||f|dz   |fgS r   )r    floorr!   rE   )r   lowerupper_weightlower_weightr   s        r*   _linear_indices_and_weightsr   t  sQ    HHZ E%L|#LGGE288$EL!EAI|#<==r,   c           	      ~   t        |       }t        |      }|j                  d   t        |j                        k7  r(t        d|j                   d|j                  d          t        |j                        dk  rt        d|j                         t        ||j                        }t        j                  |d      }|dk(  rt        }n|dk(  rt        }nt        d	      fd
}g }	t        ||j                        D ]J  \  }
} ||
      }g }|D ]%  \  }} |||      \  }}|j                  |||f       ' |	j                  |       L g }t        j                  |	 D ]  }t        | \  }}}t        j                  t        j                  |            }t        j                  t        j                   ||            }dk(  r,t        j"                  |      }t        j$                  |||      }|}|j                  t'        j(                  t*        j,                  |      t        j.                  ||d   j                        z          t'        j(                  t*        j0                  |      }|j                  j2                  rt        j4                  |      }t        j.                  ||j                        S )Nr   zaFirst dim of `coordinates` must be the same as the rank of `inputs`. Received inputs with shape: z and coordinate leading dim of r1   zOInvalid coordinates rank: expected at least rank 2. Received input with shape: r   r   r2   z+map_coordinates currently requires order<=1c                    dk(  r)| dk\  | |k  z  }t        j                  | d|dz
        }||fS dk(  r?t        j                  | d|dz
        t        j                  | t         j                        fS dv rt        j                  |       } |dz  }t         j
                  j                  | |      }||k  }| }t        j                  ||||z
        } dk(  rt        j                  || dz
  |       } | t        j                  | t         j                        fS d	k(  rGt         j
                  j                  | |      } | t        j                  | t         j                        fS t        d
       )NrB   r   r2   r   r   )r   rx   r1   rx   rw   zUnknown fill_mode: )	r    r   r   boolr   r   modwherer   )	coordsri   validsafe_coordssize_2r   underoverrm   s	           r*   process_coordinatesz,map_coordinates.<locals>.process_coordinates  sX   
"q[Vd]3E**61dQh?K%%)###FAtax8",,bgg;   //VVF^FAXF''++ff-C$JE6DXXeS&3,7FI%$
F;2<<bgg>>>& WW[[.F2<<bgg>>>29+>??r,   rB   )r   r   r   r   r   r    unstackr   r   NotImplementedErrorzipappend	itertoolsproductr8   r   	gather_nd
reduce_allr   	functoolsreduceoperatormulr!   addr   r   )inputscoordinatesorderrm   rM   	input_arrcoordinate_arrs
interp_funr   valid_1d_interpolationsr   ri   interp_nodesvalid_interpr   r   
safe_indexr   outputsitemsindices
validitiesweightsgathered	all_validcontributionresults      `                       r*   map_coordinatesr   |  s    "&)I'4OQ3y#77++4??*; <-33A679
 	
 ?  !A%++:+@+@*AC
 	

 #:Y__EJjjq9Oz1
	!0
!"OPP@6 !A 5
D!*-) 	=ME6 3E4 @JUF ;<	= 	 &&|45 G""$;< 
'*E{$W,,rxx01<<Y @A
"j1Ixx	8Z@HX\\73gglGAJ$4$456	

  hllG4F!!&!7769??++r,   c                 X   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
      } t        j                  |       d   } |||||      }t
        j                  j                  | |g dd      }	|d	k(  rt        j                  |	d      }	|rt        j                  |	d      }	|	S )Nc                     fdfd} || |      }t        j                  || d   | d   ddf      }t        j                  |dd|dg      }t        j                  |      }|S )Nc                     t        j                  |       | dz
  dz  z
  }t        j                  d||z  dz  z        }|t        j                  |      z  S )Nr   r2   r1   g      )r    rangeexp
reduce_sum)ri   sigmaxkernel1dr   s       r*   _get_gaussian_kernel1dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel1d  sP    U+tax1n<Avvda%iA%556HbmmH555r,   c                     t        j                  |       }  | d   |d         } | d   |d         }t        j                  ||d      S )Nr   r2   r   )r    r!   r"   )ri   r   
kernel1d_x
kernel1d_yr   r   s       r*   _get_gaussian_kernel2dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel2d  sN    774'D/QqBJ/QqBJ<<
JQ??r,   r   r2   )r    r   tiler!   )kernel_sizer   num_channelsr   r  kernelr   s      `  @r*   _create_gaussian_kernelz.gaussian_blur.<locals>._create_gaussian_kernel  sk    	6
	@ (U;F[^[^Q$JK!Qa!89'r,   r   r   Fr   r   r   Tr/   r0   r   )r2   r2   r2   r2   SAME)stridespaddingr4   )r   r   r   r   r   r    r#   r8   nndepthwise_conv2dr   )
r$   r  r   r%   r  r   r   r  r  blurred_imagess
             r*   gaussian_blurr    s    $ v&F#K0Ke$ELLE
6<<&"LL>+
 	
 L
6<<AQ/&&fl388F#B'L$[%uMFUU++f , N &&nlCN;r,   c                    t        j                  |      }|t        vrt        dt         d|       |t        vrt        dt         d|       t        | j                        dvrt        d| j                         t        |       } | j                  }t        ||      }t        ||      }t        |d      }	d	|	z  d
z  d	|	z  d
z  f}
d}t        | j                        dk(  rt        j                  | d      } d}|dk(  r| j                  \  }}}}d}n| j                  \  }}}}d
}t        |      }|d
}t        j                  j                  |||fdd||      |z  }t        j                  j                  |||fdd||      |z  }t        t        j                  ||      |
||f|      }t        t        j                  ||      |
||f|      }t        j                  ||      }t        j                  ||      }t        j                   t        j"                  ||      t        j"                  ||      d      \  }}t        j                  |d      }t        j                  |d      }|||z  z   }|||z  z   }g }|dk(  rt#        |      D ]p  }t        j$                  t#        |      D cg c]3  }t'        | |d|f   ||   ||   gt        j)                  |      ||      5 c}d      }|j+                  |       r t        j$                  |d      }nt#        |      D ]p  }t        j$                  t#        |      D cg c]3  }t'        | ||df   ||   ||   gt        j)                  |      ||      5 c}d      }|j+                  |       r t        j$                  |d
      }|rt        j                  |d      }t        j,                  ||      }|S c c}w c c}w )Nr@   rA   rz   r{   r   r   r   rE      r2   Fr   r   r   Tr   r                 ?)r   meanstddevr   seed)r  r   r%   xy)indexing.)r   rm   rM   )r   r   r~   r   r   r   r   r   r   r    r#   r   randomstateless_normalr  r   meshgridr   r   r   r   r   r!   )r$   alphar   rj   rm   rM   r  r%   input_dtypekernel_factorr  r   rK   rW   rO   rL   channel_axisdxdyr   ydistorted_xdistorted_ychannel_outputsibchannel_transformedtransformed_imagess                               r*   elastic_transformr(    sY    11+>K;;J./ 0*O-
 	

 33F*++A)N
 	
 6<<&"LL>+
 	
 v&F,,Ke;7Ee;7E%e7;M}$q(!m*;a*?@KL
6<<AQ/o%.4ll+
FE8.4ll+
HfeT?D
 			""vu- 	# 	
 	  			""vu- 	# 	
 	  

r-en	
B 

r-en	
B 
B\	*B	B\	*B;;
k*
{+DAq
 	qq!A
qq!Aebj.Kebj.KOo%x 	8A"$(( #:.  $q#qy)$QQ8=CC) #,#- # ""#67!	8"  XXoB?x 	8A"$(( #:.  $q!Sy)$QQ8=CC) #,#- # ""#67!	8"  XXoA>ZZ(:C!3[AQ&s   =8O/
8O4
rR   )r   FFFrB   r  N)r   rB   r   N)r   r   N)rB   r  ))r   r   )r  r  N)g      4@g      @r   rx   r  NN)r   r   r   
tensorflowr    	keras.srcr   !keras.src.backend.tensorflow.corer   keras.src.random.seed_generatorr   rc   r+   r:   r>   rh   r~   r   r   r   r   r   r   _INDEX_FIXERSr   r   r   r  r(  rS   r,   r*   <module>r.     s         ? 5 +0:@ GT#   9@ K\K\- *G,!#> BEW,v ?C5t 
	Rr,   