1. produkty
  2.   obraz
  3.   Java
  4.   ImgLib2
 
  

Open Source Java knihovna pro zpracování obrazu

Univerzální, vícerozměrné rozhraní API pro zpracování obrázků, které vytváří nové obrázky, upravuje stávající obrázky, pracuje s řídkými daty a duplikuje existující obrázek pomocí bezplatného Java API.

Knihovna ImgLib2 s otevřeným zdrojovým kódem dává vývojářům softwaru možnost vytvářet a manipulovat s obrázky v jejich aplikacích Java. Knihovna nabízí design řízený rozhraním, který umožňuje uživatelům snadno používat numerické a nenumerické datové typy v rámci jejich vlastních aplikací.

ImgLib2 je univerzální knihovna pro zpracování vícerozměrných obrázků, která poskytuje podporu pro několik důležitých funkcí souvisejících se zpracováním obrázků, jako je vytváření nových obrázků, úprava existujících obrázků, otevírání a čtení existujících obrázků, práce s řídkými daty, duplikování existujících obrázků, generické kopírování obrazových dat, kreslení koule, podpora interpolace a mnoho dalších.

Knihovna je uživatelsky velmi přívětivá a vyhýbá se zbytečným složitostem, takže se vývojáři mohou při vývoji svých projektů soustředit na podstatu algoritmu. Skvělá věc na knihovně je, že je nezávislá na rozměrech a umožňuje uživatelům vyjádřit svůj kód způsobem, který lze aplikovat na mnohorozměrná data. Práce s knihovnou není omezena na obrázky, jsou zde uvedeny příklady pracující i na sekvencích RNA.

Previous Next

Začínáme s ImgLib2

Nejjednodušší a doporučený způsob instalace ImgLib2 je přes GitHub.

Nainstalujte ImgLib2 přes GitHub

go get -u github.com/imglib/imglib2.git 

Vytváření nových obrázků přes Java

Open source Java knihovna ImgLib2 obsahuje podporu pro vytvoření nového obrazu od začátku s pouhými několika řádky kódu Java. Pomocí knihovny ImgLib2 můžete vytvářet různé typy obrázků, jako jsou jednoduché obrázky, 3D obrázky, ImgFactory a další. Můžete také upravit obrázky stávajících obrázků pomocí pouhých několika řádků kódu.

Vytvářejte nové obrázky pomocí Java API


        public Example1c()
        {
            // create the ImgFactory based on cells (cellsize = 5x5x5...x5) that will
            // instantiate the Img
            final ImgFactory< FloatType > imgFactory = new CellImgFactory<>( new FloatType(), 5 );
            // create an 3d-Img with dimensions 20x30x40 (here cellsize is 5x5x5)Ø
            final Img< FloatType > img1 = imgFactory.create( 20, 30, 40 );
            // create another image with the same size. Note that the input provides the size for the new image as it implements the Interval interface
            final Img< FloatType > img2 = imgFactory.create( img1 );
            // display both (but they are empty)
            ImageJFunctions.show( img1 );
            ImageJFunctions.show( img2 );
        }

Duplikace obrazu přes Java API

Knihovna ImgLib2 obsahuje funkce pro duplikaci obrazu pomocí příkazů Java. Můžete snadno vytvořit kopii stávajícího obrázku. K dosažení tohoto úkolu můžete použít kurzory. Můžete také použít metodu kopírování, což je obecná metoda a skvělé je, že bude fungovat na jakémkoli typu.

Duplikovat obrázek přes Java API


	public DuplicateImage() throws ImgIOException
	{
		// open with SCIFIO as a FloatType
		Img< FloatType > img = IO.openImgs( "DrosophilaWing.tif", new FloatType() ).get( 0 );
		// copy the image, as it is a generic method it also works with FloatType
		Img< FloatType > duplicate = copyImage( img );
		// display the copy
		ImageJFunctions.show( duplicate );
	}
        // Generic, type-agnostic method to create an identical copy of an Img
	public < T extends Type< T > > Img< T > copyImage( final Img< T > input )
	{
		// create a new Image with the same properties
		Img< T > output = input.factory().create( input );
		// create a cursor for both images
		Cursor< T > cursorInput = input.cursor();
		Cursor< T > cursorOutput = output.cursor();
		// iterate over the input
		while ( cursorInput.hasNext())
		{
			// move both cursors forward by one pixel
			cursorInput.fwd();
			cursorOutput.fwd();
			// set the value of this pixel of the output image to the same as the input,
			// every Type supports T.set( T type )
			cursorOutput.get().set( cursorInput.get() );
		}
		// return the copy
		return output;
	}

Zobrazení obrázků Částečně přes Javu

Bezplatná knihovna ImgLib2 umožňuje vývojářům softwaru zobrazit pouze některé části obrazu v jejich aplikacích prostřednictvím několika řádků kódu Java. Pohledy jsou velmi výkonné a můžete je použít k zobrazení vybraných částí obrázků, zobrazení otočeného pohledu a několika dalších věcí. Zobrazení mohou být RandomAccessible, Interval, a proto mohou být iterovatelná.

Správa řídkých dat

Bezplatná knihovna ImgLib2 poskytuje vývojářům softwaru možnost pracovat s řídkými daty pomocí kódu Java. Knihovna poskytla dvě interpolační schémata pro zobrazení řídkých dat. Uživatelé mohou vypočítat hodnotu pro každé místo v prostoru tak, že vrátí hodnotu nejbližšího vzorku nebo interpolovanou, vzdáleností váženou hodnotu k nejbližších sousedů k navzorkovanému umístění.

Práce s řídkými daty v rámci Java Apps


        // Working with sparse data
	public SparseExample()
	{
		// the interval in which to create random points
		FinalInterval interval = new FinalInterval( new long[] { 375, 200 } );
		// create an IterableRealInterval
		IterableRealInterval< FloatType > realInterval = createRandomPoints( interval, 250 );
		// using nearest neighbor search we will be able to return a value an any position in space
		NearestNeighborSearch< FloatType > search =
			new NearestNeighborSearchOnKDTree<>(
				new KDTree<>( realInterval ) );
		// make it into RealRandomAccessible using nearest neighbor search
		RealRandomAccessible< FloatType > realRandomAccessible =
			Views.interpolate( search, new NearestNeighborSearchInterpolatorFactory< FloatType >() );
		// convert it into a RandomAccessible which can be displayed
		RandomAccessible< FloatType > randomAccessible = Views.raster( realRandomAccessible );
		// set the initial interval as area to view
		RandomAccessibleInterval< FloatType > view = Views.interval( randomAccessible, interval );
		// display the view
		ImageJFunctions.show( view );
		// compute a gauss on it
		Img< FloatType > convolved = new ArrayImgFactory<>( new FloatType() ).create( interval );
		Gauss.inFloat( new double[] { 3, 3 }, view, interval, convolved,
			new Point( view.numDimensions() ), convolved.factory() );
		// display the view
		ImageJFunctions.show( convolved );
	}
 Čeština