Бібліотека Java з відкритим кодом для обробки зображень
Універсальний багатовимірний API обробки зображень, який створює нові зображення, змінює існуючі зображення, працює з розрідженими даними, дублює існуючі зображення за допомогою Free 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 і, отже, їх можна зробити повторюваними.
Керування розрідженими даними
Безкоштовна бібліотека 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 );
}