مكتبة جافا مفتوحة المصدر لمعالجة الصور
واجهة برمجة تطبيقات معالجة الصور متعددة الأبعاد للأغراض العامة والتي تنشئ صورًا جديدة وتعديل الصور الحالية والعمل مع البيانات المتفرقة وتكرار الصورة الحالية باستخدام Free Java API.
توفر مكتبة ImgLib2 مفتوحة المصدر لمطوري البرامج القدرة على إنشاء الصور ومعالجتها داخل تطبيقات Java الخاصة بهم. تقدم المكتبة تصميمًا يعتمد على الواجهة يمكّن المستخدمين من استخدام أنواع البيانات الرقمية وغير الرقمية بسهولة داخل تطبيقاتهم الخاصة.
ImgLib2 عبارة عن مكتبة معالجة صور متعددة الأبعاد للأغراض العامة توفر دعمًا للعديد من الميزات المهمة المتعلقة بمعالجة الصور ، مثل إنشاء صور جديدة وتعديل الصور الموجودة وفتح وقراءة الصور الموجودة والعمل مع البيانات المتفرقة وتكرار الصور الموجودة والعامة نسخ بيانات الصورة ورسم الكرة ودعم الاستيفاء وغير ذلك الكثير.
المكتبة سهلة الاستخدام للغاية وتتجنب التعقيدات غير الضرورية وبالتالي يمكن للمطورين التركيز على جوهر الخوارزمية أثناء تطوير مشاريعهم. إن الشيء العظيم في المكتبة هو أنها مستقلة عن البعد وتسمح للمستخدمين بالتعبير عن الكود الخاص بهم بطريقة يمكن تطبيقها على البيانات متعددة الأبعاد. لا يقتصر عمل المكتبة على الصور فقط ، فهناك أمثلة تعمل على تسلسل الحمض النووي الريبي أيضًا.
الشروع في استخدام ImgLib2
الطريقة الأسهل والموصى بها لتثبيت ImgLib2 هي عبر GitHub.
قم بتثبيت ImgLib2 عبر GitHub
go get -u github.com/imglib/imglib2.git
إنشاء صور جديدة عبر جافا
تضمنت مكتبة 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 وبالتالي يمكن جعلها قابلة للتكرار.
إدارة البيانات المتفرقة
تمنح مكتبة ImgLib2 المجانية مطوري البرامج القدرة على العمل مع البيانات المتفرقة باستخدام كود Java. قدمت المكتبة نظامي استيفاء لعرض البيانات المتفرقة. يمكن للمستخدمين حساب قيمة لكل موقع في الفضاء من خلال إرجاع إما قيمة أقرب عينة أو قيمة محرفة ومرجحة للمسافة لأقرب جيران k إلى الموقع الذي تم أخذ العينة فيه.
العمل مع البيانات المتفرقة داخل تطبيقات جافا
// 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 );
}