ছবি ব্যবহার করে গণনা

এখন যেহেতু আপনি একটি চিত্র লোড এবং প্রদর্শন করতে জানেন, এটিতে একটি গণনা প্রয়োগ করার সময়। উদাহরণস্বরূপ, আপনি ee.Terrain প্যাকেজের slope পদ্ধতিতে SRTM উচ্চতা চিত্রটি পাস করে ভূখণ্ডের ঢাল গণনা করতে পারেন।

কোড এডিটর (জাভাস্ক্রিপ্ট)

// Load the SRTM image.
var srtm = ee.Image('CGIAR/SRTM90_V4');

// Apply an algorithm to an image.
var slope = ee.Terrain.slope(srtm);

// Display the result.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.
Map.addLayer(slope, {min: 0, max :60}, 'slope');

উল্লেখ্য যে ee.Terrain.slope(srtm) কোডে, srtm ইমেজটি ঢাল অ্যালগরিদমের যুক্তি হিসেবে দেওয়া হয়েছে। ফলাফলটি চিত্র 3 এর মতো দেখতে হবে।

Tutorial_api_03_slope.png
চিত্র 3. ঢাল চিত্র।

ছবির গণিত

ee.Image ক্লাসে এমন পদ্ধতিও রয়েছে যা একটি ইমেজ অবজেক্টে চালু করা যেতে পারে। উদাহরণস্বরূপ, ধরুন আপনি চিত্র ব্যান্ড ব্যবহার করে কিছু গণিত করতে চান (কখনও কখনও ব্যান্ড গণিত বা মানচিত্র বীজগণিত বলা হয়)। উদাহরণস্বরূপ, আপনি একটি দিক চিত্রের ত্রিকোণমিতিক ক্রিয়াকলাপে আগ্রহী হতে পারেন। এটি সম্পন্ন করতে, প্রথমে একটি দিক চিত্রকে রেডিয়ানে রূপান্তর করুন, তারপরে sin() বলুন। আমাদের srtm ইমেজ পুনরায় ব্যবহার করা হচ্ছে,

কোড এডিটর (জাভাস্ক্রিপ্ট)

// Get the aspect (in degrees).
var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.
var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.
Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

ফলাফলটি চিত্র 4 এর মত কিছু হওয়া উচিত। এটি aspect.divide(180).multiply(Math.PI).sin() কোডটি ঘনিষ্ঠভাবে দেখার জন্য মূল্যবান। এইরকম একাধিক পদ্ধতি চেইন করে, কোড বলে, 'দৃষ্টিটিকে 180 দ্বারা ভাগ করুন, এর ফলাফলকে π দিয়ে গুণ করুন এবং অবশেষে পাপ নিন'। আপনি এই পদ্ধতিতে পদ্ধতিগুলি একত্রিত করে চিত্রগুলিতে জটিল গাণিতিক ক্রিয়াকলাপ সম্পাদন করতে পারেন। গাণিতিক ক্রিয়াকলাপ, add() , subtract() , multiply() ইত্যাদির সম্পূর্ণ তালিকার জন্য Image ডক্স দেখুন।

টিউটোরিয়াল_api_04_sin.png
চিত্র 4. ভূখণ্ডের দিকটির পাপ।

চিত্র পরিসংখ্যান

চিত্রগুলির উপর আরেকটি দরকারী শ্রেণীতে ক্রিয়াকলাপগুলির মধ্যে রয়েছে চিত্র অঞ্চলে পিক্সেল পরিসংখ্যান বা রাস্টার-ভেক্টর ওভারলে কম্পিউটিং। আর্থ ইঞ্জিনে পরিসংখ্যান গণনা করতে, ee.Reducer প্যাকেজে ক্লাস দ্বারা উপস্থাপিত একটি রিডুসার ব্যবহার করুন। উদাহরণস্বরূপ, ধরুন আপনি কিছু অঞ্চলে উচ্চতার গড় সম্পর্কে আগ্রহী। আপনি জ্যামিতি অঙ্কন সরঞ্জাম ব্যবহার করে একটি বহুভুজ অঙ্কন করে একটি অঞ্চল সংজ্ঞায়িত করতে পারেন। ইন্টারেক্টিভভাবে একটি অঞ্চল আঁকতে, বহুভুজ অঙ্কন টুল পান ( ), তারপর আপনার আগ্রহের এলাকায় একটি বহুভুজ ডিজিটাইজ করুন এবং আপনার কাজ শেষ হলে প্রস্থান করুন ক্লিক করুন। লক্ষ্য করুন যে ফলাফল ee.Geometry অবজেক্টের নাম স্বয়ংক্রিয়ভাবে geometry এবং আপনার স্ক্রিপ্টের শীর্ষে একটি আমদানি হিসাবে যোগ করা হয়েছে। আমদানিতে পরিবর্তনশীল নামের উপর ক্লিক করে এবং নতুন নাম টাইপ করে সেই ভেরিয়েবলটিকে 'বহুভুজ' এ পুনঃনামকরণ করুন।

এরপরে, নিম্নলিখিত কোডটি ব্যবহার করে বহুভুজে গড় পিক্সেল মান পান:

কোড এডিটর (জাভাস্ক্রিপ্ট)

// Compute the mean elevation in the polygon.
var meanDict = srtm.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: polygon,
  scale: 90
});

// Get the mean from the dictionary and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);

এখানে উল্লেখ্য বেশ কিছু বিষয় আছে। প্রথমে, লক্ষ্য করুন যে reduceRegion() হল একটি পদ্ধতি যা Image অবজেক্টের জন্য উপলব্ধ ( এখানে অঞ্চল হ্রাস সম্পর্কে আরও জানুন )। দ্বিতীয়ত, মেথড আর্গুমেন্টগুলি একটি জাভাস্ক্রিপ্ট অবজেক্টে প্রদান করা হয় যা একটি একক আর্গুমেন্ট হিসাবে পাস করা হয়। (বিশেষ করে, অবজেক্টের কী হল মেথড প্যারামিটারের নাম। মান হল পদ্ধতির আর্গুমেন্ট)। তৃতীয়ত, reducer প্যারামিটার গণনা করার জন্য পরিসংখ্যানের ধরন নির্দিষ্ট করে এবং geometry প্যারামিটারটি পরিসংখ্যান গণনা করা অঞ্চলটি নির্দিষ্ট করে। scale প্যারামিটার হল পিক্সেল সাইজ মিটারে ব্যবহার করার জন্য। অস্পষ্টতা এড়াতে, হ্রাস করার সময় আপনার সর্বদা স্কেল নির্দিষ্ট করা উচিত কারণ আর্থ ইঞ্জিন ইনপুটগুলি থেকে স্বয়ংক্রিয়ভাবে উপযুক্ত স্কেল নির্ধারণ করতে সক্ষম নাও হতে পারে। ( আর্থ ইঞ্জিনে স্কেল সম্পর্কে আরও জানুন )।

সবশেষে, reduceRegion() এর রিটার্ন মান হল একটি অভিধান যেখানে কীগুলি ব্যান্ডের নাম এবং মানগুলি ব্যান্ডগুলির জন্য পিক্সেল পরিসংখ্যান। একটি অভিধানে get() পদ্ধতিটি একটি আর্গুমেন্ট হিসাবে প্রদত্ত কীটির সাথে সম্পর্কিত মান প্রদান করে। এই ক্ষেত্রে, srtm ইমেজে একটি ব্যান্ড আছে, 'উচ্চতা', তাই উদাহরণ কোডটি অভিধান থেকে পরিসংখ্যানটি পায় এবং এটি প্রিন্ট করে।

আপনি যখন এই কোডটি চালান, যদি আপনি এমন একটি ত্রুটি পান যা দেখে:

ভয় নেই! ত্রুটিটি সমাধান করার জন্য আপনি কিছু করতে পারেন। reduceRegion() পদ্ধতিতে একটি চেক আছে যাতে আপনি বিবেচনা করেন যে আপনি সত্যিই আপনার গণনায় এতগুলি পিক্সেল অন্তর্ভুক্ত করতে চান কিনা। এটি আপনাকে দুর্ঘটনাক্রমে মূর্খ কিছু করা থেকে বিরত করার উদ্দেশ্যে করা হয়েছে, যেমন বিশ্বের প্রতিটি এক-মিটার পিক্সেলের গড় গণনা করার চেষ্টা করা (এটি করবেন না)। ত্রুটিটি সমাধান করতে, হয় bestEffort প্যারামিটারটিকে true সেট করুন bestEffort: true , অথবা maxPixels প্যারামিটারটিকে 10 মিলিয়ন পিক্সেলের ডিফল্টের চেয়ে বেশি মান বা উভয়টিতে সেট করুন। যদি bestEffort সত্য হয়, আর্থ ইঞ্জিন স্বয়ংক্রিয়ভাবে স্কেল পুনরায় গণনা করবে যাতে maxPixels অতিক্রম না হয়।

ডিগ্রেশন: আর্থ ইঞ্জিনে স্কেল

পূর্ববর্তী উদাহরণে, scale প্রায় SRTM চিত্রের নেটিভ রেজোলিউশনে সেট করা হয়েছে। আপনি এর সাথে একটি চিত্রের নেটিভ রেজোলিউশন আবিষ্কার করতে পারেন:

কোড এডিটর (জাভাস্ক্রিপ্ট)

var scale = srtm.projection().nominalScale();
print('SRTM scale in meters', scale);

আপনি যদি নেটিভ রেজোলিউশনের চেয়ে ছোট একটি স্কেল নির্দিষ্ট করেন, আর্থ ইঞ্জিন আনন্দের সাথে নিকটতম প্রতিবেশী ব্যবহার করে ইনপুট চিত্রটি পুনরায় নমুনা করবে, তারপর গণনায় সেই সমস্ত ছোট পিক্সেল অন্তর্ভুক্ত করবে। যদি আপনি স্কেলটি বড় হতে সেট করেন, আর্থ ইঞ্জিন ইনপুটের একটি সমষ্টিগত সংস্করণ থেকে ইনপুট পিক্সেল ব্যবহার করবে (যেমন চিত্র পিরামিডের উচ্চ স্তর থেকে পিক্সেল পান)। আর্থ ইঞ্জিন কীভাবে স্কেল পরিচালনা করে সে সম্পর্কে আরও জানুন এই ডকটিতে

এখন পর্যন্ত, আপনি একটি একক ব্যান্ডের সাথে একটি একক চিত্র নিয়ে কাজ করছেন৷ পরবর্তী পৃষ্ঠায়, আপনি মাল্টি-ব্যান্ড ইমেজ এবং ইমেজ সংগ্রহ সম্পর্কে শিখবেন।