Open Source Java Library สำหรับการประมวลผลภาพ
API การประมวลผลภาพหลายมิติเอนกประสงค์ที่สร้างภาพใหม่ แก้ไขภาพที่มีอยู่ ทำงานกับข้อมูลที่กระจัดกระจาย ทำซ้ำภาพที่มีอยู่โดยใช้ Java API ฟรี
ไลบรารีโอเพ่นซอร์ส ImgLib2 ช่วยให้นักพัฒนาซอฟต์แวร์สามารถสร้างและจัดการรูปภาพภายในแอป Java ของตนได้ ไลบรารีมีการออกแบบที่ขับเคลื่อนด้วยอินเทอร์เฟซที่ช่วยให้ผู้ใช้สามารถใช้ข้อมูลประเภทตัวเลขและไม่ใช่ตัวเลขได้อย่างง่ายดายภายในแอปพลิเคชันของตนเอง
ImgLib2 เป็นไลบรารีประมวลผลภาพแบบหลายมิติเอนกประสงค์ที่ให้การสนับสนุนคุณสมบัติที่สำคัญหลายอย่างที่เกี่ยวข้องกับการประมวลผลภาพ เช่น การสร้างภาพใหม่ การแก้ไขภาพที่มีอยู่ การเปิดและการอ่านภาพที่มีอยู่ การทำงานกับข้อมูลที่กระจัดกระจาย การทำซ้ำภาพที่มีอยู่ ทั่วไป การคัดลอกข้อมูลภาพ การวาดทรงกลม การรองรับการแก้ไข และอื่นๆ อีกมากมาย
ห้องสมุดเป็นมิตรกับผู้ใช้มากและหลีกเลี่ยงความซับซ้อนที่ไม่จำเป็น ดังนั้นนักพัฒนาจึงสามารถมุ่งความสนใจไปที่สาระสำคัญของอัลกอริทึมในขณะที่พัฒนาโครงการของตน สิ่งที่ยอดเยี่ยมเกี่ยวกับไลบรารี่คือมันไม่ขึ้นอยู่กับมิติข้อมูล และอนุญาตให้ผู้ใช้แสดงโค้ดของตนในลักษณะที่สามารถนำไปใช้กับข้อมูลหลายมิติได้ การทำงานของไลบรารีไม่ได้จำกัดเฉพาะภาพเท่านั้น มีตัวอย่างที่ทำงานเกี่ยวกับลำดับ RNA ด้วยเช่นกัน
เริ่มต้นใช้งาน ImgLib2
วิธีที่ง่ายและแนะนำในการติดตั้ง ImgLib2 คือผ่าน GitHub
ติดตั้ง ImgLib2 ผ่าน GitHub
go get -u github.com/imglib/imglib2.git
การสร้างภาพใหม่ผ่าน Java
ไลบรารี Java โอเพ่นซอร์ส ImgLib2 ได้รวมการสนับสนุนสำหรับการสร้างอิมเมจใหม่ตั้งแต่ต้นด้วยโค้ด Java เพียงไม่กี่บรรทัด เมื่อใช้ไลบรารี ImgLib2 คุณสามารถสร้างภาพประเภทต่างๆ เช่น ภาพธรรมดา ภาพ 3 มิติ 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 และดังนั้นจึงสามารถทำ Iterable ได้
การจัดการข้อมูลที่กระจัดกระจาย
ไลบรารี ImgLib2 ฟรีช่วยให้นักพัฒนาซอฟต์แวร์สามารถทำงานกับข้อมูลที่กระจัดกระจายโดยใช้โค้ด Java ห้องสมุดได้จัดเตรียมรูปแบบการแก้ไขสองแบบสำหรับการแสดงข้อมูลที่กระจัดกระจาย ผู้ใช้สามารถคำนวณค่าของสถานที่ทุกแห่งในอวกาศโดยส่งคืนค่าของตัวอย่างที่ใกล้เคียงที่สุดหรือค่าที่ถ่วงน้ำหนักระยะทางที่สอดแทรกของเพื่อนบ้านที่ใกล้ที่สุด k ไปยังตำแหน่งตัวอย่าง
ทํางานกับ Sparse ข้อมูลภายใน Java ปพลิเคชัน
// 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 );
}