gs://alphaearth_foundations GCS বাকেটটিতে COG (ক্লাউড অপটিমাইজড জিওটিফ) ফাইল রয়েছে, যা একত্রে আলফাআর্থ ফাউন্ডেশনের বার্ষিক স্যাটেলাইট এমবেডিং ডেটাসেট তৈরি করে। এতে ২০১৭ থেকে ২০২৫ সাল পর্যন্ত বার্ষিক এমবেডিংগুলো অন্তর্ভুক্ত রয়েছে।
গুগল বার্ষিক স্যাটেলাইট এমবেডিং লেয়ারের ধারাবাহিক উৎপাদনে প্রতিশ্রুতিবদ্ধ এবং এর সরবরাহে কোনো সম্ভাব্য পরিবর্তনের ক্ষেত্রে কমপক্ষে এক বছর আগে বিজ্ঞপ্তি প্রদান করবে, তবে তা ইউএসজিএস (USGS) এবং ইএসএ (ESA) থেকে প্রাপ্ত ইনপুট ডেটা স্ট্রিমের নিরবচ্ছিন্ন প্রাপ্যতার উপর নির্ভরশীল, যার উপর ডেটাসেট উৎপাদন নির্ভর করে।
লাইসেন্স
এই ডেটাসেটটি CC-BY 4.0 লাইসেন্সের অধীনে রয়েছে এবং এর জন্য নিম্নলিখিত অ্যাট্রিবিউশন টেক্সট প্রয়োজন: "আলফাআর্থ ফাউন্ডেশনস স্যাটেলাইট এমবেডিং ডেটাসেটটি গুগল এবং গুগল ডিপমাইন্ড দ্বারা নির্মিত।"
২০২৬ সালের জুলাই মাস থেকে, এই অংশটি "প্রদানকারী কর্তৃক পরিশোধিত" হিসেবে সেট করা হয়েছে।
ডিরেক্টরি কাঠামো
এগুলোকে বছর অনুযায়ী ডিরেক্টরিতে ভাগ করা হয়; প্রতি বছরের ডিরেক্টরিটি আবার ১২০টি সাব-ডিরেক্টরিতে বিভক্ত, প্রতিটি ইউটিএম জোনের জন্য একটি করে, যেগুলোর নাম জোন নম্বর এবং গোলার্ধ ( N বা S ) অনুযায়ী হয়ে থাকে।
প্রতিটি ডিরেক্টরির মধ্যে বেশ কিছু COG ফাইল থাকে। এই ফাইলগুলোতে সেই UTM জোনের সমস্ত পিক্সেল ডেটা থাকে।
ফাইল কাঠামো
প্রতিটি ফাইলের আকার ৮১৯২x৮১৯২ পিক্সেল এবং এতে ৬৪টি চ্যানেল রয়েছে। ডি-কোয়ান্টাইজেশন ম্যাপিং প্রয়োগ করার পর (নিচে দেখুন), প্রতিটি পিক্সেলের ম্যাগনিটিউডকে এমনভাবে স্বাভাবিক করা হয়েছে যাতে এর ইউক্লিডীয় দৈর্ঘ্য ১ হয়।
ফাইলগুলোতে ৪০৯৬x৪০৯৬ পিক্সেল, ২০৪৮x২০৪৮ পিক্সেল, এবং এভাবে ক্রমান্বয়ে একটি ১x১ শীর্ষ-স্তরের ওভারভিউ লেয়ার পর্যন্ত ওভারভিউ লেয়ার রয়েছে। এই ওভারভিউ লেয়ারগুলো এমনভাবে তৈরি করা হয়েছে যাতে প্রতিটি ওভারভিউ পিক্সেল তার নিচের সর্বোচ্চ-রেজোলিউশনের পিক্সেলগুলোর গড় হয়, যেখানে গড়ের মানকে স্বাভাবিক করে তার দৈর্ঘ্য ১ করা হয়েছে।
চ্যানেলগুলো ক্রমানুসারে স্যাটেলাইট এমবেডিং ডেটাসেটের A00 থেকে A63 অক্ষগুলোর সাথে সঙ্গতিপূর্ণ। COG-গুলোতেও চ্যানেলগুলোর জন্য এই নামকরণ অন্তর্ভুক্ত রয়েছে।
প্রতিটি চ্যানেলের জন্য প্রতিটি পিক্সেলের মান একটি সাইনড ৮-বিট পূর্ণসংখ্যা। এই মানগুলিকে কীভাবে এমবেডিংগুলির নেটিভ মানে ([-১, ১] পরিসরে) ম্যাপ করা হয়, তা ডি-কোয়ান্টাইজেশন অংশে ব্যাখ্যা করা হয়েছে।
-১২৮ মানটি একটি মাস্কড পিক্সেলকে নির্দেশ করে। যদি এটি একটি চ্যানেলে উপস্থিত থাকে, তবে এটি সমস্ত চ্যানেলেই উপস্থিত থাকবে। COG-গুলো এই বিষয়টিই প্রতিফলিত করে (অর্থাৎ, সেগুলোর NoData মান -১২৮-এ সেট করা থাকে)।
প্রতিটি ফাইলের নামেও কিছু তথ্য থাকে। উদাহরণস্বরূপ, gs://alphaearth_foundations/satellite_embedding/v1/annual/2019/1S/x8qqwcsisbgygl2ry-0000008192-0000000000.tiff নামের ফাইলটি বিবেচনা করুন। ফাইলের নাম থেকেই স্পষ্ট যে, এই ফাইলটি UTM জোন 1S (জোন ১, দক্ষিণ গোলার্ধ)-এর জন্য ২০১৯ সালের বার্ষিক এমবেডিং-এর একটি অংশ। মূল ফাইলের নাম, x8qqwcsisbgygl2ry-0000008192-0000000000 , এই ফাইলটিকে সংশ্লিষ্ট আর্থ ইঞ্জিন স্যাটেলাইট এমবেডিং ইমেজের নামের সাথে সংযুক্ত করে। এই উদাহরণে, এই ফাইলটি GOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL/x8qqwcsisbgygl2ry আর্থ ইঞ্জিন ইমেজটির একটি অংশের সাথে সম্পর্কিত। ফাইলের নামের দুটি দশমিক অংশ নির্দিষ্ট করে যে এই COG-এর মানগুলি সেই আর্থ ইঞ্জিন ইমেজের সাপেক্ষে কোথায় অবস্থিত, প্রথমে Y-অক্ষের একটি অফসেট এবং তারপরে X-অক্ষের একটি অফসেট হিসাবে। এই ক্ষেত্রে, আর্থ ইঞ্জিন ইমেজের অরিজিনের সাপেক্ষে COG-এর পিক্সেল অরিজিনটি (0, 8192) বিন্দুতে অবস্থিত। এর কারণ হলো, প্রতিটি আর্থ ইঞ্জিন ইমেজকে (যেগুলো 16384x16384 পিক্সেলের) উপবিভক্ত করা প্রয়োজন ছিল, যাতে ফলস্বরূপ COG-গুলো খুব বেশি বড় ও জটিল না হয়ে যায়।
ডি-কোয়ান্টাইজেশন
প্রতিটি পিক্সেলের প্রতিটি চ্যানেলের কাঁচা সাইনড ৮-বিট মানকে (যা -১২৭ থেকে ১২৭-এর মধ্যে থাকবে, কারণ -১২৮ মানটি "নো ডেটা" হিসেবে সংরক্ষিত) বিশ্লেষণের জন্য প্রস্তুত ফ্লোটিং-পয়েন্ট মানে (যা -১ থেকে ১-এর মধ্যে থাকবে) রূপান্তর করতে যে ম্যাপিংটি করতে হবে তা হলো
- ১২৭.৫ দিয়ে ভাগ করুন
- বর্গক্ষেত্র
- মূল মানের চিহ্ন দিয়ে গুণ করুন
এটি NumPy-তে এভাবে প্রকাশ করা হবে
# values is a NumPy array of raw pixel values
de_quantized_values = ((values / 127.5) ** 2) * np.sign(values)
আর্থ ইঞ্জিনের ক্ষেত্রে, সংশ্লিষ্ট অপারেশনটি হবে
var de_quantized_values = values.divide(127.5).pow(2).multiply(values.signum());
ডাউনস্যাম্পল করা পিরামিড তৈরি করা
যদি আপনি এই COG-গুলির বেস রেজোলিউশন লেয়ার থেকে আপনার নিজস্ব ডাউনস্যাম্পল করা সংস্করণ বা বাহ্যিক ওভারভিউ তৈরি করতে চান (উদাহরণস্বরূপ, বেশ কয়েকটি ফাইল মোজাইক করার পরে), তাহলে আপনাকে অবশ্যই নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে হবে। স্ট্যান্ডার্ড রাস্টার পিরামিডিং কৌশলগুলি (যেমন, কাঁচা পূর্ণসংখ্যার মানগুলিতে -r average সহ gdaladdo ব্যবহার করা) সঠিক ফলাফল দেবে না।
- ডি-কোয়ান্টাইজ: ডি-কোয়ান্টাইজেশন অংশে বর্ণিত পদ্ধতি ব্যবহার করে কাঁচা ৮-বিট পূর্ণসংখ্যাগুলোকে ফ্লোটে রূপান্তর করুন।
- ভেক্টরসমূহের যোগফল: ডিকোয়ান্টাইজড ভেক্টরগুলোর প্রতিটি উপাদানের যোগফল নির্ণয় করুন।
- স্বাভাবিকীকরণ: প্রাপ্ত যোগফল ভেক্টরের ইউক্লিডীয় নর্ম গণনা করুন এবং এটিকে একক দৈর্ঘ্যে পুনরায় স্বাভাবিকীকরণের জন্য নর্ম দ্বারা ভাগ করুন।
import numpy as np
# Assuming 'raw_values' is a NumPy array of shape (N, 64)
# containing the raw signed 8-bit integers from N pixels.
# N = 4 for a 2x2 aggregation, for example.
# 1. De-quantize
de_quantized_values = ((raw_values / 127.5) ** 2) * np.sign(raw_values)
# 2. Sum the de-quantized vectors
sum_vec = np.sum(de_quantized_values, axis=0) # Shape (64,)
# 3. Normalize the sum vector
norm = np.linalg.norm(sum_vec)
# Add epsilon to prevent division by zero
pyramided_vec = sum_vec / (norm + 1e-9)
# 'pyramided_vec' is the correctly downsampled 64-dimensional unit vector.
COG-এর ওভারভিউ লেয়ারগুলো এই পদ্ধতি ব্যবহার করে তৈরি করা হয়েছে; যদি সেগুলো আপনার প্রয়োজন মেটায়, তবে আপনি কোনো অতিরিক্ত গণনা ছাড়াই অবিলম্বে সেই ওভারভিউ লেয়ারগুলো ব্যবহার করতে পারেন।
প্রকাশ এবং সূচক
এই ডেটাসেটের ফাইলগুলির একটি তালিকা gs://alphaearth_foundations/satellite_embedding/v1/annual/manifest.txt -এ পাওয়া যাবে।
ফাইলের নাম থেকে সেগুলো বিশ্বের কোন অঞ্চলকে অন্তর্ভুক্ত করে তা নির্ধারণ করা সম্ভব না হওয়ায় gs://alphaearth_foundations/satellite_embedding/v1/annual/aef_index.parquet , gs://alphaearth_foundations/satellite_embedding/v1/annual/aef_index.gpkg , এবং gs://alphaearth_foundations/satellite_embedding/v1/annual/aef_index.csv ফাইলগুলোতে তিনটি রূপে (GeoParquet, GeoPackage, এবং CSV) একটি সূচীও প্রদান করা হয়েছে। এই সূচীতে ডেটাসেটের প্রতিটি ফাইলের জন্য একটি করে এন্ট্রি রয়েছে। প্রতিটি ফাইলের জন্য প্রদত্ত তথ্য হলো...
- ফাইলটির জ্যামিতি একটি WGS84 (অর্থাৎ, EPSG:4326) বহুভুজ হিসেবে। CSV ফর্মে, এটি
WKTকলামে থাকে। গণনার বিস্তারিত বিবরণের জন্য জ্যামিতি প্রক্রিয়াকরণ দেখুন। -
crs: এই ছবিটি যে UTM জোনের অন্তর্গত, তার CRS একটি EPSG কোড হিসাবে, যেমনEPSG:32610। -
year: যে বছরটি ছবিটিতে অন্তর্ভুক্ত। -
utm_zone: ইমেজটির UTM জোন, যেমন10N। -
utm_west,utm_south,utm_east,utm_north: মূল পিক্সেল অ্যারের UTM সীমানা। এটি কোনো জ্যামিতিক প্রক্রিয়াকরণকে প্রতিফলিত করে না এবং বৈধ হোক বা না হোক, সমস্ত পিক্সেল এতে অন্তর্ভুক্ত থাকে। -
wgs84_west,wgs84_south,wgs84_east,wgs84_north: WGS84 জ্যামিতির সর্বনিম্ন ও সর্বোচ্চ দ্রাঘিমাংশ এবং অক্ষাংশ।
জ্যামিতি প্রক্রিয়াকরণ
পিক্সেল অ্যারেটি স্বাভাবিকভাবেই কোনো একটি UTM জোনে থাকে, তাই সেই UTM জোনে পিক্সেল অ্যারের বাউন্ডিং বক্সটি একটি সাধারণ আয়তক্ষেত্র হয়। সেই বাউন্ডিং বক্সটিকে WGS84-এ একটি বহুভুজে রূপান্তরিত করা হয়। এই বহুভুজটিতে বেশ কিছু অতিরিক্ত বিন্দু অন্তর্ভুক্ত থাকে, যাতে এর প্রান্তগুলো WGS84-এর সেই বক্ররেখাগুলোকে ঘনিষ্ঠভাবে অনুসরণ করে, যেগুলোতে UTM-এর সরলরেখাগুলো রূপান্তরিত হয়। এই বহুভুজটি ছবির পিক্সেলগুলোর বৈধতা বিবেচনা করে না, শুধু ছবির পিক্সেল অ্যারের সীমানা বিবেচনা করে।
এরপর পলিগনটিকে ইমেজটির UTM জোনের সর্বনিম্ন ও সর্বোচ্চ দ্রাঘিমাংশে ক্লিপ করা হয়। বাস্তবে, এর ফলে UTM জোনের সীমানা ছাড়িয়ে যাওয়া কয়েকটি বৈধ পিক্সেল এতে অন্তর্ভুক্ত নাও হতে পারে। ইনডেক্স থেকে এই পিক্সেলগুলো বাদ দিলে কোনো সমস্যা হওয়ার কথা নয়: পার্শ্ববর্তী UTM জোনের কোনো একটি ইমেজ সেই এলাকাটিকে আবৃত করে ফেলবে।
উল্লেখ্য যে, UTM জোনের সর্বনিম্ন ও সর্বোচ্চ দ্রাঘিমাংশে ক্লিপিং করার ফলে কোনো পলিগনই অ্যান্টিমেরিডিয়ান অতিক্রম করে না, যা এই ফাইলটির প্রক্রিয়াকরণকে কিছুটা সহজ করে তুলবে।