Thư viện Java mã nguồn mở để xử lý hình ảnh

Một API xử lý hình ảnh đa chiều, có mục đích chung, tạo hình ảnh mới, sửa đổi hình ảnh hiện có, làm việc với dữ liệu thưa thớt, sao chép hình ảnh hiện có bằng API Java miễn phí.

Thư viện ImgLib2 mã nguồn mở cung cấp cho các nhà phát triển phần mềm khả năng tạo và thao tác các hình ảnh bên trong các ứng dụng Java của họ. Thư viện cung cấp một thiết kế theo hướng giao diện cho phép người dùng sử dụng các kiểu dữ liệu số và không phải số một cách dễ dàng bên trong các ứng dụng của riêng họ.

ImgLib2 là một thư viện xử lý hình ảnh đa chiều, có mục đích chung, cung cấp hỗ trợ cho một số tính năng quan trọng liên quan đến xử lý hình ảnh, chẳng hạn như tạo hình ảnh mới, sửa đổi hình ảnh hiện có, mở và đọc hình ảnh hiện có, làm việc với dữ liệu thưa thớt, sao chép hình ảnh hiện có, Chung sao chép dữ liệu hình ảnh, Vẽ hình cầu, Hỗ trợ nội suy và nhiều hơn nữa.

Thư viện rất thân thiện với người dùng và tránh được những phức tạp không cần thiết, do đó các nhà phát triển có thể tập trung vào bản chất của thuật toán trong khi phát triển các dự án của họ. Điều tuyệt vời về thư viện là nó không phụ thuộc vào thứ nguyên và cho phép người dùng thể hiện mã của họ theo cách có thể áp dụng cho dữ liệu nhiều chiều. Thư viện làm việc không giới hạn ở hình ảnh, chỉ có các ví dụ làm việc trên trình tự RNA.

Previous Next

Bắt đầu với ImgLib2

Cách dễ nhất và được khuyến nghị để cài đặt ImgLib2 là thông qua GitHub.

Cài đặt ImgLib2 qua GitHub

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

Tạo hình ảnh mới qua Java

Thư viện Java mã nguồn mở ImgLib2 đã hỗ trợ tạo một hình ảnh mới từ đầu chỉ với một vài dòng mã Java. Sử dụng thư viện ImgLib2, bạn có thể tạo các loại hình ảnh khác nhau như hình ảnh đơn giản, hình ảnh 3D, ImgFactory và hơn thế nữa. Bạn cũng có thể sửa đổi hình ảnh của các hình ảnh hiện có chỉ với một vài dòng mã.

Tạo hình mới từ 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 );
        }

Sao chép hình ảnh qua Java API

Thư viện ImgLib2 đã bao gồm chức năng sao chép hình ảnh bằng các lệnh Java. Bạn có thể dễ dàng tạo một bản sao của hình ảnh hiện có. Bạn có thể sử dụng Con trỏ để đạt được nhiệm vụ này. Bạn cũng có thể sử dụng phương pháp sao chép là một phương pháp chung và điều tuyệt vời là nó sẽ hoạt động trên bất kỳ loại Kiểu nào.

Hình ảnh trùng hợp với 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;
	}

Xem một phần hình ảnh qua Java

Thư viện ImgLib2 miễn phí cho phép các nhà phát triển phần mềm chỉ hiển thị một số phần của hình ảnh bên trong ứng dụng của họ thông qua một vài dòng mã Java. Chế độ xem rất mạnh mẽ và bạn có thể sử dụng chúng để hiển thị các phần đã chọn của hình ảnh, hiển thị chế độ xem xoay và một số thứ khác. Chế độ xem có thể là Ngẫu nhiên có thể truy cập, Khoảng thời gian, và do đó có thể được thực hiện Lặp lại.

Quản lý dữ liệu thưa thớt

Thư viện ImgLib2 miễn phí cung cấp cho các nhà phát triển phần mềm khả năng làm việc với dữ liệu thưa thớt bằng cách sử dụng mã Java. Thư viện đã cung cấp hai lược đồ nội suy để hiển thị dữ liệu thưa thớt. Người dùng có thể tính toán giá trị cho mọi vị trí trong không gian bằng cách trả về giá trị của mẫu gần nhất hoặc giá trị được nội suy, trọng số khoảng cách của k hàng xóm gần nhất với vị trí được lấy mẫu.

Làm việc với Sparse Data bên trong Java ứng dụng


        // 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 );
	}
 Tiếng Việt