o
    2hR                     @   s  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dZd/d	d
Zd/ddZ							d0ddZdd Zdd Zdd Zdd Zd ddZh dZ			 	d1ddZ		 	d2d d!Zd"d# Zh dZ	d3d$d%Z	d4d(d)Z	*	+		,			d5d-d.ZdS )6    N)backend)convert_to_tensor)	draw_seed)scipy)bilinearnearestlanczos3lanczos5bicubicc                 C   s   t | } t|}|dkrdnd}t| jdvr td| j | j}t| jt}| 	|} t
jg d| jd}t
j| ||dfd}t
j||d	}|	|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
grayscales r*   X/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/numpy/image.pyrgb_to_grayscale   s    


r,   c           	      C   s   t | } t| j}t|}|dkrdnd}t| jdvr&td| j t|s2td| t	
|j}tt| |k d| } t| d|\}}}t||}t||}t||}d	d
 }tj|||||d} | |S )Nr   r   r   r   r   CInvalid images dtype: expected float dtype. Received: images.dtype=        r   c                 S   s   t t | ||}t t | ||}|| }t |dk|d}t |dk|d}t |dk|| d}dd|  }	t ||k|	||   d |	| |  d }
t || k|	||  |
}
t |dk|
d|
dk |
j }
|
||fS )Nr         ?r.         @gUUUUUU?gUUUUUU?)r   maximumminimumwherer   r   )rgbvaluer2   range_
safe_value
safe_range
saturationnormhuer*   r*   r+   rgb_planes_to_hsv_planes@   s   "
z,rgb_to_hsv.<locals>.rgb_planes_to_hsv_planesr   )r   r   standardize_dtyper   r   r   r   r   is_float_dtype	ml_dtypesfinfoepsr   r3   abssplitsqueezestackr   )	r#   r$   r   r%   rC   redgreenbluer>   r*   r*   r+   
rgb_to_hsv(   s6   


rK   c                 C   s   t | } | j}t|}|dkrdnd}t| jdvr#td| j t|s2tdt| t	
| d|\}}}t	||}t	||}t	||}dd	 }t	j|||||d
} | |S )Nr   r   r   r   r   r-   r   c                 S   s   t | dd }t t |d d dd}t dt |d  dd}t dt |d  dd}d| }||||   }||||   }	||||   }
||	|
fS )Nr/   r0         @r.          @      @)r   modcliprD   )r=   r;   r7   dhdrdgdbone_minus_srH   rI   rJ   r*   r*   r+   hsv_planes_to_rgb_planesp   s   
z,hsv_to_rgb.<locals>.hsv_planes_to_rgb_planesr   )r   r   r   r   r   r   r   r@   r?   r   rE   rF   rG   r   )r#   r$   r   r%   r=   r;   r7   rV   r*   r*   r+   
hsv_to_rgbZ   s2   


rW   r   Fconstantr.   c	              	   C   s  t |}|tvrtdt d| |dkrtd| |r&|r&tdt|dks3td| t|}|\}	}
t| jdkrb|d	krU| jd
 f| | jd f }n2| jd
 | jd f| }n%t| jdkr|d	krv|| jd f }n| jd
 f| }ntd| j |rB| j}|d	kr|d |d }}n	|d |d }}tt||	 |
 }t	t
||d}tt||
 |	 }t	t
||d}tt|| d }tt|| d }|d	krt| jdkr| d d ||| ||| d d f } n| ||| ||| d d f } nt| jdkr/| d d d d ||| ||| f } n| d d ||| ||| f } n|r| j}| jd
 }|d	kra|d |d |d }}}n|d |d |d }}}tt||	 |
 }t	||}tt||
 |	 }t	||}tt|| d }tt|| d }|d	krL|d
krt| jdkrtjtj||||f| jd| | tj||||f| jd| gdd}ntjtj|||f| jd| | tj|||f| jd| gd
d}n|d
krIt| jdkr(tjtj||||f| jd| | tj||||f| jd| gdd}ntjtj|||f| jd| | tj|||f| jd| gdd}n| }n|d
krt| jdkrvtjt||||f| | t||||f| gdd}nbtjt|||f| | t|||f| gdd}nG|d
krt| jdkrtjt||||f| | t||||f| gdd}ntjt|||f| | t|||f| gdd}n| }|} t| |||dS )N<Invalid value for argument `interpolation`. Expected of one . Received: interpolation=rX   z\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interpolationr_   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_imgr*   r*   r+   resize   s  




























r}   c                 C   s
  t ||}d| }|rt |dnd}t j||dd | ||  d }	t |	t jd d f t j| |dd d t jf  | }
||
}t j|ddd}t t |dt t j	j
 kt |t |dk|dd}| d }t t |	d	k|	|kt jd d f |dS )
Nr/   r         ?r   T)r   keepdimsg     @@r\         )r   r   r1   arangerD   newaxissumr3   rB   float32rC   dividelogical_and)
input_sizeoutput_sizescaletranslationkernelr_   r   	inv_scalekernel_scalesample_fxweightstotal_weight_suminput_size_minus_0_5r*   r*   r+   compute_weight_matr  sD   r   c           	         s   dd }dd }dd  |dkrt S |dkr|}n!|d	kr' fd
d}n|dkr2 fdd}n|dkr9|}ntdtfddttD }fdd|D }t||dgt| ||S )Nc                 S   s   t ddt |  S Nr   r\   )r   r1   rD   r   r*   r*   r+   _fill_triangle_kernel  s   z&_resize.<locals>._fill_triangle_kernelc                 S   sT   d|  d |  |  d }t | dkd|  d |  d |  d |}t | dkd|S )Ng      ?g      @r/   r   rN   rM   r.   )r   r3   )r   outr*   r*   r+   _fill_keys_cubic_kernel  s   *z(_resize.<locals>._fill_keys_cubic_kernelc                 S   sp   | t t j|  t t j| |   }t |dkt |t |dkt jd |d  dd}t || kd|S )NgMbP?r   r[   r\   r.   )r   sinpir3   r   )radiusr   yr   r*   r*   r+   _fill_lanczos_kernel  s
   (.z%_resize.<locals>._fill_lanczos_kernelr   r   r   c                    
    d| S )NrL   r*   r   r   r*   r+   <lambda>     
 z_resize.<locals>.<lambda>r	   c                    r   )N      @r*   r   r   r*   r+   r     r   r
   zUnknown resize methodc                 3   s&    | ]} j | | kr|V  qd S Nr   .0iimager   r*   r+   	<genexpr>  s    z_resize.<locals>.<genexpr>c                    s0   g | ]} j | d kr|  j |  ndqS )r   r/   r   )r   dr   r*   r+   
<listcomp>  s    "z_resize.<locals>.<listcomp>r.   )_resize_nearestr   ra   ranger   _scale_and_translate)	r   r   r^   r_   r   r   r   spatial_dimsr   r*   )r   r   r   r+   rg     s:   

rg   c                    s   | j  t fddtt D }|D ]5} | | }}tj|tjdd | | }t|tj	}t
d gt  }|||< | t| } q| S )Nc                 3   s$    | ]} | | kr|V  qd S r   r*   r   input_shapeoutput_shaper*   r+   r     s    z"_resize_nearest.<locals>.<genexpr>r   r~   )r   ra   r   r   r   r   r   floorr   int32slice)r   r   r   r   mnoffsetsindicesr*   r   r+   r     s   
r   c                 C   s   | j }t|dkr| S t| jtjr| tj}d}	n|  }d}	t	|D ]4\}
}|| j
 }|| || }}t||||
 ||
 ||tj}tj|||dfd}t|d|}q&|	rqtt||  |  }|| j}|S )Nr   TFr   r   )r   r   r   
issubdtyper   integerr   r   copy	enumeratendimr   r!   moveaxisrP   roundrd   rc   )r   r   r   r   r   r   r_   r   outputuse_roundingr   r   r   r   wr*   r*   r+   r     s,   
r   r\   )r   r   >   wrapmirrorr   reflectrX   c                    s  t |}t vrtdtt  d tvr'tdt d t|}tj	dvr:tdj	 t|j	dvrItd|j	 j
}|d	krUd
d}tj	dkrgtjddd}t|j	dkrutj|dd}|dkrtdj	d }tjdd j	dd  D ddi}	tjdd |	D dd}
t|
|ddddf}
|d d df  }|d d df  }|d d df  }|d d df  }||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d}t||ddf}|d d dddf  }tj|ddgddggd}d|d d dddf< td|
| tj ddd  tj|g |j	dddR d 7  tj fd!dt|D dd}|dkrrt|d"}|r|tj|dd}|d	kr||}|S )#NrY   rZ   8Invalid value for argument `fill_mode`. Expected of one . Received: fill_mode=r   r   )r\   r[   zInvalid transform rank: expected rank 1 (single transform) or rank 2 (batch of transforms). Received input with shape: transform.shape=float16r   Fr   r   r   Tr\   channels_firstr   r[   r   r\   c                 S   s   g | ]}t |qS r*   )r   r   )r   rh   r*   r*   r+   r   @  s    z$affine_transform.<locals>.<listcomp>indexingijc                 S   s   g | ]	}t j|d dqS )r   r   )r   r"   )r   r   r*   r*   r+   r   C  s    r   r[   r      )ry   constant_values)ry   zBhwij, Bjk -> Bhwik)sourcedestination)newshapec              	      s*   g | ]}t |  | t d qS )orderrl   rm   map_coordinatesAFFINE_TRANSFORM_INTERPOLATIONSr   coordinatesrl   rm   r#   ri   r*   r+   r   _  s    r   r   r\   r[   )r   r   r   keysr   setAFFINE_TRANSFORM_FILL_MODESr   r   r   r   r   r   r"   	transposemeshgridre   tiler   padreshapeeinsumr   rG   r   rF   )r#   	transformri   rl   rm   r$   input_dtypeneed_squeezerv   r   r   a0a2b1b2offsetaffinedr*   r   r+   affine_transform  s   



&



r   c           !   	   C   s  t |}t|}t|}|tvrtdt d| t| jdvr*td| j |jdvs8|jdd  dkr@td|j |jdvsN|jdd  dkrVtd	|j |j|jkrhtd
|j d|j | j}|dkrt| 	d} d}t| jdkrt
j| dd} d}t|jdkrt
j|dd}t|jdkrt
j|dd}|dkrt
| d} | j\}}	}
}t||}t|jdkrt
j|dd}|jd dkr|dkrt
||df}t
jt
j|
t
jdt
j|	t
jddd\}}t
||	|
|f}t|D ]p}|| \}}}}}}}}|| ||  d }|| ||  | | }|| ||  | | }t
j| | gdd}g }t|D ]#}| |d d d d |f }t||t| d|d} || |	|
 q?t
j|dd||< q|dkrxt
|d}|rt
j|dd}|	|}|S )NrY   rZ   r   r   )r[   r   r]   )r   r[   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   Tr[   r   r   r\   r   xy)r   r/   rX   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r"   r   compute_homography_matrixr   r   r   r   emptyr   rG   ravelr   appendr   rF   )!r#   start_points
end_pointsri   rm   r$   r   r   rv   rp   rq   rw   
transformsr   r   r   r   r   a1r   a3a4a5a6a7denomx_iny_incoordsmapped_channelschannelchannel_imgmapped_channelr*   r*   r+   perspective_transformu  s   





r  c                 C   s  | 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 |
t |
t |
t |
| |
 | | gddt jt |
t |
t |
|
|t |
| |
 | | gddt j||t |t |t |t || | | | gddt jt |t |t |||t || | | | gddt j||t |t |t |t || | | | gddt jt |t |t |||t || | | | gddt j||t |t |t |t || | | | gddt jt |t |t |||t ||	 | |	 | gddgdd}t j||||||||	gdd}t j|dd}t j||}t |ddg}|S )Nr   r\   r[   r   r   r      )r   rG   	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_matrixr*   r*   r+   r     s   &&&&&&&&







jn
r   c           
      C   s*  t | } t |}|jd t| jkr td| j d|jd  t|jdk r/td|j |tvrAtdtt  d| |tdvrStddd	g d
| dd t|| jD }dd t||D }dddd	||}|dkrt
j| |||d}nt
j| ||d}tjj|||||d}	|	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 r[   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 r\   z. Received: order=c                 S   sR   g | ]%\}}t t| t d  dt t|  td  | dfqS )r\   r   )rc   r   r   rd   r   rb   ceil)r   crh   r*   r*   r+   r     s     z#map_coordinates.<locals>.<listcomp>c                 S   s   g | ]
\}}||d   qS )r   r*   )r   pr  r*   r*   r+   r     s    edger   	symmetric)r   r   r   rX   )moder   r#  )r   r#  cval)r   r   r   r   MAP_COORDINATES_FILL_MODESr   r   r   zipgetr   r   r   ndimager   )
inputsr   r   rl   rm   paddingshifted_coordspad_modepaddedresultr*   r*   r+   r   y  sf   


r   r   r   r/   r/   c                 C   sh  dd }t | } t |}t |}| j}t| jdvr"td| j d}t| jdkr4tj| dd} d	}|d
kr>t| d} | j\}}}	}
||||
|}|d d }|d d }t| }t	|D ]=}t	|
D ]6}tj
| |d d d d |f ||f||ffdd}tjj||d d d d |f dd||d d d d |f< qgqa|d
krt|d}|rtj|dd}|S )Nc                    sX   fdd  fdd}|| |}|d d d d t jf }t |dd|f}|S )Nc                    s>   t j|  d| d d  }t d|| d  }|t | S )Nr   r\   r[   r   )r   r   expr   )rh   sigmar   kernel1dr   r*   r+   _get_gaussian_kernel1d  s   zNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel1dc                    s<   t | }  | d |d } | d |d }t ||S r   )r   asarrayouter)rh   r3  
kernel1d_x
kernel1d_yr5  r   r*   r+   _get_gaussian_kernel2d  s   zNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel2dr\   )r   r   r   r   )kernel_sizer3  num_channelsr   r;  r   r*   r:  r+   _create_gaussian_kernel  s   

z.gaussian_blur.<locals>._create_gaussian_kernelr   r   Fr   r   r   Tr   r   r[   r\   rX   r$  validr   )r   r   r   r   r   r   r"   r   
empty_liker   r   r   signal
convolve2drF   )r#   r<  r3  r$   r>  r   r   rv   rp   rq   r=  r   pad_hpad_wblurred_imagesr6   chr.  r*   r*   r+   gaussian_blur  sP   

rG        4@r   r   c              
      s  t |}t vrtdtt  d tvr'tdt d tjdvr6tdj t	j
}t	||d}t	||d}td| d	B td| d	B f}	d
}
tjdkrktjddd}
|dkryj\}}}}d}n	j\}}}}d	}t|}tj|}|j|||fddd|| }|j|||fddd|| }ttj||d|	||f|d}ttj||d|	||f|d}t|}t|}tt|t|\}}|d d d d d f |d d d d d f }}|||   |||  t}|dkr0t|D ]t fddt|D |df< qn(t|D ]#t fddt|D |d d d d d d f< q4|
rbtj|dd}||}|S )NrY   rZ   r   r   r   r   r      r\   Fr   r   r   Tr   r   r.   r/   )rh   locr   )r<  r3  r$   c              	      s8   g | ]}t |d f |  | gt dqS .r   r   r   r6   distorted_xdistorted_yrl   rm   r   r#   ri   r*   r+   r   S      z%elastic_transform.<locals>.<listcomp>.c              	      s8   g | ]}t |d f |  | gt dqS rK  r   rL  rM  r*   r+   r   a  rP  )r   r   r   r   r   r   r   r   r   r   r   rb   r   r"   r   randomdefault_rngnormalr   rG  rF   r   r   r  r   rG   )r#   alphar3  ri   rl   rm   seedr$   r   r<  r   rv   rp   rq   rw   channel_axisrngdxdyr   r   transformed_imagesr*   rM  r+   elastic_transform  s   


 

.

 
r[  r   )r   FFFrX   r.   N)r   rX   r   N)r   r   N)rX   r.   )r0  r1  N)rH  r   r   r   r.   NN)rA   numpyr   	keras.srcr   keras.src.backend.numpy.corer   keras.src.random.seed_generatorr   keras.src.utils.module_utilsr   r`   r,   rK   rW   r}   r   rg   r   r   r   r   r   r  r   r&  r   rG  r[  r*   r*   r*   r+   <module>   sf    
	

2+
 q*0 
q
m 

:
H