Βιβλιοθήκη Java ανοιχτού κώδικα για επεξεργασία εικόνας
Ένα γενικής χρήσης, πολυδιάστατο API επεξεργασίας εικόνας που δημιουργεί νέες εικόνες, τροποποιεί υπάρχουσες εικόνες, δουλεύει με αραιά δεδομένα, αντιγράφει υπάρχουσα εικόνα χρησιμοποιώντας το Free Java API.
Η βιβλιοθήκη ανοιχτού κώδικα ImgLib2 δίνει στους προγραμματιστές λογισμικού τη δυνατότητα να δημιουργούν και να χειρίζονται εικόνες μέσα στις εφαρμογές Java τους. Η βιβλιοθήκη προσφέρει μια σχεδίαση που βασίζεται στη διεπαφή που επιτρέπει στους χρήστες να χρησιμοποιούν αριθμούς και μη αριθμούς τύπους δεδομένων με ευκολία μέσα στις δικές τους εφαρμογές.
Το ImgLib2 είναι μια πολυδιάστατη βιβλιοθήκη επεξεργασίας εικόνας γενικής χρήσης που παρέχει υποστήριξη για πολλά σημαντικά χαρακτηριστικά που σχετίζονται με την επεξεργασία εικόνας, όπως δημιουργία νέων εικόνων, τροποποίηση υπαρχουσών εικόνων, άνοιγμα και ανάγνωση υπαρχουσών εικόνων, εργασία με αραιά δεδομένα, αντιγραφή υπαρχουσών εικόνων, Γενική αντιγραφή δεδομένων εικόνας, Σχεδίαση σφαίρας, υποστήριξη παρεμβολής και πολλά άλλα.
Η βιβλιοθήκη είναι πολύ φιλική προς το χρήστη και αποφεύγει περιττές πολυπλοκότητες, επομένως οι προγραμματιστές μπορούν να επικεντρωθούν στην ουσία του αλγορίθμου κατά την ανάπτυξη των έργων τους. Το σπουδαίο με τη βιβλιοθήκη είναι ότι είναι ανεξάρτητη από τις διαστάσεις και επιτρέπει στους χρήστες να εκφράσουν τον κώδικά τους με τρόπο που να μπορεί να εφαρμοστεί σε δεδομένα πολλών διαστάσεων. Η λειτουργία της βιβλιοθήκης δεν περιορίζεται σε εικόνες μόνο υπάρχουν παραδείγματα που εργάζονται και σε αλληλουχίες RNA.
Ξεκινώντας με το ImgLib2
Ο ευκολότερος και προτεινόμενος τρόπος εγκατάστασης του ImgLib2 είναι μέσω του GitHub.
Εγκαταστήστε το ImgLib2 μέσω GitHub
go get -u github.com/imglib/imglib2.git
Δημιουργία νέων εικόνων μέσω Java
Η βιβλιοθήκη Java ανοιχτού κώδικα ImgLib2 περιλαμβάνει υποστήριξη για τη δημιουργία μιας νέας εικόνας από την αρχή με μόνο μερικές γραμμές κώδικα Java. Χρησιμοποιώντας τη βιβλιοθήκη ImgLib2, μπορείτε να δημιουργήσετε διαφορετικούς τύπους εικόνων, όπως απλές εικόνες, τρισδιάστατες εικόνες, 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 πλησιέστερων γειτόνων στην τοποθεσία του δείγματος.
Συνεργασία με Sparse Δεδομένα μέσα σε 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 );
}