পাইথনে জিডিএল দিয়ে জিওটিফ পড়া, সংশোধন করা এবং লেখার জন্য


11

আমি পাইথন জিডিএল বাইন্ডিংস এবং নম্পটি ব্যবহার করে রিমোট সেন্সিং ইমেজ প্রসেসিংয়ের দড়িগুলি শিখতে চেষ্টা করছি। প্রথম প্রয়াস হিসাবে, আমি একটি ল্যান্ডস্যাট 8 জিওটিফ ফাইলটি পড়ছি, একটি সাধারণ হেরফের করুন এবং ফলাফলটি একটি নতুন ফাইলে লিখুন। নীচের কোডটি ঠিকঠাকভাবে কাজ করছে বলে মনে হচ্ছে, মূল রাস্টার হেরফেরের পরিবর্তে আউটপুট ফাইলে ডাম্প করা হয়।

যে কোনও মন্তব্য বা পরামর্শ স্বাগত, তবে বিশেষ করে কেন কারসাজিযুক্ত রাস্টার ফলাফল দেখায় না সে সম্পর্কে নোটগুলি।

import os
import gdal

gdal.AllRegister()

file = "c:\~\LC81980242015071LGN00.tiff"
(fileRoot, fileExt) = os.path.splitext(file)
outFileName = fileRoot + "_mod" + fileExt

ds = gdal.Open(file)
band = ds.GetRasterBand(1)
arr = band.ReadAsArray()

[cols, rows] = arr.shape
arr_min = arr.Min()
arr_max = arr.Max()
arr_mean = int(arr.mean())

arr_out = numpy.where((arr < arr_mean), 10000, arr)

driver = gdal.GetDriverByName("GTiff")
outdata = driver.Create(outFileName, rows, cols, 1, gdal.GDT_UInt16)
outband = outdata.GetRasterBand(1)
outband.WriteArray(arr_out)
outdata = None

print arr_min
> 0
print arr_max
> 65535
print arr_mean
> 4856

আমি উইন্ডোজ 7 32 বিট মেশিনে পাইথন 2.7.1 ব্যবহার করি।


আমি এটি একটি ডিইএম (উবুন্টু, পাইথন ২.7.১) এ কাজ করতে পেরেছি এবং এটি প্রত্যাশিত ফলাফল তৈরি করেছে, গড় মানের নীচে সমস্ত কিছু সেট করে 10000 এবং একটি নতুন কলমে লিখিত হয়েছে। আপনি নতুন চিত্রটিতে ভূ-ট্রান্সফর্মটি অনুলিপি করছেন না যাতে এটি অপ্রকাশিত হয়, সুতরাং এটি দেখার চেষ্টা করার সময় আপনাকে ফ্যাক্ট করতে হবে (এটি করার জন্য একটি লাইনার আছে তবে আমার এটি খনন করতে হবে)। আপনি যদি আউটপুট দিয়ে আপনার প্রশ্নটি সম্পাদনা করতে পারেন gdainfo -stats original.tiffএবং gdal-config --versionএটিও সহায়তা করতে পারে।
স্টিভেন কে

হাই, এটি দেখার জন্য ধন্যবাদ! আমি জানি আমি ভূ-ট্রান্সফর্মটিকে অবহেলা করেছি, পরে এটি চিবিয়ে নেওয়ার কথা ভেবেছিলাম। যদিও আমি পুরো আউটপুট চিত্রটি দেখতে পাচ্ছি (ইরফানভিউ ব্যবহার করে), যাতে এটি আমার মনে হয় না। আমি আজ রাতে আসনটিতে ফিরে এলে আপনার অনুরোধ করা তথ্য আমি তৈরি করব।
হ্যান্স রেলোফসেন

হাই, আমি আপনাকে জিজ্ঞাসা করা তথ্য সরবরাহ করার জন্য সংগ্রাম করছি। আমি পাইথন জিডিএল বাঁধাই ব্যবহার করছি এবং আমি নিশ্চিত না যে আপনি যে কমান্ডগুলি নির্দিষ্ট করেছেন তা পাইথন কমান্ডের সাথে কীভাবে সামঞ্জস্য হয়। যাই হোক, আমি GDAL-1.11.2-cp27-কেউ-Win32 ব্যবহার করছি, থেকে অর্জিত যেমন এখানে । আমি আমার পোস্টটি কিছু মূল পরিসংখ্যান সহ আপডেট করব ti
হ্যান্স রেলোফসেন 20

আরআমিন কি হবে?
ফ্লুইডমোশন

arr_min = 0. আমি পোস্টটি এটি প্রদর্শন করতে আপডেট করেছি। ধন্যবাদ!
হ্যান্স রেলোফসেন

উত্তর:


13

আপনার স্ক্রিপ্টে ds.FlushCache পদ্ধতি অনুপস্থিত রয়েছে, যা পরিবর্তনের শেষে মেমরিতে যা আছে তা ডিস্কে সংরক্ষণ করে। আপনার উদাহরণের একটি সংশোধিত সংস্করণ নীচে দেখুন। লক্ষ্য করুন যে আমি ইনপুট হিসাবে প্রক্ষেপণ এবং জিওট্রান্সফর্ম সেট করতে দুটি লাইন যুক্ত করেছি

import os
import gdal

file = "path+filename"
ds = gdal.Open(file)
band = ds.GetRasterBand(1)
arr = band.ReadAsArray()
[cols, rows] = arr.shape
arr_min = arr.min()
arr_max = arr.max()
arr_mean = int(arr.mean())
arr_out = numpy.where((arr < arr_mean), 10000, arr)
driver = gdal.GetDriverByName("GTiff")
outdata = driver.Create(outFileName, rows, cols, 1, gdal.GDT_UInt16)
outdata.SetGeoTransform(ds.GetGeoTransform())##sets same geotransform as input
outdata.SetProjection(ds.GetProjection())##sets same projection as input
outdata.GetRasterBand(1).WriteArray(arr_out)
outdata.GetRasterBand(1).SetNoDataValue(10000)##if you want these values transparent
outdata.FlushCache() ##saves to disk!!
outdata = None
band=None
ds=None

আউটফাইলটি অনুমান করা হয় না। আমি একটি এইচডিএফ 5 ফাইল পড়ছি এবং আমি যে ব্যান্ডটি রফতানি করতে GetProjection()চাইছি তার সঠিক প্রযোজনা নির্বাচন করুন, তবে এটি প্রয়োগ করা হয়নি বলে মনে হচ্ছে। জিডিএল ওয়ার্প নিখোঁজ? ধন্যবাদ!
মাইকেল

outdata.GetRasterBand(1).WriteArray(arr_out)একাধিক ব্যান্ডের মাল্টিস্পেক্টরাল চিত্রটি লিখতে আমার কী প্রতিস্থাপন করা উচিত ?
সাই কিরণ

ড্রাইভারের মধ্যে "1"। তৈরি করুন () ব্যান্ডের সংখ্যা নির্দেশ করে। তারপরে আপনি আউটডাটা দিয়ে প্রতিটি ব্যান্ডে লিখতে পারেন etGETRasterBand (band_number)। এটি শূন্য নয়, 1 এ শুরু হয়।
Andrea Massetti
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.