کتابخانه جاوا منبع باز برای پردازش تصویر

یک API پردازش تصویر چند بعدی همه منظوره که تصاویر جدید ایجاد می‌کند، تصاویر موجود را اصلاح می‌کند، با داده‌های پراکنده کار می‌کند، تصویر موجود را با استفاده از Java API رایگان کپی می‌کند.

کتابخانه منبع باز ImgLib2 به توسعه دهندگان نرم افزار توانایی ایجاد و دستکاری تصاویر در برنامه های جاوا را می دهد. این کتابخانه یک طراحی مبتنی بر رابط ارائه می دهد که کاربران را قادر می سازد تا از انواع داده های عددی و غیر عددی به راحتی در برنامه های خود استفاده کنند.

ImgLib2 یک کتابخانه پردازش تصویر همه منظوره و چند بعدی است که از چندین ویژگی مهم مرتبط با پردازش تصویر پشتیبانی می کند، مانند ایجاد تصاویر جدید، اصلاح تصاویر موجود، باز کردن و خواندن تصاویر موجود، کار با داده های کم، کپی کردن تصاویر موجود، عمومی. کپی کردن داده های تصویر، ترسیم یک کره، پشتیبانی از درون یابی و بسیاری موارد دیگر.

این کتابخانه بسیار کاربرپسند است و از پیچیدگی‌های غیرضروری جلوگیری می‌کند، بنابراین توسعه‌دهندگان می‌توانند در حین توسعه پروژه‌های خود بر روی ماهیت الگوریتم تمرکز کنند. نکته مهم در مورد کتابخانه این است که مستقل از ابعاد است و به کاربران اجازه می دهد تا کد خود را به گونه ای بیان کنند که بتوان روی داده های چند بعدی اعمال کرد. کار کتابخانه به تصاویر محدود نمی شود، فقط نمونه هایی وجود دارد که روی توالی های RNA نیز کار می کنند.

Previous Next

شروع کار با ImgLib2

ساده ترین و توصیه شده ترین راه برای نصب ImgLib2 از طریق GitHub است.

ImgLib2 را از طریق GitHub نصب کنید

go get -u github.com/imglib/imglib2.git 

ایجاد تصاویر جدید از طریق جاوا

کتابخانه منبع باز جاوا ImgLib2 شامل پشتیبانی از ایجاد یک تصویر جدید از ابتدا تنها با چند خط کد جاوا است. با استفاده از کتابخانه 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 دارای قابلیتی برای تکثیر تصویر با استفاده از دستورات جاوا است. می توانید به راحتی از تصویر موجود کپی کنید. برای رسیدن به این کار می‌توانید از نشانگر استفاده کنید. شما همچنین می توانید از روش کپی استفاده کنید که یک روش عمومی است و نکته عالی این است که روی هر نوع Type کار می کند.

تصویر تکراری از طریق 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;
	}

مشاهده تصاویر تا حدی از طریق جاوا

کتابخانه رایگان ImgLib2 به توسعه دهندگان نرم افزار این امکان را می دهد که فقط برخی از قسمت های تصویر را در داخل برنامه های خود از طریق چند خط کد جاوا نمایش دهند. نماها بسیار قدرتمند هستند و می توانید از آنها برای نمایش قسمت های انتخاب شده از تصاویر، نمایش یک نمای چرخشی و چند مورد دیگر استفاده کنید. نماها می توانند RandomAccessible، Interval باشند و بنابراین می توانند تکرار شونده شوند.

مدیریت داده های پراکنده

کتابخانه رایگان ImgLib2 به توسعه دهندگان نرم افزار این قابلیت را می دهد که با استفاده از کد جاوا با داده های پراکنده کار کنند. این کتابخانه دو طرح درونیابی برای نمایش داده های پراکنده ارائه کرده است. کاربران می توانند مقداری را برای هر مکان در فضا با برگرداندن مقدار نزدیکترین نمونه یا یک مقدار درونیابی شده و وزن فاصله نزدیکترین همسایگان 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 );
	}
 فارسی