Библиотека Java с открытым исходным кодом для обработки изображений
API многомерной обработки изображений общего назначения, который создает новые изображения, изменяет существующие изображения, работает с разреженными данными, дублирует существующее изображение с помощью бесплатного API Java.
Библиотека ImgLib2 с открытым исходным кодом дает разработчикам программного обеспечения возможность создавать изображения и управлять ими внутри своих приложений Java. Библиотека предлагает дизайн, управляемый интерфейсом, который позволяет пользователям легко использовать числовые и нечисловые типы данных в своих собственных приложениях.
ImgLib2 — это многомерная библиотека обработки изображений общего назначения, которая обеспечивает поддержку нескольких важных функций, связанных с обработкой изображений, таких как создание новых изображений, изменение существующих изображений, открытие и чтение существующих изображений, работа с разреженными данными, дублирование существующих изображений, общие копирование данных изображения, рисование сферы, поддержка интерполяции и многое другое.
Библиотека очень удобна для пользователя и позволяет избежать ненужных сложностей, поэтому разработчики могут сосредоточиться на сути алгоритма при разработке своих проектов. Самое замечательное в библиотеке то, что она не зависит от измерений и позволяет пользователям выражать свой код таким образом, чтобы его можно было применять к многомерным данным. Работа библиотеки не ограничивается изображениями, есть примеры, работающие и с последовательностями РНК.
Начало работы с 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 );
}