পাইথন, জিডিএল এবং সাইকিট-চিত্র ব্যবহার করে চিত্র প্রক্রিয়াকরণ


11

আমি একটি প্রক্রিয়াজাতকরণের সাথে লড়াই করছি এবং আশা করি আমি এখানে সমাধান করতে সক্ষম হব।

আমি বনায়নের ক্ষেত্রে প্রয়োগ করা রিমোট সেন্সিং নিয়ে কাজ করি, বিশেষত লিডার ডেটা নিয়ে কাজ করি। গাছের শীর্ষ সনাক্তকরণের জন্য সাইকিট-চিত্র ব্যবহার করার ধারণা to পাইথনে আমি যেহেতু নতুন, তাই আমি নিম্নলিখিতগুলি করার জন্য একটি দুর্দান্ত ব্যক্তিগত জয় হিসাবে বিবেচনা করেছি:

  1. একটি সিএইচএম আমদানি করুন (ম্যাটপ্লোটলিব সহ);
  2. গাউসিয়ান ফিল্টার চালান (সাইকিট-ইমেজ প্যাকেজ সহ);
  3. একটি ম্যাক্সিমা ফিল্টার চালান (সাইকিট-চিত্র প্যাকেজ সহ);
  4. পিক_লোকাল_ম্যাক্স চালাও (সাইকিট-ইমেজ প্যাকেজ সহ);
  5. স্থানীয় ম্যাক্সিমার সাথে সিএইচএম দেখান (ম্যাটপ্লোটিলিব সহ);

এখন আমার সমস্যা। আমি যখন ম্যাটপ্লট দিয়ে আমদানি করি তখন চিত্রটি ভৌগলিক স্থানাঙ্ক হারিয়ে ফেলে। সুতরাং আমার কাছে থাকা স্থানাঙ্কগুলি কেবলমাত্র প্রাথমিক চিত্রের স্থানাঙ্ক (যেমন 250,312)। আমার যা প্রয়োজন তা হ'ল চিত্রের স্থানীয় ম্যাক্সিমার ডটের নীচে পিক্সেলের মান পাওয়া (চিত্রের লাল বিন্দু)। এখানে ফোরামে আমি একজন লোককে একই জিনিস জিজ্ঞাসা করতে দেখলাম ( NGPy ছাড়াই ওজিআর পয়েন্টের অধীনে জিডিএল রাস্টারটির পিক্সেল মান পাওয়া যায়? ), তবে ইতিমধ্যে তার একটি বিন্যাসে পয়েন্ট রয়েছে। আমার ক্ষেত্রে পয়েন্টগুলি বিজ্ঞান-চিত্রের সাথে গণনা করা হয়েছিল (এটি প্রতিটি গাছের শীর্ষের স্থানাঙ্কের সাথে একটি অ্যারে)। তাই আমার কাছে শেফফাইল নেই।

উপসংহারে, আমি শেষ পর্যন্ত যা চাই তা ভৌগলিক স্থানাঙ্কে প্রতিটি স্থানীয় ম্যাক্সিমার সমন্বয়যুক্ত একটি টেক্সট ফাইল, উদাহরণস্বরূপ:

525412 62980123 1150 ...

সিএইচএম-এ স্থানীয় ম্যাক্সিমা (লাল বিন্দু)

উত্তর:


11

প্রথমত, সাইটে আপনাকে স্বাগতম!

নম্পি অ্যারে অ্যারে মধ্যে অন্তর্নিহিত সিস্টেমের ধারণা নেই। 2 ডি রাস্টারগুলির জন্য তারা কলাম এবং সারি অনুসারে সূচিত হয়।

নোট আমি এই ধারণাটি করছি যে আপনি জিডিএএল সমর্থিত একটি রাস্টার ফর্ম্যাটটি পড়ছেন ।

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

import rasterio

# The best way to open a raster with rasterio is through the context manager
# so that it closes automatically

with rasterio.open(path_to_raster) as source:

    data = source.read(1) # Read raster band 1 as a numpy array
    affine = source.affine

# ... do some work with scikit-image and get an array of local maxima locations
# e.g.
# maxima = numpy.array([[0, 0], [1, 1], [2, 2]])
# Also note that convention in a numy array for a 2d array is rows (y), columns (x)

for point in maxima: #Loop over each pair of coordinates
    column = point[1]
    row = point[0]
    x, y = affine * (column, row)
    print x, y

# Or you can do it all at once:

columns = maxima[:, 1]
rows = maxima[:, 0]

xs, ys = affine * (columns, rows)

এবং সেখান থেকে আপনি আপনার ফলাফলগুলি আপনার পছন্দ মতো কোনও টেক্সট ফাইলে লিখতে পারেন (আমি উদাহরণস্বরূপ ইনবিল্ট csvমডিউলটি একবার দেখার পরামর্শ দিই )।


আপনাকে অনেক ধন্যবাদ. দেখে মনে হচ্ছে এটি কাজ করতে পারে। আমি যেহেতু এই ক্ষেত্রে নতুন, তবুও আমাকে প্রচুর জিনিসগুলির সাথে পরিচিত হতে হবে। ধৈর্য জন্য ধন্যবাদ।
জোও পাওলো পেরেইরা

1
রাস্টারিও ১.x এ আপনি ভূ-স্থগিত পেতে সোর্স.অ্যাক্সি (সারি, কলাম) ব্যবহার করতে পারেন।
বাগম্যানট 123

0

ম্যাটপ্ল্লিটিবের তাত্ক্ষণিক নজর থেকে, আমি বলতে চাই যে আমদানির পরে অক্ষের স্কেলগুলি পরিবর্তন করতে হবে


আমি মনে করি সমস্যাটি সাইকিট-ইমেজে রয়েছে। আমি যখন এটি চালাচ্ছি সাইকিট স্বয়ংক্রিয়ভাবে চিত্রের স্থানাঙ্কে পরিবর্তিত হয়।
জোও পাওলো পেরেইরা

0

নীচের কোডটি দিয়ে চেষ্টা করুন। এটি রাস্টার থেকে চিত্র ডেটা পড়তে এবং প্রক্রিয়াকৃত ডেটা রাস্টারগুলিতে (। জোটিফ ফাইল) লিখতে ব্যবহার করা যেতে পারে।

from PIL import Image,ImageOps
import numpy as np
from osgeo import gdal
#from osgeo import gdal_array
#from osgeo import osr
#from osgeo.gdalconst import *
#import matplotlib.pylab as plt

#from PIL import Image, ImageOps
#import gdal
#from PIL import Image
gdal.AllRegister()

################## Read Raster #################
inRaster='C:\python\Results\Database\Risat1CRS\CRS_LEVEL2_GEOTIFF\scene_HH\imagery_HH.tif'

inDS=gdal.Open(inRaster,1)
geoTransform = inDS.GetGeoTransform()
band=inDS.GetRasterBand(1)
datatype=band.DataType
proj = inDS.GetProjection()
rows = inDS.RasterYSize
cols=inDS.RasterXSize
data=band.ReadAsArray(0,0,cols,rows)#extraction of data to be processed#
############write raster##########
driver=inDS.GetDriver()
outRaster='C:\\python\\Results\\Database\\Temporary data base\\clipped_26July2017\\demo11.tif'
outDS = driver.Create(outRaster, cols,rows, 1,datatype)
geoTransform = inDS.GetGeoTransform()
outDS.SetGeoTransform(geoTransform)
proj = inDS.GetProjection()
outDS.SetProjection(proj)
outBand = outDS.GetRasterBand(1)
outBand.WriteArray(data1,0,0)
#data is the output array to written in tiff file
outDS=None 
im2=Image.open('C:\\python\\Results\\Database\\Temporary data base\\clipped_26July2017\\demo11.tif');
im2.show()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.