1. Produkty
  2.   Obraz
  3.   Java
  4.   ImgLib2
 
  

Biblioteka Java Open Source do przetwarzania obrazów

Uniwersalny interfejs API wielowymiarowego przetwarzania obrazów, który tworzy nowe obrazy, modyfikuje istniejące obrazy, pracuje z rzadkimi danymi i duplikuje istniejący obraz za pomocą interfejsu Free Java API.

Biblioteka ImgLib2 o otwartym kodzie źródłowym daje programistom możliwość tworzenia i manipulowania obrazami w ich aplikacjach Java. Biblioteka oferuje projekt oparty na interfejsie, który umożliwia użytkownikom łatwe korzystanie z numerycznych i nienumerycznych typów danych we własnych aplikacjach.

ImgLib2 to uniwersalna, wielowymiarowa biblioteka do przetwarzania obrazów, która zapewnia obsługę kilku ważnych funkcji związanych z przetwarzaniem obrazów, takich jak tworzenie nowych obrazów, modyfikowanie istniejących obrazów, otwieranie i odczytywanie istniejących obrazów, praca z rzadkimi danymi, duplikowanie istniejących obrazów, Ogólne kopiowanie danych obrazu, rysowanie kuli, obsługa interpolacji i wiele innych.

Biblioteka jest bardzo przyjazna dla użytkownika i unika zbędnych komplikacji, dzięki czemu programiści mogą skoncentrować się na istocie algorytmu podczas opracowywania swoich projektów. Wspaniałą rzeczą w bibliotece jest to, że jest ona niezależna od wymiarów i umożliwia użytkownikom wyrażanie kodu w sposób, który można zastosować do danych wielowymiarowych. Działanie biblioteki nie ogranicza się do obrazów, istnieją tylko przykłady działające na sekwencjach RNA.

Previous Next

Pierwsze kroki z ImgLib2

Najłatwiejszym i zalecanym sposobem instalacji ImgLib2 jest korzystanie z usługi GitHub.

Zainstaluj ImgLib2 przez GitHub

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

Tworzenie nowych obrazów za pomocą Javy

Biblioteka Java ImgLib2 o otwartym kodzie źródłowym zawiera obsługę tworzenia nowego obrazu od podstaw za pomocą zaledwie kilku linii kodu Java. Korzystając z biblioteki ImgLib2, możesz tworzyć różne typy obrazów, takie jak proste obrazy, obrazy 3D, ImgFactory i inne. Możesz także modyfikować obrazy istniejących obrazów za pomocą kilku linijek kodu.

Twórz nowe obrazy za 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 );
        }

Powielanie obrazu za pomocą Java API

Biblioteka ImgLib2 zawiera funkcje do powielania obrazów za pomocą poleceń Java. Możesz łatwo zrobić kopię istniejącego obrazu. Do wykonania tego zadania możesz użyć Kursorów. Możesz również użyć metody kopiowania, która jest metodą generyczną, a wspaniałe jest to, że będzie działać na każdym typie.

Zduplikuj obraz za pomocą 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;
	}

Przeglądaj obrazy częściowo przez Java

Bezpłatna biblioteka ImgLib2 umożliwia twórcom oprogramowania wyświetlanie tylko niektórych części obrazu w ich aplikacjach za pomocą kilku wierszy kodu Java. Widoki są bardzo rozbudowane i można ich używać do wyświetlania wybranych części obrazów, wyświetlania obróconego widoku i kilku innych rzeczy. Widoki mogą być RandomAccessible, Interval, a zatem mogą być iterowalne.

Zarządzanie rzadkimi danymi

Bezpłatna biblioteka ImgLib2 daje programistom możliwość pracy z rzadkimi danymi przy użyciu kodu Java. Biblioteka udostępniła dwa schematy interpolacji do wyświetlania rzadkich danych. Użytkownicy mogą obliczyć wartość dla każdej lokalizacji w przestrzeni, zwracając albo wartość najbliższej próbki, albo interpolowaną, ważoną odległością wartość k najbliższych sąsiadów do próbkowanej lokalizacji.

Praca z rzadkimi danymi w aplikacjach Java


        // 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 );
	}
 Polski