Bibliotecă Java cu sursă deschisă pentru procesarea imaginilor
Un API de procesare a imaginilor multidimensională, cu scop general, care creează imagini noi, modifică imaginile existente, lucrează cu date rare, duplică imaginea existentă folosind API-ul Java gratuit.
Biblioteca cu sursă deschisă ImgLib2 oferă dezvoltatorilor de software capacitatea de a crea și manipula imagini în aplicațiile lor Java. Biblioteca oferă un design bazat pe interfață care permite utilizatorilor să utilizeze cu ușurință tipuri de date numerice și non-numerice în cadrul propriilor aplicații.
ImgLib2 este o bibliotecă de procesare a imaginilor multidimensională de uz general, care oferă suport pentru câteva caracteristici importante legate de procesarea imaginilor, cum ar fi crearea de noi imagini, modificarea imaginilor existente, deschiderea și citirea imaginilor existente, lucrul cu date rare, duplicarea imaginilor existente, generic copierea datelor de imagine, Desenarea unei sfere, suport pentru interpolare și multe altele.
Biblioteca este foarte ușor de utilizat și evită complexitățile inutile, astfel dezvoltatorii se pot concentra asupra esenței algoritmului în timp ce își dezvoltă proiectele. Lucrul grozav al bibliotecii este că este independent de dimensiune și permite utilizatorilor să-și exprime codul într-un mod care poate fi aplicat datelor cu mai multe dimensiuni. Funcționarea bibliotecii nu se limitează la imagini, doar există exemple care lucrează și pe secvențele de ARN.
Noțiuni introductive cu ImgLib2
Cel mai simplu și recomandat mod de a instala ImgLib2 este prin GitHub.
Instalați ImgLib2 prin GitHub
go get -u github.com/imglib/imglib2.git
Crearea de noi imagini prin Java
Biblioteca Java cu sursă deschisă ImgLib2 a inclus suport pentru crearea unei noi imagini de la zero cu doar câteva linii de cod Java. Folosind biblioteca ImgLib2, puteți crea diferite tipuri de imagini, cum ar fi imagini simple, imagini 3D, ImgFactory și altele. De asemenea, puteți modifica imaginile imaginilor existente cu doar câteva linii de cod.
Creați imagini noi prin API-ul Java
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 );
}
Duplicarea imaginii prin API-ul Java
Biblioteca ImgLib2 a inclus funcționalitate pentru duplicarea imaginilor folosind comenzi Java. Puteți face cu ușurință o copie a imaginii existente. Puteți folosi cursori pentru a realiza această sarcină. Puteți utiliza, de asemenea, metoda copierii, care este o metodă generică, iar lucrul grozav este că va funcționa pe orice tip de tip.
Imagine duplicată prin API-ul Java
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;
}
Vizualizați imaginile parțial prin Java
Biblioteca gratuită ImgLib2 le permite dezvoltatorilor de software să afișeze doar unele părți ale imaginii în aplicațiile lor prin câteva linii de cod Java. Vizualizările sunt foarte puternice și le puteți folosi pentru a afișa părți selectate ale imaginilor, pentru a afișa o vizualizare rotită și alte câteva lucruri. Vizualizările pot fi Acces aleatoriu, Interval și, prin urmare, pot fi făcute Iterabile.
Gestionarea datelor rare
Biblioteca gratuită ImgLib2 oferă dezvoltatorilor de software capacitatea de a lucra cu date rare folosind cod Java. Biblioteca a furnizat două scheme de interpolare pentru afișarea datelor rare. Utilizatorii pot calcula o valoare pentru fiecare locație din spațiu returnând fie valoarea celui mai apropiat eșantion, fie o valoare interpolată, ponderată în funcție de distanță, a celor mai apropiați k vecini de locația eșantionată.
Lucrați cu date rare în aplicațiile 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 );
}