Avoimen lähdekoodin Java-kirjasto kuvankäsittelyä varten
Yleiskäyttöinen, moniulotteinen kuvankäsittelysovellusliittymä, joka luo uusia kuvia, muokkaa olemassa olevia kuvia, työskentelee niukalla datalla ja kopioi olemassa olevan kuvan ilmaisen Java API:n avulla.
Avoimen lähdekoodin ImgLib2-kirjasto antaa ohjelmistokehittäjille mahdollisuuden luoda ja käsitellä kuvia Java-sovelluksissaan. Kirjasto tarjoaa käyttöliittymäpohjaisen suunnittelun, jonka avulla käyttäjät voivat käyttää numeerisia ja ei-numeerisia tietotyyppejä helposti omissa sovelluksissaan.
ImgLib2 on yleiskäyttöinen, moniulotteinen kuvankäsittelykirjasto, joka tukee useita tärkeitä kuvankäsittelyyn liittyviä ominaisuuksia, kuten uusien kuvien luomista, olemassa olevien kuvien muokkaamista, olemassa olevien kuvien avaamista ja lukemista, niukan datan käsittelyä, olemassa olevien kuvien monistamista, yleistä kuvatietojen kopiointi, pallon piirtäminen, interpolointituki ja paljon muuta.
Kirjasto on erittäin käyttäjäystävällinen ja välttää turhat monimutkaiset, joten kehittäjät voivat keskittyä algoritmin olemukseen kehittäessään projektejaan. Hienoa kirjastossa on, että se on ulottuvuuksista riippumaton ja antaa käyttäjille mahdollisuuden ilmaista koodiaan tavalla, jota voidaan soveltaa moniulotteiseen dataan. Kirjaston toiminta ei rajoitu kuviin, vaan on esimerkkejä myös RNA-sekvensseistä.
ImgLib2:n käytön aloittaminen
Helpoin ja suositeltava tapa asentaa ImgLib2 on GitHubin kautta.
Asenna ImgLib2 GitHubin kautta
go get -u github.com/imglib/imglib2.git
Uusien kuvien luominen Javalla
Avoimen lähdekoodin Java-kirjasto ImgLib2 sisältää tuen uuden kuvan luomiseen alusta alkaen vain parilla Java-koodirivillä. ImgLib2-kirjaston avulla voit luoda erilaisia kuvia, kuten yksinkertaisia kuvia, 3D-kuvia, ImgFactory-kuvia ja paljon muuta. Voit myös muokata kuvia olemassa olevista kuvista vain muutamalla koodirivillä.
Luo uusia kuvia Java API:n kautta
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 );
}
Kuvan monistaminen Java API:n kautta
ImgLib2-kirjastossa on toiminnot kuvien monistamiseen Java-komentojen avulla. Voit helposti tehdä kopion olemassa olevasta kuvasta. Voit käyttää kohdistimia tämän tehtävän suorittamiseen. Voit myös käyttää kopiointimenetelmää, joka on yleinen menetelmä, ja hienoa on, että se toimii kaikenlaisissa tyypeissä.
Kopioi kuva Java API:n kautta
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;
}
Katsele kuvia osittain Javan kautta
Ilmaisen ImgLib2-kirjaston avulla ohjelmistokehittäjät voivat näyttää vain osan kuvasta sovellusten sisällä muutaman Java-koodirivin avulla. Näkymät ovat erittäin tehokkaita, ja voit käyttää niitä kuvien valittujen osien näyttämiseen, käännetyn näkymän ja muutamien muiden asioiden näyttämiseen. Näkymät voivat olla RandomAccessible, Interval, ja ne voidaan siksi tehdä iteroitaviksi.
Harva tiedonhallinta
Ilmainen ImgLib2-kirjasto antaa ohjelmistokehittäjille mahdollisuuden käsitellä niukkoja tietoja Java-koodin avulla. Kirjasto on tarjonnut kaksi interpolointimallia harvaan datan näyttämiseen. Käyttäjät voivat laskea arvon jokaiselle avaruuden sijainnille palauttamalla joko lähimmän näytteen arvon tai interpoloidun, etäisyydellä painotetun arvon k lähimpien naapureiden näytteille.
Työskentele harvassa datassa Java-sovellusten sisällä
// 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 );
}