B
    P]1                 @   s   d Z ddlZddlZddlZddlZddl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ZddlmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZ ddlZddlmZmZ ddlZd	d
 ZdddZ dd Z!dddZ"dej#fddZ$d ddZ%dd Z&dddg fddZ'dS )!z7
cvtools - image processing tools for plankton images

    N)pi)
morphologymeasureexposurerestoration)	transform)register_translation)threshold_otsuscharrgaussian)ndimagespatialc             C   sZ   |   }| jd d \}}t|d |d ftj}t||dd t|}| |B }|S )N   )r   r      )copyshapenpzerosuint8cv2	floodFillbitwise_not)Zim_inZim_floodfillhwmaskZim_floodfill_invZ
fill_image r   9X:\800139.EyeRIS\EyeRIS.Software\EyeRISConvert\cvtools.pyimg_fill   s    
r   Q?c             C   sH   t | }ttdd| | }ttdd| | }t| ||}|S )Nr   g      ?r   )r   medianintmaxminr   Canny)imagesigmavlowerupperZedgedr   r   r   
auto_canny.   s
    
r)   c       	      C   s   ddddg}dd }| d | d  }| d | d  }|| d }|| d }|| d | d d|d< || d |d |j d |d< || d | d d|d< || d |d |j d |d< t|S )Nr   c             S   s&   t | | } | t| |kr"|} | S )N)r    r   sign)valshiftlimitr   r   r   shift_with_limit>   s    z&enlarge_bbox.<locals>.shift_with_limit      r   )r   tuple)	boxscaler$   Znew_boxr.   widthheightZextra_widthZextra_heightr   r   r   enlarge_bbox:   s    r6   r/   c             C   s   t d| dt}|ddt jf }|dkr8| d  }}n|d }|d }t dt d || d || d   |d  }|t | }|S )z Make a square gaussian kernel.
    size is the length of a side of the square
    fwhm is full-width-half-maximum, which
    can be thought of as an effective radius.
    r   r0   Nr   )r   arangefloatnewaxisexplogsum)sizeZfwhmcenterxyx0y0outputr   r   r   make_gaussianS   s    4rE   Tc             C   sH   t tj| |t j}|r(t ||}t|jdk rDt |t j	}|S )Nr/   )
r   imreadospathjoinIMREAD_UNCHANGEDcvtColorlenr   COLOR_GRAY2RGB)abs_pathfilenamerawbayer_patternZimg_cr   r   r   import_imagei   s    rR   c             C   s^   |rPt | t |  }d||dk < t | dkr@|t |  }t d| }n
t | }|S )Ng        r   r   )r   float32r"   r!   r   Zunit8)imgZ
auto_scaleresultZimg_8bitr   r   r   convert_to_8bitw   s    
rV   c       
      C   s8  i }t |tj| d }|j|d< |j|j }t||d< t	||d< t
|d|d< t
|d|d< t|j}t|j}|| }tj|| j }|jdkrtj||j }	nd}	||d	< |	|d
< |jd |d< |jd |d< |jd |d< |jd |d< |jd |d< |jd |d< |jd |d< |S )Nr   mean_intensityZmedian_intensityZstd_intensity   Zperc_25_intensityK   Zperc_75_intensityZmass_displace_in_imagesZmass_displace_in_minorsZmoment_hu_1r0   Zmoment_hu_2r   Zmoment_hu_3r/   Zmoment_hu_4   Zmoment_hu_5   Zmoment_hu_6   Zmoment_hu_7)r   regionpropsastyper   r   rW   Zintensity_imager$   r   std
percentilearraycentroidweighted_centroidlinalgnormr   minor_axis_lengthZweighted_moments_hu)
rT   Zobj_maskrespropZintensitiesrb   rc   ZdisplacementZdisplacement_imageZdisplacement_minorsr   r   r   intensity_features   s2    

ri   F c       !      C   s>  |rl| dd}| dd}| d dk}| dd}| d	 dk}	| d
 dk}
| dd}nd}d}d}d}	d}
d}d}i }t| |d< tt| d}|| ddk}| }|d}t||}d| }t	|ddd d}t
|dkrV||d jk}| }|d j}d}t
||kr:|}nt
|}xJtd|D ]<}|| j|kr||||| jk }|d }||krNP qNW |d j}|d j}|d j}|d j}|d j}|d j}t||}||d< t| dddddf |}||d< t| dddddf |}||d< t| dddddf |}||d< t|dkr^|}n|t| }tt|dddf t|dddf  t|dddf  t|dddf  d|jd  d|jd    }||d< ||d< ||d< ||d < |dkrd|d!< n|| |d!< ||d"< ||d#< ||d$< d%t | | | |d&< nhd'|d< d'|d< d'|d< d'|d < d|d!< d'|d"< d|d#< d|d$< d|d&< d|d< d|d< d|d< d|d< t|d}| dddddf | | dddddf< | dddddf | | dddddf< | dddddf | | dddddf< td(ddd)} t| dkrvt| } nt| t|  } |r2d*| | dk< t| dddddf | d+| dddddf< t| dddddf | d+| dddddf< t| dddddf | d+| dddddf< d| | dk < t| dkr^td,|  } ntd,|  t|  } | |d-< d,| |d.< |r:|	r|
rtt j!"||d/ |d  tt j!"||d0 |d-  nB|
rtt j!"||d1 |d  tt j!"||d2 |d-  tt j!"||d3 |d.  |S )4z!
    :param img: 8-bit array
    ZMinObjectAread   ZObjectsPerROIr0   Z
DeconvolvetrueZEdgeThresholdg      @UseJpegSaveRawColorZComputeEdgesFTrawcolorr   ZLumThresholdr/   r   r   c             S   s   | j S )N)area)kr   r   r   <lambda>       z quick_features.<locals>.<lambda>)reversekeyintensity_grayNintensity_redintensity_greenintensity_blueclipped_fractionrp   rf   major_axis_lengthaspect_ratioorientationeccentricitysoliditygUUUUUU?estimated_volumeg        r[   )r?   g-C6?   r   r$   binaryz_rawcolor.jpegz.jpegz_rawcolor.pngz.pngz_binary.png)#getr'   r   r   r   meanr^   r   r]   sortedrL   labelrp   ranger|   rf   r~   r   r   ri   r!   r9   r=   r   r   r   rE   rS   r   Zrichardson_lucyr   imwriterG   rH   rI   )!rT   save_to_diskrN   file_prefixcfgZmin_obj_areaZobjs_per_roiZdeconvZedge_threshuse_jpeg	raw_colorZcompute_edgesfeaturesgrayZbw_imgZ
bw_img_allZ	label_imgpropsZ	base_areaZ	avg_countZn_objsfZavg_areaZavg_majZavg_minZavg_orZavg_eccentricityZavg_solidityZfeatures_intensityZbwZ	clip_fracZblurd_bw_imgZpsfr   r   r   quick_features   s    









@6


,,,222 r   )r   )r/   N)T)(__doc__timejsonrG   sysglobdatetimepicklerandomstringmathr   r   Zskimager   r   r   r   r   Zskimage.featurer   Zskimage.filtersr	   r
   r   numpyr   scipyr   r   xmlsettingsr   r)   r6   rE   COLOR_BAYER_RG2RGBrR   rV   ri   r   r   r   r   r   <module>   s2   


#