Şəkil Emalı üçün Açıq Mənbəli Java Kitabxanası
Pulsuz Java API-dən istifadə edərək, yeni şəkillər yaradan, mövcud şəkilləri dəyişdirən, seyrək verilənlərlə işləyən, mövcud təsviri təkrarlayan Ümumi təyinatlı, Çoxölçülü Şəkil Emalı API.
Açıq mənbə ImgLib2 kitabxanası proqram tərtibatçılarına Java proqramlarında şəkillər yaratmaq və manipulyasiya etmək imkanı verir. Kitabxana istifadəçilərə öz proqramlarında asanlıqla rəqəmli və qeyri-rəqəmli məlumat növlərindən istifadə etməyə imkan verən interfeysə əsaslanan dizayn təklif edir.
ImgLib2, yeni şəkillər yaratmaq, mövcud şəkilləri dəyişdirmək, mövcud şəkilləri açmaq və oxumaq, seyrək məlumatlarla işləmək, mövcud şəkilləri çoxaltmaq, Ümumi təsvirlər yaratmaq kimi təsvirin emalı ilə bağlı bir sıra vacib funksiyaları dəstəkləyən ümumi təyinatlı, çoxölçülü təsvir emalı kitabxanasıdır. şəkil məlumatlarının surətinin çıxarılması, sferanın çəkilməsi, interpolyasiya dəstəyi və s.
Kitabxana çox istifadəçi dostudur və lazımsız mürəkkəbliklərdən qaçır, beləliklə tərtibatçılar öz layihələrini hazırlayarkən alqoritmin mahiyyətinə diqqət yetirə bilərlər. Kitabxananın ən gözəl cəhəti odur ki, o, ölçüdən müstəqildir və istifadəçilərə kodlarını çoxölçülü məlumatlara tətbiq oluna biləcək şəkildə ifadə etməyə imkan verir. Kitabxananın işləməsi yalnız şəkillərlə məhdudlaşmır, RNT ardıcıllığı üzərində işləyən nümunələr də var.
ImgLib2 ilə işə başlamaq
ImgLib2-ni quraşdırmağın ən asan və tövsiyə olunan yolu GitHub vasitəsilədir.
GitHub vasitəsilə ImgLib2-ni quraşdırın
go get -u github.com/imglib/imglib2.git
Java vasitəsilə yeni şəkillərin yaradılması
ImgLib2 açıq mənbəli Java kitabxanasına sadəcə bir neçə sətir Java kodu ilə sıfırdan yeni şəkil yaratmaq dəstəyi daxildir. ImgLib2 kitabxanasından istifadə edərək sadə şəkillər, 3D şəkillər, ImgFactory və s. kimi müxtəlif növ şəkillər yarada bilərsiniz. Siz həmçinin mövcud şəkillərin şəkillərini yalnız bir neçə sətir kodla dəyişdirə bilərsiniz.
Java API vasitəsilə yeni şəkillər yaradın
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 vasitəsilə şəkillərin təkrarlanması
ImgLib2 kitabxanasına Java əmrlərindən istifadə edərək şəkillərin təkrarlanması üçün funksionallıq daxildir. Mövcud şəklin surətini asanlıqla yarada bilərsiniz. Bu tapşırığı yerinə yetirmək üçün Kursorlardan istifadə edə bilərsiniz. Siz həmçinin ümumi metod olan surət çıxarma metodundan istifadə edə bilərsiniz və ən yaxşısı odur ki, o, istənilən növdə işləyəcək.
Java API vasitəsilə Şəkili Dublikat edin
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;
}
Şəkillərə qismən Java vasitəsilə baxın
Pulsuz ImgLib2 kitabxanası proqram tərtibatçılarına bir neçə sətir Java kodu vasitəsilə öz proqramlarında təsvirin yalnız bəzi hissələrini göstərməyə imkan verir. Görünüşlər çox güclüdür və siz onlardan şəkillərin seçilmiş hissələrini göstərmək, fırlanan görünüşü göstərmək və bir neçə başqa şey üçün istifadə edə bilərsiniz. Baxışlar Random Accessible, Interval ola bilər və buna görə də Iterable edilə bilər.
Seyrək Məlumat İdarəetmə
Pulsuz ImgLib2 kitabxanası proqram tərtibatçılarına Java kodundan istifadə edərək seyrək verilənlərlə işləmək imkanı verir. Kitabxana seyrək məlumatları göstərmək üçün iki interpolyasiya sxemi təqdim etmişdir. İstifadəçilər ya ən yaxın nümunənin dəyərini, ya da k ən yaxın qonşuların interpolyasiya edilmiş, məsafə ölçülmüş dəyərini nümunə götürülmüş yerə qaytarmaqla kosmosdakı hər yer üçün dəyəri hesablaya bilərlər.
Java Tətbiqlərində Seyrək Məlumatlarla işləyin
// 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 );
}