Java библиотека с отворен код за обработка на изображения
API за многоизмерна обработка на изображения с общо предназначение, който създава нови изображения, модифицира съществуващи изображения, работи с оскъдни данни, дублира съществуващо изображение с помощта на безплатен Java API.
Библиотеката 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 команди. Можете лесно да направите копие на съществуващото изображение. Можете да използвате курсори, за да постигнете тази задача. Можете също така да използвате метода на копиране, който е общ метод и страхотното е, че ще работи на всякакъв тип.
Дублиране на изображение чрез 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 най-близките съседи на избраното местоположение.
Работете с редки данни в 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 );
}