ইমেজ প্রসেসিংয়ের জন্য ওপেন সোর্স জাভা লাইব্রেরি

একটি সাধারণ-উদ্দেশ্য, বহুমাত্রিক ছবি প্রসেসিং API যা নতুন ছবি তৈরি করে, বিদ্যমান ছবিগুলিকে সংশোধন করে,  স্পার্স ডেটার সাথে কাজ করে,  বিনামূল্যে জাভা API ব্যবহার করে বিদ্যমান ছবিকে সদৃশ করে।

ওপেন সোর্স ImgLib2 লাইব্রেরি সফ্টওয়্যার ডেভেলপারদের তাদের জাভা অ্যাপের মধ্যে ইমেজ তৈরি এবং ম্যানিপুলেট করার ক্ষমতা দেয়। লাইব্রেরিটি একটি ইন্টারফেস-চালিত নকশা অফার করে যা ব্যবহারকারীদের তাদের নিজস্ব অ্যাপ্লিকেশনের মধ্যে সহজেই সংখ্যাসূচক এবং অ-সংখ্যাসূচক ডেটা প্রকারগুলি ব্যবহার করতে সক্ষম করে।

ImgLib2 হল একটি সাধারণ-উদ্দেশ্য, বহুমাত্রিক ইমেজ প্রসেসিং লাইব্রেরি যা ইমেজ প্রসেসিংয়ের সাথে সম্পর্কিত বেশ কিছু গুরুত্বপূর্ণ বৈশিষ্ট্যের জন্য সমর্থন প্রদান করে, যেমন নতুন ছবি তৈরি করা, বিদ্যমান ছবিগুলিকে পরিবর্তন করা, বিদ্যমান ছবিগুলি খোলা এবং পড়া, স্পার্স ডেটার সাথে কাজ করা, বিদ্যমান ছবিগুলির অনুলিপি করা, জেনেরিক ইমেজ ডেটা অনুলিপি করা, একটি গোলক আঁকা, ইন্টারপোলেশন সমর্থন এবং আরও অনেক কিছু।

লাইব্রেরিটি খুবই ব্যবহারকারী-বান্ধব এবং অপ্রয়োজনীয় জটিলতাগুলি এড়িয়ে যায় তাই বিকাশকারীরা তাদের প্রকল্পগুলি তৈরি করার সময় অ্যালগরিদমের সারাংশের উপর মনোনিবেশ করতে পারে। লাইব্রেরি সম্পর্কে দুর্দান্ত জিনিস হল এটি মাত্রা-স্বাধীন এবং ব্যবহারকারীদের তাদের কোড এমনভাবে প্রকাশ করতে দেয় যা বহুমাত্রিক ডেটাতে প্রয়োগ করা যেতে পারে। লাইব্রেরির কাজ শুধুমাত্র ছবির মধ্যেই সীমাবদ্ধ নয় আরএনএ সিকোয়েন্সেও কাজ করার উদাহরণ রয়েছে।

Previous Next

ImgLib2 দিয়ে শুরু করা

ImgLib2 ইনস্টল করার সবচেয়ে সহজ এবং প্রস্তাবিত উপায় হল GitHub এর মাধ্যমে।

GitHub এর মাধ্যমে ImgLib2 ইনস্টল করুন

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

জাভার মাধ্যমে নতুন ছবি তৈরি করা

ওপেন সোর্স জাভা লাইব্রেরি ImgLib2 জাভা কোডের মাত্র কয়েকটি লাইন দিয়ে স্ক্র্যাচ থেকে একটি নতুন ছবি তৈরি করার জন্য সমর্থন অন্তর্ভুক্ত করেছে। ImgLib2 লাইব্রেরি ব্যবহার করে, আপনি বিভিন্ন ধরনের ছবি তৈরি করতে পারেন যেমন সাধারণ ছবি, 3D ছবি, ImgFactory এবং আরও অনেক কিছু। আপনি কোডের মাত্র কয়েকটি লাইন দিয়ে বিদ্যমান চিত্রগুলির চিত্রগুলিও সংশোধন করতে পারেন।

জাভা 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 );
        }

জাভা API এর মাধ্যমে ইমেজ ডুপ্লিকেশন

ImgLib2 লাইব্রেরিতে জাভা কমান্ড ব্যবহার করে ইমেজ ডুপ্লিকেশনের জন্য কার্যকারিতা অন্তর্ভুক্ত করা হয়েছে। আপনি সহজেই বিদ্যমান চিত্রটির একটি অনুলিপি তৈরি করতে পারেন। এই কাজটি করতে আপনি কার্সার নিয়োগ করতে পারেন। আপনি অনুলিপি পদ্ধতিটিও ব্যবহার করতে পারেন যা একটি জেনেরিক পদ্ধতি এবং দুর্দান্ত জিনিস হল এটি যে কোনও ধরণের ক্ষেত্রে কাজ করবে।

জাভা 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 লাইব্রেরি সফ্টওয়্যার বিকাশকারীদের জাভা কোডের কয়েকটি লাইনের মাধ্যমে তাদের অ্যাপের ভিতরে চিত্রের কিছু অংশ প্রদর্শন করতে সক্ষম করে। দৃশ্যগুলি খুব শক্তিশালী এবং আপনি ছবিগুলির নির্বাচিত অংশগুলি প্রদর্শন করতে, একটি ঘোরানো দৃশ্য প্রদর্শন করতে এবং অন্যান্য কিছু জিনিসগুলিকে ব্যবহার করতে পারেন৷ দৃশ্যগুলি এলোমেলো অ্যাক্সেসযোগ্য, ব্যবধান হতে পারে এবং তাই পুনরাবৃত্তিযোগ্য করা যেতে পারে।

স্পারস ডেটা ম্যানেজমেন্ট

বিনামূল্যের 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 );
	}
 বাংলা