/* * #%L * ImgLib2: a general-purpose, multidimensional image processing library. * %% * Copyright (C) 2009 - 2016 Tobias Pietzsch, Stephan Preibisch, Stephan Saalfeld, * John Bogovic, Albert Cardona, Barry DeZonia, Christian Dietz, Jan Funke, * Aivar Grislis, Jonathan Hale, Grant Harris, Stefan Helfrich, Mark Hiner, * Martin Horn, Steffen Jaensch, Lee Kamentsky, Larry Lindsey, Melissa Linkert, * Mark Longair, Brian Northan, Nick Perry, Curtis Rueden, Johannes Schindelin, * Jean-Yves Tinevez and Michael Zinsmaier. * %% * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * #L% */ import ij.ImageJ; import io.scif.img.IO; import io.scif.img.ImgIOException; import net.imglib2.RandomAccessibleInterval; import net.imglib2.algorithm.gauss3.Gauss3; import net.imglib2.exception.IncompatibleTypeException; import net.imglib2.img.Img; import net.imglib2.img.display.imagej.ImageJFunctions; import net.imglib2.type.numeric.real.FloatType; import net.imglib2.view.Views; /** * Use of Gaussian Convolution on the Image * * @author Stephan Preibisch * @author Stephan Saalfeld */ public class Example6a4 { public Example6a4() throws ImgIOException, IncompatibleTypeException { // open with ImgOpener as a FloatType Img< FloatType > image = IO.openImgs( "DrosophilaWing.tif", new FloatType() ).get( 0 ); // perform all (n-1)-dimensional gaussian (in this case it means 1d) on // some of the row/columns double[] sigma = new double[ image.numDimensions() - 1 ]; for ( int d = 0; d < sigma.length; ++d ) sigma[ d ] = 16; // iterate over all dimensions, take always a hyperslice for ( int dim = 0; dim < image.numDimensions(); ++dim ) // iterate over all possible hyperslices for ( long pos = 0; pos < image.dimension( dim ); ++pos ) // convolve a subset of the 1-dimensional views if ( pos/30 % 2 == 1 ) { // get the n-1 dimensional "slice" RandomAccessibleInterval< FloatType > view = Views.hyperSlice( image, dim, pos ); // compute the gauss in-place on the view Gauss3.gauss( sigma, Views.extendMirrorSingle( view ), view ); } // show the result ImageJFunctions.show( image ); } public static void main( String[] args ) throws ImgIOException, IncompatibleTypeException { // open an ImageJ window new ImageJ(); // run the example new Example6a4(); } }