تعیین حدود دریاچه با استفاده از یادگیری ماشین و لندست 8
روند بازیابی اطلاعات از تصاویر ماهواره ای می تواند زمانبر باشد و با چالش هایی مانند وضوح تصویر، شناسایی ویژگی ها و معیارهای کاربر روبرو است. با استفاده از ابزارهای یادگیری ماشین می توانیم تصاویر را پیش پردازش کرده و آنها را با ابزارهای استاندارد QGIS ترکیب کنیم تا اشیا را به روشی بسیار کارآمد ترسیم کنیم.
ما یک آموزش برای تعیین مرز اجسام آب به عنوان دریاچه از یک تصویر لانست 8 پانکروماتیک انجام داده ایم. این آموزش یک روش ترکیبی را نشان می دهد که لبه ها را با Python و Scikit Image شناسایی می کند، مسیرها را با QGIS و پلاگین Trace Raster ردیابی می کند و در نهایت پسوند دریاچه را به عنوان Shapefile دریافت می کند.
پرونده های ورودی در این مخزن Github موجود است
و همچنین از این لینک.
برای اجرای تصویر hachuchik از Docker ، فقط این مورد را در Powershell تایپ کنید:
docker run -it --name hakuchik -p 8888:8888 -p 6543:5432 hatarilabs/hakuchik:a2d1cb82a605
کد پایتون:
این کد پایتون است که لبه های تصویر Landsat 8 را تشخیص می دهد:
Import required packages
#python and matplotlib libraries
import numpy as np
import matplotlib.pyplot as plt
#geospatial libraries
import rasterio
#machine learning libraries
#!pip install scikit-image
from skimage import feature
Import raster and read band
imgRaster = rasterio.open('../Rst/landsatImage.tif')
im = imgRaster.read(1)
fig = plt.figure(figsize=(12,8))
plt.imshow(im)
plt.show()
Canny filter
# Compute the Canny filter for two values of sigma
edges1 = feature.canny(im)
edges2 = feature.canny(im, sigma=3)
# display results
fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(18, 6),
sharex=True, sharey=True)
ax1.imshow(im, cmap=plt.cm.gray)
ax1.axis('off')
ax1.set_title('noisy image', fontsize=20)
ax2.imshow(edges1, cmap=plt.cm.gray)
ax2.axis('off')
ax2.set_title(r'Canny filter, $\sigma=1$', fontsize=20)
ax3.imshow(edges2, cmap=plt.cm.gray)
ax3.axis('off')
ax3.set_title(r'Canny filter, $\sigma=3$', fontsize=20)
fig.tight_layout()
plt.show()
Export edges as geospatial TIFF
rasterOut = rasterio.open(
'../Rst/landsatImage_edges2.tif',
'w',
driver='GTiff',
height=edges2.shape[0],
width=edges2.shape[1],
count=3,
dtype=im.dtype,
crs=imgRaster.crs,
transform=imgRaster.transform)
rasterOut.write(np.uint8(edges2*60),1)
rasterOut.write(np.uint8(edges2*120),2)
rasterOut.write(np.uint8(edges2*180),3)
rasterOut.close()
شناسه تلگرام مدیر سایت: SubBasin@
نشانی ایمیل: behzadsarhadi@gmail.com
(سوالات تخصصی را در گروه تلگرام ارسال کنید)
_______________________________________________________
نظرات (۰)