इमेज प्रोसेसिंग के लिए ओपन सोर्स जावा लाइब्रेरी
एक सामान्य-उद्देश्य, बहुआयामी इमेज प्रोसेसिंग एपीआई जो नई छवियां बनाता है, मौजूदा छवियों को संशोधित करता है, विरल डेटा के साथ काम करता है, मौजूदा छवि को मुफ्त जावा एपीआई का उपयोग करके डुप्लिकेट करता है।
ओपन सोर्स ImgLib2 लाइब्रेरी सॉफ्टवेयर डेवलपर्स को अपने जावा ऐप के अंदर इमेज बनाने और हेरफेर करने की क्षमता देती है। पुस्तकालय एक इंटरफ़ेस-संचालित डिज़ाइन प्रदान करता है जो उपयोगकर्ताओं को अपने स्वयं के अनुप्रयोगों के अंदर आसानी से संख्यात्मक और गैर-संख्यात्मक डेटा प्रकारों का उपयोग करने में सक्षम बनाता है।
ImgLib2 एक सामान्य-उद्देश्य, बहुआयामी इमेज प्रोसेसिंग लाइब्रेरी है जो इमेज प्रोसेसिंग से संबंधित कई महत्वपूर्ण विशेषताओं के लिए समर्थन प्रदान करती है, जैसे कि नई छवियां बनाना, मौजूदा छवियों को संशोधित करना, मौजूदा छवियों को खोलना और पढ़ना, विरल डेटा के साथ काम करना, मौजूदा छवियों को डुप्लिकेट करना, जेनेरिक छवि डेटा की प्रतिलिपि बनाना, एक गोला बनाना, प्रक्षेप समर्थन और बहुत कुछ।
पुस्तकालय बहुत उपयोगकर्ता के अनुकूल है और अनावश्यक जटिलताओं से बचाता है इस प्रकार डेवलपर्स अपनी परियोजनाओं को विकसित करते समय एल्गोरिदम के सार पर ध्यान केंद्रित कर सकते हैं। पुस्तकालय के बारे में महान बात यह है कि यह आयाम-स्वतंत्र है और उपयोगकर्ताओं को अपने कोड को इस तरह से व्यक्त करने की अनुमति देता है जिसे कई-आयामी डेटा पर लागू किया जा सकता है। काम कर रहे पुस्तकालय केवल छवियों तक ही सीमित नहीं हैं, आरएनए अनुक्रमों पर भी काम करने वाले उदाहरण हैं।
ImgLib2 के साथ शुरुआत करना
ImgLib2 को स्थापित करने का सबसे आसान और अनुशंसित तरीका GitHub के माध्यम से है।
GitHub के माध्यम से ImgLib2 स्थापित करें
go get -u github.com/imglib/imglib2.git
जावा के माध्यम से नई छवियां बनाना
ओपन सोर्स जावा लाइब्रेरी ImgLib2 में जावा कोड की कुछ पंक्तियों के साथ स्क्रैच से एक नई छवि बनाने के लिए समर्थन शामिल है। ImgLib2 लाइब्रेरी का उपयोग करके, आप विभिन्न प्रकार के चित्र बना सकते हैं जैसे कि साधारण चित्र, 3D चित्र, ImgFactory और बहुत कुछ। आप कोड की कुछ पंक्तियों के साथ मौजूदा छवियों की छवियों को भी संशोधित कर सकते हैं।
जावा एपीआई के माध्यम से नई छवियां बनाएं
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 );
}
जावा एपीआई के माध्यम से छवि दोहराव
ImgLib2 लाइब्रेरी में जावा कमांड का उपयोग करके छवि दोहराव के लिए कार्यक्षमता शामिल है। आप आसानी से मौजूदा इमेज की कॉपी बना सकते हैं। आप इस कार्य को प्राप्त करने के लिए कर्सर नियोजित कर सकते हैं। आप कॉपी मेथड का भी इस्तेमाल कर सकते हैं जो एक जेनरिक मेथड है और बड़ी बात यह है कि यह किसी भी तरह के टाइप पर काम करेगा।
जावा एपीआई के माध्यम से डुप्लिकेट छवि
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 हो सकते हैं, और इसलिए इसे Iterable बनाया जा सकता है।
विरल डेटा प्रबंधन
मुफ्त 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 );
}