ó
 ‰\c           @   sÉ   d  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 „  Z d e j f d	 „  ƒ  YZ d
 „  Z d „  Z d „  Z e d k rÅ e j j ƒ  n  d S(   sC  test_watershed.py - tests the watershed function

Originally part of CellProfiler, code licensed under both GPL and BSD licenses.
Website: http://www.cellprofiler.org

Copyright (c) 2003-2009 Massachusetts Institute of Technology
Copyright (c) 2009-2011 Broad Institute
All rights reserved.

Original author: Lee Kamentsky
iÿÿÿÿN(   t   ndimage(   t	   watershed(   t   labelgê-™—q=c         C   sr  t  |  t j ƒ s$ t j |  ƒ }  n  t  | t j ƒ sH t j | ƒ } n  d |  j k rj d | j k rj d Sd | |  d k <|  j t j t j g k s° | j t j t j g k rt j |  t j ƒ }  t j | t j ƒ } |  j | j d j	 ƒ  |  j
 | j
 d j	 ƒ  } nV t j |  ƒ }  |  j t j ƒ }  t j | ƒ } | j t j ƒ } |  | d j	 ƒ  } t j | ƒ S(   Ni    g        i   (   t
   isinstancet   npt   ndarrayt   asarrayt   shapet   dtypet	   complex64t
   complex128t   realt   sumt   imagt   astypet   float64t   matht   sqrt(   t   at   bt   t(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   diff9   s$    5t   TestWatershedc           B   s†   e  Z e j d e ƒ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   i   c         C   sC  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t | | |  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 ƒ } t | | ƒ } | t k  s?t ‚ d S(   s   watershed 1i    i   iÿÿÿÿN(	   R   t   arrayt   uint8t   int8R   t   eightR   t   epst   AssertionError(   t   selft   datat   markerst   outt   expectedt   error(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed01R   sD    '!c         C   sw  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g t  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g t  j ƒ } t | | ƒ } t d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g | ƒ } |  j | t k  ƒ d S(   s   watershed 2i    i   iÿÿÿÿN(   R   R   R   R   R   R   t
   assertTrueR   (   R   R   R   R    R"   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed02w   sF    ''$c         C   s/  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t | | ƒ } t d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 | ƒ } |  j | t k  ƒ d S(   s   watershed 3i    i   i   i   iÿÿÿÿN(   R   R   R   R   R   R   R$   R   (   R   R   R   R    R"   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed03   s@    ''$c         C   s5  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t | | |  j ƒ } t d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 | ƒ } |  j | t k  ƒ d S(   s   watershed 4i    i   i   i   iÿÿÿÿN(	   R   R   R   R   R   R   R   R$   R   (   R   R   R   R    R"   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed04À   s@    ''$c         C   s5  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 t  j ƒ } t | | |  j ƒ } t d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g
 | ƒ } |  j | t k  ƒ d S(   s   watershed 5i    i   i   i   iÿÿÿÿN(	   R   R   R   R   R   R   R   R$   R   (   R   R   R   R    R"   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed05ã   s@    ''$c         C   sí  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g	 t  j ƒ } t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g	 t  j ƒ } t | | |  j ƒ } t d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g	 | ƒ } |  j | t k  ƒ d S(   s   watershed 6i    i   iÿÿÿÿN(	   R   R   R   R   R   R   R   R$   R   (   R   R   R   R    R"   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed06  s:    ''$c      %   C   sÙ  t  j d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d	 d
 d
 d	 d d d d d d g d d d d d d	 d d d d d	 d d d d d g d d d d d d d	 d d d	 d d d d d d g d d d d d d d d	 d	 d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d	 d	 d d d d d d d g d d d d d d d	 d d d	 d d d d d d g d d d d d d	 d d d d d	 d d d d d g d d d d d d d	 d
 d
 d	 d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g g ƒ } | d k } t  j | j t ƒ } d | d <d | d <t | | |  j d | ƒ} t  j | d k ƒ } t  j | d k ƒ } |  j t	 | | ƒ d k ƒ d S(   s3   A regression test of a competitive case that failediÿ   iÌ   i·   i™   i   io   ig   i^   iH   i4   i'   i   i   i   i   i   t   maskN(   i   i   (   i   i   (
   R   R   t   zerosR   t   intR   R   R   R$   t   abs(   R   R   R*   R   R    t   size1t   size2(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed07&  s:    93333333333333333333<

c      %   C   sÙ  t  j d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d	 d
 d
 d	 d d d d d d g d d d d d d	 d d d d d	 d d d d d g d d d d d d d	 d d d	 d d d d d d g d d d d d d d d	 d	 d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d	 d	 d d d d d d d g d d d d d d d	 d d d	 d d d d d d g d d d d d d	 d d d d d	 d d d d d g d d d d d d d	 d
 d
 d	 d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g g ƒ } | d k } t  j | j t ƒ } d | d <d | d <t | | |  j d | ƒ} t  j | d k ƒ } t  j | d k ƒ } |  j t	 | | ƒ d k ƒ d S(   s2   The border pixels + an edge are all the same valueiÿ   iÌ   i·   i™   i   io   ig   i^   iH   i4   i'   i   i   i   i   i   R*   N(   i   i   (   i   i   (
   R   R   R+   R   R,   R   R   R   R$   R-   (   R   R   R*   R   R    R.   R/   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed08J  s:    93333333333333333333<

c         C   sÔ   t  j d ƒ } t  j j d d d	 ƒ j t ƒ } t  j d
 t ƒ } d } x> | D]6 \ } } d | | | f <| | | | f <| d 7} qO Wt j | d ƒ } t | | |  j	 ƒ t j
 | j t  j ƒ | |  j	 ƒ d S(   s«   Test on an image of reasonable size

        This is here both for timing (does it take forever?) and to
        ensure that the memory constraints are reasonable
        iè  i    id   i   i   i   N(   iè  iè  (   id   i   (   iè  iè  (   R   R+   t   randomt   uniformR   R,   t   ndit   gaussian_filterR   R   t   watershed_iftt   uint16(   R   t   imaget   coordsR   t   idxt   xt   y(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed09n  s    !c         C   s  t  j d d d d g d d d d g d d d d g d d d d g g t  j ƒ } t  j d d d d g d d d d g d d d d g d d d d g g t  j ƒ } t | | |  j ƒ } t d d d d g d d d d g d d d d g d d d d g g | ƒ } |  j | t k  ƒ d S(   s   watershed 10i   i    i   i   i   N(	   R   R   R   R   R   R   R   R$   R   (   R   R   R   R    R"   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed10  s    c         C   sb  t  j d
 ƒ } t  j d t ƒ } d | d <d | d <d | d <d | d <t  j t t t g t t t g t t t g g ƒ } t | | | ƒ } t  j d d … d d … f \ } } t  j g  d d d d f D]@ \ } } t  j	 | j
 t ƒ | d | j
 t ƒ | d ƒ ^ qÌ ƒ }	 t  j |	 d ƒ }
 |  j t  j |	 | | | | | f d f |
 k ƒ ƒ d	 S(   sF   Make sure that all points on this plateau are assigned to closest seedi   i   i   i   i
   i   i   i    N(   i   i   (   i   i   (   i   i   (   i   i
   (   i
   i   (   i
   i
   (   i   i   (   i   i
   (   i
   i   (   i
   i
   (   R   R+   R,   R   t   Falset   TrueR   t   mgridt   dstackR   R   t   floatt   minR$   t   all(   R   R8   R   t	   structureR    t   it   jt   i0t   j0t   dt   dmin(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed11’  s     



%Yc          C   sÊ  t  j d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d d g g ƒ } | d k } t | ƒ } t | | d d	 d
 t ƒ} xQ t t d ƒ d d d d g ƒ D]. \ } } |  j t  j | | k ƒ | k ƒ q”Wd S(   s   The watershed lineiË   iÿ   i™   if   iM   i    i3   t   connectivityi   t   watershed_linei   i"   iJ   N(	   R   R   R   R   R@   t   zipt   rangeR$   R   (   R   R   t	   markerbint   markert   wst   labt   area(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_watershed12¬  s*    933333333333333<.(   i   i   (   t   __name__t
   __module__R   t   onest   boolR   R#   R%   R&   R'   R(   R)   R0   R1   R=   R>   RM   RW   (    (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyR   O   s   	%	&	#	#	#	 	$	$			c          C   sN  t  j d
 ƒ }  d |  d  d  … d d  … f <t  j d d t ƒ} d | d <d | d <t |  | d d	 ƒ} t  j d d d d d d g d d d d d d g d d d d d d g d d d d d d g d d d d d d g g d t ƒ} t  j j | | ƒ t |  | ƒ } t  j |  j d t ƒ} d | d d d  … f <t  j j | | ƒ d  S(   Ni   i   i   i   R   i   i    t   compactnessg{®Gáz„?(   i   i   (   i   i   (   i   i    (   i   i   (	   R   R+   R,   R   R   t   testingt   assert_equalRZ   R   (   R8   t   seedst   compactR!   t   normal(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_compact_watershedÆ  s     

$c          C   sØ   t  j d
 ƒ }  d |  d d … d d … f <t |  d d d ƒ} t  j d d d d d d g d d d d d d g d d d d d d g d d d d d d g d d d d d d g g d	 t  j ƒ} t  j j | | ƒ d S(   s>   Test that passing just the number of seeds to watershed works.i   i   i   Ni   i   R\   g{®Gáz„?R   (   i   i   (   R   R+   R   R   t   int32R]   R^   (   R8   R`   R!   (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_numeric_seed_watershedÙ  s    'c          C   sG   t  j t ƒ 2 t j d ƒ }  t j d ƒ } t |  | ƒ } Wd  QXd  S(   Ni   i   i   (   i   i   (   i   i   (   t   pytestt   raisest
   ValueErrorR   RZ   R   (   R8   R   t   output(    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   test_incorrect_markers_shapeæ  s    t   __main__(   t   __doc__R   t   unittestRe   t   numpyR   t   scipyR    R4   t   skimage.morphology.watershedR   t   skimage.measureR   R   R   t   TestCaseR   Rb   Rd   Ri   RX   R]   t   run_module_suite(    (    (    sF   lib/python2.7/site-packages/skimage/morphology/tests/test_watershed.pyt   <module>   s    "	ÿ x			