package fr.unistra.pelican.algorithms.morphology.gray;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import fr.unistra.pelican.BooleanImage;
import fr.unistra.pelican.Image;
import fr.unistra.pelican.algorithms.conversion.RGBToGray;
import fr.unistra.pelican.algorithms.io.ImageLoader;
import fr.unistra.pelican.util.morphology.FlatStructuringElement2D;
public class GrayDilationTest {
@Test
public void testGrayDilation() {
Image image = ImageLoader.exec("src/test/resources/watershed.png");
if ( image.getBDim() != 1 ) image = RGBToGray.exec( image );
BooleanImage se = FlatStructuringElement2D.createSquareFlatStructuringElement(5);
Image result = GrayDilation.exec( image,se );
Image truth = ImageLoader.exec("src/test/resources/graydilation-square5x5-truth.png");
System.out.println( "Ceci indique que la dilatation plante pas. " +
"C'est le résultat qu'est pas bon." );
assertEquals( truth.size(), result.size() );
for ( int i = 0 ; i < truth.size() ; i++ )
assertEquals( result.getPixelByte(i), truth.getPixelByte(i) );
} // endfunc
public static void main(String[] args) {
new GrayDilationTest().testGrayDilation();
Image image = ImageLoader.exec( "src/test/resources/watershed.png" );
Image compare = image.copyImage( true );
fr.unistra.pelican.algorithms.visualisation.Viewer2D.exec( image,"image de départ" );
if ( image.getBDim() != 1 ) image = RGBToGray.exec( image );
BooleanImage se = FlatStructuringElement2D.createSquareFlatStructuringElement(5);
Image truth = ImageLoader.exec("src/test/resources/graydilation-square5x5-truth.png");
int size = truth.size();
int xdim = truth.getXDim();
int ydim = truth.getYDim();
int tdim = truth.getTDim();
int bdim = truth.getBDim();
int zdim = truth.getZDim();
System.out.println( "A)" );
long start = System.currentTimeMillis();
Image base = GrayDilation.exec( image,se );
long end = System.currentTimeMillis();
System.out.println( "B)" );
long starts = System.currentTimeMillis();
Image opt = GrayDilation.exec( image,se,null,GrayErosion.RECTANGLE_OPTIMIZATION );
long ends = System.currentTimeMillis();
System.out.println( "taille de l'image: "+xdim+","+ydim+","+zdim+","+tdim+","+bdim );
System.out.println( "machin de base: "+( end-start ) + "ms." );
System.out.println( "truc optimisé: "+( ends-starts ) + "ms." );
//// fr.unistra.pelican.algorithms.visualisation.Viewer2D.exec( image,"image grise" );
//// fr.unistra.pelican.algorithms.visualisation.Viewer2D.exec( base,"machin de base" );
//// fr.unistra.pelican.algorithms.visualisation.Viewer2D.exec( opt,"truc optimisé" );
assertEquals( xdim,base.getXDim(),opt.getXDim() );
assertEquals( ydim,base.getYDim(),opt.getYDim() );
assertEquals( zdim,base.getZDim(),opt.getZDim() );
assertEquals( tdim,base.getTDim(),opt.getTDim() );
assertEquals( bdim,base.getBDim(),opt.getBDim() );
for ( int t = 0 ; t < tdim ; t++ )
for ( int z = 0 ; z < zdim ; z++ )
for ( int y = 0 ; y < ydim ; y++ )
for ( int x = 0 ; x < xdim ; x++ )
for ( int b = 0 ; b < bdim ; b++ ) {
if ( !image.isPresentXYZTB(x,y,z,t,b) ) continue;
if ( truth.getPixelXYZTBByte(x,y,z,t,b) != opt.getPixelXYZTBByte(x,y,z,t,b) ) {
compare.setPixelXYZTBByte( x,y,z,t,0, 255 );
compare.setPixelXYZTBByte( x,y,z,t,1, 0 );
compare.setPixelXYZTBByte( x,y,z,t,2, 0 );
}
}
fr.unistra.pelican.algorithms.visualisation.Viewer2D.exec( compare,"conflits" );
for ( int i = 0; i < size; i++ )
if ( !image.isPresent( i ) ) continue;
else assertEquals( truth.getPixelByte(i),opt.getPixelByte(i) );
} // endmain
}