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.
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 );
}