<s> import os . path <EOL> import numpy as np <EOL> from numpy import testing <EOL> from scipy import ndimage as ndi <EOL> from skimage import color , data , transform <EOL> from skimage import img_as_uint , img_as_ubyte , data_dir <EOL> from skimage . morphology import grey , selem <EOL> from skimage . _shared . _warnings import expected_warnings <EOL> class TestMorphology ( ) : <EOL> def _build_expected_output ( self ) : <EOL> funcs = ( grey . erosion , grey . dilation , grey . opening , grey . closing , <EOL> grey . white_tophat , grey . black_tophat ) <EOL> selems_2D = ( selem . square , selem . diamond , <EOL> selem . disk , selem . star ) <EOL> with expected_warnings ( [ '<STR_LIT>' ] ) : <EOL> image = img_as_ubyte ( transform . downscale_local_mean ( <EOL> color . rgb2gray ( data . coffee ( ) ) , ( <NUM_LIT:20> , <NUM_LIT:20> ) ) ) <EOL> output = { } <EOL> for n in range ( <NUM_LIT:1> , <NUM_LIT:4> ) : <EOL> for strel in selems_2D : <EOL> for func in funcs : <EOL> key = '<STR_LIT>' . format ( strel . __name__ , n , func . __name__ ) <EOL> output [ key ] = func ( image , strel ( n ) ) <EOL> return output <EOL> def test_gray_morphology ( self ) : <EOL> expected = dict ( np . load ( os . path . join ( data_dir , '<STR_LIT>' ) ) ) <EOL> calculated = self . _build_expected_output ( ) <EOL> testing . assert_equal ( expected , calculated ) <EOL> class TestEccentricStructuringElements ( ) : <EOL> def setUp ( self ) : <EOL> self . black_pixel = <NUM_LIT:255> * np . ones ( ( <NUM_LIT:4> , <NUM_LIT:4> ) , dtype = np . uint8 ) <EOL> self . black_pixel [ <NUM_LIT:1> , <NUM_LIT:1> ] = <NUM_LIT:0> <EOL> self . white_pixel = <NUM_LIT:255> - self . black_pixel <EOL> self . selems = [ selem . square ( <NUM_LIT:2> ) , selem . rectangle ( <NUM_LIT:2> , <NUM_LIT:2> ) , <EOL> selem . rectangle ( <NUM_LIT:2> , <NUM_LIT:1> ) , selem . rectangle ( <NUM_LIT:1> , <NUM_LIT:2> ) ] <EOL> def test_dilate_erode_symmetry ( self ) : <EOL> for s in self . selems : <EOL> c = grey . erosion ( self . black_pixel , s ) <EOL> d = grey . dilation ( self . white_pixel , s ) <EOL> assert np . all ( c == ( <NUM_LIT:255> - d ) ) <EOL> def test_open_black_pixel ( self ) : <EOL> for s in self . selems : <EOL> grey_open = grey . opening ( self . black_pixel , s ) <EOL> assert np . all ( grey_open == self . black_pixel ) <EOL> def test_close_white_pixel ( self ) : <EOL> for s in self . selems : <EOL> grey_close = grey . closing ( self . white_pixel , s ) <EOL> assert np . all ( grey_close == self . white_pixel ) <EOL> def test_open_white_pixel ( self ) : <EOL> for s in self . selems : <EOL> assert np . all ( grey . opening ( self . white_pixel , s ) == <NUM_LIT:0> ) <EOL> def test_close_black_pixel ( self ) : <EOL> for s in self . selems : <EOL> assert np . all ( grey . closing ( self . black_pixel , s ) == <NUM_LIT:255> ) <EOL> def test_white_tophat_white_pixel ( self ) : <EOL> for s in self . selems : <EOL> tophat = grey . white_tophat ( self . white_pixel , s ) <EOL> assert np . all ( tophat == self . white_pixel ) <EOL> def test_black_tophat_black_pixel ( self ) : <EOL> for s in self . selems : <EOL> tophat = grey . black_tophat ( self . black_pixel , s ) <EOL> assert np . all ( tophat == ( <NUM_LIT:255> - self . black_pixel ) ) <EOL> def test_white_tophat_black_pixel ( self ) : <EOL> for s in self . selems : <EOL> tophat = grey . white_tophat ( self . black_pixel , s ) <EOL> assert np . all ( tophat == <NUM_LIT:0> ) <EOL> def test_black_tophat_white_pixel ( self ) : <EOL> for s in self . selems : <EOL> tophat = grey . black_tophat ( self . white_pixel , s ) <EOL> assert np . all ( tophat == <NUM_LIT:0> ) <EOL> def test_default_selem ( ) : <EOL> functions = [ grey . erosion , grey . dilation , <EOL> grey . opening , grey . closing , <EOL> grey . white_tophat , grey . black_tophat ] <EOL> strel = selem . diamond ( radius = <NUM_LIT:1> ) <EOL> image = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] ] , np . uint8 ) <EOL> for function in functions : <EOL> im_expected = function ( image , strel ) <EOL> im_test = function ( image ) <EOL> yield testing . assert_array_equal , im_expected , im_test <EOL> def test_3d_fallback_default_selem ( ) : <EOL> image = np . zeros ( ( <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:7> ) , np . bool ) <EOL> image [ <NUM_LIT:2> : - <NUM_LIT:2> , <NUM_LIT:2> : - <NUM_LIT:2> , <NUM_LIT:2> : - <NUM_LIT:2> ] = <NUM_LIT:1> <EOL> opened = grey . opening ( image ) <EOL> image_expected = np . zeros ( ( <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:7> ) , dtype = bool ) <EOL> image_expected [ <NUM_LIT:2> : <NUM_LIT:5> , <NUM_LIT:2> : <NUM_LIT:5> , <NUM_LIT:2> : <NUM_LIT:5> ] = ndi . generate_binary_structure ( <NUM_LIT:3> , <NUM_LIT:1> ) <EOL> testing . assert_array_equal ( opened , image_expected ) <EOL> def test_3d_fallback_cube_selem ( ) : <EOL> image = np . zeros ( ( <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:7> ) , np . bool ) <EOL> image [ <NUM_LIT:2> : - <NUM_LIT:2> , <NUM_LIT:2> : - <NUM_LIT:2> , <NUM_LIT:2> : - <NUM_LIT:2> ] = <NUM_LIT:1> <EOL> cube = np . ones ( ( <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:3> ) , dtype = np . uint8 ) <EOL> for function in [ grey . closing , grey . opening ] : <EOL> new_image = function ( image , cube ) <EOL> yield testing . assert_array_equal , new_image , image <EOL> def test_3d_fallback_white_tophat ( ) : <EOL> image = np . zeros ( ( <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:7> ) , dtype = bool ) <EOL> image [ <NUM_LIT:2> , <NUM_LIT:2> : <NUM_LIT:4> , <NUM_LIT:2> : <NUM_LIT:4> ] = <NUM_LIT:1> <EOL> image [ <NUM_LIT:3> , <NUM_LIT:2> : <NUM_LIT:5> , <NUM_LIT:2> : <NUM_LIT:5> ] = <NUM_LIT:1> <EOL> image [ <NUM_LIT:4> , <NUM_LIT:3> : <NUM_LIT:5> , <NUM_LIT:3> : <NUM_LIT:5> ] = <NUM_LIT:1> <EOL> with expected_warnings ( [ '<STR_LIT>' ] ) : <EOL> new_image = grey . white_tophat ( image ) <EOL> footprint = ndi . generate_binary_structure ( <NUM_LIT:3> , <NUM_LIT:1> ) <EOL> with expected_warnings ( [ '<STR_LIT>' ] ) : <EOL> image_expected = ndi . white_tophat ( image , footprint = footprint ) <EOL> testing . assert_array_equal ( new_image , image_expected ) <EOL> def test_3d_fallback_black_tophat ( ) : <EOL> image = np . ones ( ( <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:7> ) , dtype = bool ) <EOL> image [ <NUM_LIT:2> , <NUM_LIT:2> : <NUM_LIT:4> , <NUM_LIT:2> : <NUM_LIT:4> ] = <NUM_LIT:0> <EOL> image [ <NUM_LIT:3> , <NUM_LIT:2> : <NUM_LIT:5> , <NUM_LIT:2> : <NUM_LIT:5> ] = <NUM_LIT:0> <EOL> image [ <NUM_LIT:4> , <NUM_LIT:3> : <NUM_LIT:5> , <NUM_LIT:3> : <NUM_LIT:5> ] = <NUM_LIT:0> <EOL> with expected_warnings ( [ '<STR_LIT>' ] ) : <EOL> new_image = grey . black_tophat ( image ) <EOL> footprint = ndi . generate_binary_structure ( <NUM_LIT:3> , <NUM_LIT:1> ) <EOL> with expected_warnings ( [ '<STR_LIT>' ] ) : <EOL> image_expected = ndi . black_tophat ( image , footprint = footprint ) <EOL> testing . assert_array_equal ( new_image , image_expected ) <EOL> def test_2d_ndimage_equivalence ( ) : <EOL> image = np . zeros ( ( <NUM_LIT:9> , <NUM_LIT:9> ) , np . uint8 ) <EOL> image [ <NUM_LIT:2> : - <NUM_LIT:2> , <NUM_LIT:2> : - <NUM_LIT:2> ] = <NUM_LIT> <EOL> image [ <NUM_LIT:3> : - <NUM_LIT:3> , <NUM_LIT:3> : - <NUM_LIT:3> ] = <NUM_LIT> <EOL> image [ <NUM_LIT:4> , <NUM_LIT:4> ] = <NUM_LIT:255> <EOL> opened = grey . opening ( image ) <EOL> closed = grey . closing ( image ) <EOL> selem = ndi . generate_binary_structure ( <NUM_LIT:2> , <NUM_LIT:1> ) <EOL> ndimage_opened = ndi . grey_opening ( image , footprint = selem ) <EOL> ndimage_closed = ndi . grey_closing ( image , footprint = selem ) <EOL> testing . assert_array_equal ( opened , ndimage_opened ) <EOL> testing . assert_array_equal ( closed , ndimage_closed ) <EOL> im = np . array ( [ [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ] ) <EOL> eroded = np . array ( [ [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ] ) <EOL> dilated = np . array ( [ [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ] ) <EOL> opened = np . array ( [ [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ] ) <EOL> closed = np . array ( [ [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ] ) <EOL> def test_float ( ) : <EOL> np . testing . assert_allclose ( grey . erosion ( im ) , eroded ) <EOL> np . testing . assert_allclose ( grey . dilation ( im ) , dilated ) <EOL> np . testing . assert_allclose ( grey . opening ( im ) , opened ) <EOL> np . testing . assert_allclose ( grey . closing ( im ) , closed ) <EOL> def test_uint16 ( ) : <EOL> with expected_warnings ( [ '<STR_LIT>' ] ) : <EOL> im16 , eroded16 , dilated16 , opened16 , closed16 = ( <EOL> map ( img_as_uint , [ im , eroded , dilated , opened , closed ] ) ) <EOL> np . testing . assert_allclose ( grey . erosion ( im16 ) , eroded16 ) <EOL> np . testing . assert_allclose ( grey . dilation ( im16 ) , dilated16 ) <EOL> np . testing . assert_allclose ( grey . opening ( im16 ) , opened16 ) <EOL> np . testing . assert_allclose ( grey . closing ( im16 ) , closed16 ) <EOL> def test_discontiguous_out_array ( ) : <EOL> image = np . array ( [ [ <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:2> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:5> , <NUM_LIT:1> ] ] , np . uint8 ) <EOL> out_array_big = np . zeros ( ( <NUM_LIT:5> , <NUM_LIT:5> ) , np . uint8 ) <EOL> out_array = out_array_big [ : : <NUM_LIT:2> , : : <NUM_LIT:2> ] <EOL> expected_dilation = np . array ( [ [ <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:6> , <NUM_LIT:0> , <NUM_LIT:6> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:5> ] ] , np . uint8 ) <EOL> expected_erosion = np . array ( [ [ <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ] ] , np . uint8 ) <EOL> grey . dilation ( image , out = out_array ) <EOL> testing . assert_array_equal ( out_array_big , expected_dilation ) <EOL> grey . erosion ( image , out = out_array ) <EOL> testing . assert_array_equal ( out_array_big , expected_erosion ) <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> testing . run_module_suite ( ) </s>
