Библиотека Java с открытым исходным кодом для обработки изображений

API многомерной обработки изображений общего назначения, который создает новые изображения, изменяет существующие изображения, работает с разреженными данными, дублирует существующее изображение с помощью бесплатного API Java.

Библиотека ImgLib2 с открытым исходным кодом дает разработчикам программного обеспечения возможность создавать изображения и управлять ими внутри своих приложений Java. Библиотека предлагает дизайн, управляемый интерфейсом, который позволяет пользователям легко использовать числовые и нечисловые типы данных в своих собственных приложениях.

ImgLib2 — это многомерная библиотека обработки изображений общего назначения, которая обеспечивает поддержку нескольких важных функций, связанных с обработкой изображений, таких как создание новых изображений, изменение существующих изображений, открытие и чтение существующих изображений, работа с разреженными данными, дублирование существующих изображений, общие копирование данных изображения, рисование сферы, поддержка интерполяции и многое другое.

Библиотека очень удобна для пользователя и позволяет избежать ненужных сложностей, поэтому разработчики могут сосредоточиться на сути алгоритма при разработке своих проектов. Самое замечательное в библиотеке то, что она не зависит от измерений и позволяет пользователям выражать свой код таким образом, чтобы его можно было применять к многомерным данным. Работа библиотеки не ограничивается изображениями, есть примеры, работающие и с последовательностями РНК.

Previous Next

Начало работы с ImgLib2

Самый простой и рекомендуемый способ установки ImgLib2 — через GitHub.

Установите ImgLib2 через GitHub

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

Создание новых изображений с помощью Java

Библиотека Java с открытым исходным кодом ImgLib2 включает поддержку создания нового образа с нуля с помощью всего нескольких строк кода Java. Используя библиотеку ImgLib2, вы можете создавать различные типы изображений, такие как простые изображения, 3D-изображения, ImgFactory и многое другое. Вы также можете изменить изображения существующих изображений с помощью всего нескольких строк кода.

Создать новые изображения через 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 );
        }

Дублирование изображений через Java API

В библиотеку ImgLib2 включены функции для дублирования изображений с помощью команд Java. Вы можете легко сделать копию существующего изображения. Вы можете использовать курсоры для выполнения этой задачи. Вы также можете использовать метод копирования, который является универсальным методом, и самое замечательное то, что он будет работать с любым типом типа.

Duplicate Image через 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;
	}

Просмотр изображений частично через Java

Бесплатная библиотека ImgLib2 позволяет разработчикам программного обеспечения отображать в своих приложениях только некоторые части изображения с помощью пары строк кода Java. Представления очень мощны, и вы можете использовать их для отображения выбранных частей изображений, отображения повернутого вида и некоторых других вещей. Представления могут быть RandomAccessible, Interval и, следовательно, могут быть сделаны Iterable.

Управление разреженными данными

Бесплатная библиотека ImgLib2 дает разработчикам программного обеспечения возможность работать с разреженными данными с помощью кода Java. Библиотека предоставила две схемы интерполяции для отображения разреженных данных. Пользователи могут вычислить значение для каждого местоположения в пространстве, возвращая либо значение ближайшей выборки, либо интерполированное взвешенное по расстоянию значение k ближайших соседей к выбранному местоположению.

Работа с Sparse Data внутри 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 );
	}
 Русский