Atvirojo kodo Java biblioteka vaizdo apdorojimui
Bendrosios paskirties daugiamačio vaizdo apdorojimo API, kuri kuria naujus vaizdus, modifikuoja esamus vaizdus, dirba su retais duomenimis, dubliuoja esamą vaizdą naudodama nemokamą Java API.
Atvirojo kodo ImgLib2 biblioteka suteikia programinės įrangos kūrėjams galimybę kurti ir manipuliuoti vaizdais savo Java programose. Biblioteka siūlo sąsaja pagrįstą dizainą, leidžiantį vartotojams lengvai naudoti skaitmeninius ir neskaitinius duomenų tipus savo programose.
„ImgLib2“ yra bendros paskirties daugiamatė vaizdų apdorojimo biblioteka, kuri palaiko keletą svarbių funkcijų, susijusių su vaizdo apdorojimu, pvz., naujų vaizdų kūrimas, esamų vaizdų modifikavimas, esamų vaizdų atidarymas ir skaitymas, darbas su retais duomenimis, esamų vaizdų kopijavimas, bendrasis vaizdo duomenų kopijavimas, sferos piešimas, interpoliacijos palaikymas ir daug daugiau.
Biblioteka yra labai patogi vartotojui ir išvengiama bereikalingo sudėtingumo, todėl kūrėjai kurdami projektus gali susikoncentruoti ties algoritmo esme. Puikus bibliotekos dalykas yra tai, kad ji nepriklauso nuo matmenų ir leidžia vartotojams išreikšti savo kodą taip, kad jį būtų galima pritaikyti daugelio dimensijų duomenims. Biblioteka veikia ne tik vaizdais, bet yra ir RNR sekų pavyzdžių.
Darbo su ImgLib2 pradžia
Lengviausias ir rekomenduojamas būdas įdiegti „ImgLib2“ yra per „GitHub“.
Įdiekite „ImgLib2“ per „GitHub“.
go get -u github.com/imglib/imglib2.git
Naujų vaizdų kūrimas naudojant Java
Atvirojo kodo „Java“ bibliotekoje „ImgLib2“ yra palaikymas, leidžiantis sukurti naują vaizdą nuo nulio naudojant tik kelias „Java“ kodo eilutes. Naudodami ImgLib2 biblioteką galite kurti įvairių tipų vaizdus, pvz., paprastus vaizdus, 3D vaizdus, ImgFactory ir kt. Taip pat galite keisti esamų vaizdų vaizdus naudodami tik kelias kodo eilutes.
Kurkite naujus vaizdus naudodami 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 );
}
Vaizdo kopijavimas per Java API
Į ImgLib2 biblioteką įtraukta vaizdų dubliavimo funkcija naudojant Java komandas. Galite lengvai padaryti esamo vaizdo kopiją. Norėdami atlikti šią užduotį, galite naudoti žymeklius. Taip pat galite naudoti kopijavimo metodą, kuris yra bendras metodas, ir puiku, kad jis veiks su bet kokio tipo tipu.
Vaizdo kopijavimas per 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;
}
Peržiūrėkite vaizdus iš dalies per „Java“.
Nemokama „ImgLib2“ biblioteka leidžia programinės įrangos kūrėjams rodyti tik kai kurias vaizdo dalis savo programose per kelias „Java“ kodo eilutes. Rodiniai yra labai galingi ir galite juos naudoti norėdami parodyti pasirinktas vaizdų dalis, rodyti pasuktą vaizdą ir keletą kitų dalykų. Rodiniai gali būti atsitiktinai prieinami, intervalai, todėl juos galima pakeisti.
Retas duomenų valdymas
Nemokama ImgLib2 biblioteka suteikia programinės įrangos kūrėjams galimybę dirbti su mažais duomenimis naudojant Java kodą. Biblioteka pateikė dvi interpoliacijos schemas negausiems duomenims rodyti. Naudotojai gali apskaičiuoti kiekvienos vietos erdvėje vertę, grąžindami arba artimiausios imties vertę, arba interpoliuotą, pagal atstumą svertinę k artimiausių atrinktos vietos kaimynų vertę.
Dirbkite su retais duomenimis „Java Apps“.
// 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 );
}