{ "cells": [ { "cell_type": "markdown", "id": "8b588d8b", "metadata": {}, "source": [ "# Using custom input data\n", "\n", "The GrIML package can be used with custom input data. This guide will outline what type of data can be used, and how it can be integrated." ] }, { "cell_type": "markdown", "id": "72f05eac-0684-484a-9eed-bebd91cbab70", "metadata": {}, "source": [ "## What type of features can be classified using GrIML?\n", "\n", "GrIML has primarily been created to classify ice-marginal lakes across Greenland from satellite imagery. An ice-marginal lake is a water body in contact with an ice sheet, ice cap or glacier. It can be classified based on the following criteria:\n", "\n", "- Size (in this case, an areal footprint extent) \n", "- Proximity to an ice margin\n", "\n", "GrIML has primarily been developed so it can continue to be used for producing the [Greenland ice-marginal lake inventory](https://doi.org/10.22008/FK2/MBKW9N). In addition, a big motivation for its design and documentation is so that others can use its functionality to produce ice-marginal lakes across other regions of the world. \n", "\n", "Other cryosphere features may be classified using the criteria defined in GrIML, such as supraglacial lakes (which are water bodies present on the ice surface). Therefore, GrIML is not just limited to classifying one type of feature and we encourage users to explore GrIML's functionality and classification criteria to assess whether it is suitable for your needs." ] }, { "cell_type": "markdown", "id": "fa12c490", "metadata": {}, "source": [ "## What type of input data can be used?\n", "\n", "Input data has to be a **raster format file**, such as a `.tif`. This format should be compatible with [rasterio's open](https://rasterio.readthedocs.io/en/stable/api/rasterio.html#rasterio.open) functionality, which is used in GrIML to open the dataset. The function can be used to test that the input data is valid. Here, we will open a test data file over a section of North Greenland, which is provided in the [GrIML repo](https://github.com/GEUS-Glaciology-and-Climate/GrIML/)." ] }, { "cell_type": "code", "execution_count": 7, "id": "c47056bd-a13c-4a7a-a0b0-21a9f36f6079", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'driver': 'GTiff', 'dtype': 'uint8', 'nodata': None, 'width': 37888, 'height': 37888, 'count': 3, 'crs': CRS.from_wkt('PROJCS[\"WGS 84 / NSIDC Sea Ice Polar Stereographic North\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\",70],PARAMETER[\"central_meridian\",-45],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",SOUTH],AXIS[\"Northing\",SOUTH],AUTHORITY[\"EPSG\",\"3413\"]]'), 'transform': Affine(10.0, 0.0, -406590.0,\n", " 0.0, -10.0, -595270.0), 'blockxsize': 256, 'blockysize': 256, 'tiled': True, 'compress': 'lzw', 'interleave': 'pixel'}\n" ] } ], "source": [ "import rasterio\n", "\n", "infile = '../test/test_data/test_north_greenland.tif'\n", "\n", "with rasterio.open(infile) as dataset:\n", " print(dataset.profile)" ] }, { "cell_type": "markdown", "id": "53f20776-1daa-4506-a088-3e917fe41869", "metadata": {}, "source": [ "The input data should be mapped across a **uniform projection**, such as a coordinate system associated with a satellite image or orthophoto. This coordinate system should be a standardised reference system. The rasterio package can be used to check that a defined projection string is valid. In the example here, we will check to see if EPSG:3005 is a valid projection name." ] }, { "cell_type": "code", "execution_count": 8, "id": "c600bd20-bf6b-4ffc-9eb5-7952e38aabfc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "EPSG:3005\n" ] } ], "source": [ "from rasterio.crs import CRS\n", "\n", "crs = CRS.from_string(\"EPSG:3005\")\n", "print(crs)" ] }, { "cell_type": "markdown", "id": "e7536b00-fd52-4adf-8eef-f8390b090dd3", "metadata": {}, "source": [ "The input data should contain a **binary classification of features**, with values of `0` signifying no classification and `1` signifying a positive classification." ] }, { "cell_type": "code", "execution_count": 9, "id": "85774ea6-840e-4493-b18d-8845b3b7525d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "infile = '../test/test_data/test_north_greenland.tif'\n", "\n", "src = rasterio.open(infile)\n", "print(src)" ] }, { "cell_type": "markdown", "id": "f6040528-c589-46c5-8feb-ad12d25b39f3", "metadata": {}, "source": [ "You can plot the binary dataset using matplotlib. In this example, the test file is too big to plot and show so we will first clip the dataset to a defined window and plot this instead. This is purely for a visual check of the dataset, if needed." ] }, { "cell_type": "code", "execution_count": 10, "id": "08c9ae58-022c-4e2f-9f25-b1783dc2152b", "metadata": {}, "outputs": [ { "data": { "image/png": "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8OHDGgBtypQpLnHvvvuuBkAbP368x/c4cuRIrVmzZlp1dbWmaZo2YsQI4xwtW7ZMu+qqq7RLly5pmqZpAwcO1K6++mqX/u3atXM5zo4dOzQA2tChQ13i/vKXv2gAtIKCAk3TNO3s2bNadHS06XkTz/u0adM0ANqXX37pEvvEE09oDodD++677zRN07Tt27drALTdu3drmqZp77zzjta8eXNt0qRJ2sCBA41+HTt21MaOHWt5XuweUz8Hw4YNsxxPjAXgVm6++WattLTUsu/Fixe18+fPa82aNdP+3//7f0a9noOTJk1yiZ83b54GwBi3LvJF1LBhw7R27dp51YeiAkFcMaDqRA888IDLfkZGBtq1a+f2Ab7mzZu7Pa4YO3YsLl26hN27dwMA/va3v+HKK6/EiBEjjP9ZXrx4ETfeeCOSkpKM/8XrY8vHvv/++10+TGilgQMH4ueff8b+/fuNzxfo3wjo378//vWvf+Gbb75BZWUlvvjiC1urBQDc3uP1118PAMYyeEFBAX799VfT8ybqs88+Q9euXXHzzTe71D/88MPQNA2fffYZgMsf6ouOjsb27dsBwFhhueOOO7B3715cuHABJ06cwNGjRzFo0CBLfrvHrI1uueUW7N+/H/v378f//u//YvXq1fjXv/6F//iP/3BZCTh//jyef/55/O53v0N4eDjCw8NxxRVX4Oeff8bhw4fdxvV0zusiXygqFMTZECJKSEhA06ZNcezYsXoZPykpSVl35swZl7rExETTvnrsP//5T/z000+IjIxUHku/eejx8rHDw8MRHx9vi1u/0e/YsQORkZH46aef0L9/fwBA165dcdVVV2Hnzp04c+aM2+cLrCQfX/9Mh/4YxIxdVXfmzBnl1+KSk5NdxoqOjkbfvn2xfft2zJo1C59++imee+45DBgwADU1Nfj8889x6tQpAPBoDOweszaKi4tDenq6sZ+RkYGuXbuiT58+eP3115GbmwvgsmH89NNPMXPmTNx0002IjY2Fw+HA0KFDXR4n6artOfcmXygqFERjECIKCwvDbbfdhk8++QQnT56s868cOp1OZd3vfvc7l7p//vOfpn31f5z1D4+ZfUOiefPmLvFOpxPXXHON0X7x4kXbN67U1FTj5h8VFYXExER07tzZaL/11luxY8cOYzy7xsCTRHZZTqfT5aYcHx+P0tJStzj9g3UJCQlG3W233YY//elP2LdvH06ePInbb78dzZs3x0033YT8/Hz83//9H6677jqPnzPx5ph1If1/919//TUAoLy8HH/729/w0ksvYdq0aUZcZWWly29teKO6yBeKCgXxUUIIafr06dA0DY899hiqqqrc2qurq/Hxxx/Xaux3333XZX/v3r04fvy42w/1nDt3Dh999JFL3YYNG9CkSRPceuutAC5/DezMmTOoqalBenq6W+nUqRMAGGPLx/7LX/6Cixcv2uJ2OBzo378/9u7di/z8fGO1QFf//v2xa9cu7NixA8nJyXX2VbrevXsjOjra9LyJuu222/Dtt9/iq6++cqlfv349HA6Hi1kZNGgQLl68iJkzZ6J169aGyRk0aBC2b9+Ozz77zONqgbfHrAsVFxcDAK6++moAl6+Lpmlu355588033b7BYld1kS8UFQriikEIqU+fPli+fDkmTZqEtLQ0PPHEE+jWrRuqq6tx4MABrFy5EqmpqRgxYoTXYxcWFuLRRx/FfffdhxMnTmDGjBm45pprMGnSJJe4+Ph4PPHEEygpKcF1112HLVu2YNWqVXjiiSfQtm1bAMDo0aPx7rvvYujQoZg8eTJuvvlmRERE4OTJk9ixYwfuuusu/P73v0eXLl3w4IMPYuHChYiIiMCgQYNw6NAhzJ8/36sfHRo4cCD++te/Ytu2bViyZIlLW//+/XHmzBns3r0bY8eO9fq8mKlFixaYOnUqXnnlFZfzlpOT47bUPWXKFKxfvx7Dhg3D7Nmz0a5dO/zP//wPli1bhieeeMLFrKSlpaFFixbYtm0bHnnkEaN+0KBBePnll41tT/LmmN7qp59+whdffAHgshk9fPgw5syZg6ioKDz55JMAgNjYWNx666147bXXkJCQgPbt22PXrl1YvXo1rrzyylodty7y5dtvv8W3334L4PLKw4ULF/DXv/4VwOVHT127dq0VG0U1KjXsZx+phlBxcbE2fvx4rW3btlpkZKTWrFkzrUePHtqf/vQn7fTp00acN99K2LZtmzZu3Djtyiuv1GJiYrShQ4dqR48edenbv39/rVu3btrOnTu19PR0LSoqSmvVqpX2wgsvGN8K0FVdXa3Nnz9fu+GGG7To6Gjtiiuu0Dp37qw9/vjjLuNWVlZqzz77rHb11Vdr0dHRWu/evbWCggK3bwtY6dtvvzU+HX/o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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from rasterio.windows import Window\n", "\n", "with rasterio.open(infile) as src:\n", " \n", " # Define a window (start_x, start_y, width, height)\n", " window = Window(col_off=10000, row_off=10000, width=1000, height=1000)\n", "\n", " # Read band 1 from the window\n", " data = src.read(1, window=window)\n", "\n", "# Plot the clipped data\n", "plt.imshow(data, cmap='gray')\n", "plt.title(\"Clipped Window of Band 1\")\n", "plt.colorbar()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "13734220-956d-4d08-930d-88f1600b6ce5", "metadata": {}, "source": [ "## Example input data\n", "\n", "If you have followed the [GEE script for classifying ice-marginal lakes](https://github.com/GEUS-Glaciology-and-Climate/GrIML/blob/main/gee_scripts/lake_classification.js) available through the GrIML repo, then the returned dataset is a `.tif` raster with coordinates in a defined projection. This dataset is from Greenland, with a projection in [EPSG:3413 Polar Stereographic](https://nsidc.org/data/user-resources/help-center/guide-nsidcs-polar-stereographic-projection). The returned dataset consists of three bands representing binary classification using the following approaches:\n", "\n", "- Multi-spectral classification from Sentinel-2\n", "- Backscatter threshold classification from Sentinel-1\n", "- Sink detection from ArcticDEM\n", "\n", "Here we will open a test data file over a section of North Greenland, processed using the GEE script mentioned above. This test data file is provided in the [GrIML repo](https://github.com/GEUS-Glaciology-and-Climate/GrIML/). Let's first define the location of this raster file, which is located in the top level test directory in the repository." ] }, { "cell_type": "code", "execution_count": 14, "id": "c37a30e4-3f54-4cd7-a4af-c718a73209d4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "../test/test_data/test_north_greenland.tif\n" ] } ], "source": [ "# Define input binary raster\n", "infile = '../test/test_data/test_north_greenland.tif'\n", "print(infile)" ] }, { "cell_type": "markdown", "id": "6c575dc6-7de2-41f5-8956-4667f2fcb98e", "metadata": {}, "source": [ "The GrIML processing workflow starts by converting a binary raster classification to vectors, so first let's import this function." ] }, { "cell_type": "code", "execution_count": 15, "id": "8d26f25f-f9b8-4048-bdd9-17ee63480a7b", "metadata": {}, "outputs": [], "source": [ "from griml.convert import convert" ] }, { "cell_type": "markdown", "id": "ccdd1a9a-7803-4e3b-9da3-180644e82ca1", "metadata": {}, "source": [ "The projection and band information is needed to perform the vector conversion. The projection is defined as a string with the EPSG reference name. The band information is provided as a list of dictionaries. In this example, each band signifies a binary classification using each of the classification methods. If the image only consists of one band then a list still needs to be provided, but should only contain one dictionary with the relevant information." ] }, { "cell_type": "code", "execution_count": 16, "id": "577b5fa8a7529165", "metadata": { "ExecuteTime": { "end_time": "2025-05-13T18:22:04.526357Z", "start_time": "2025-05-13T18:22:04.520061Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "EPSG:3413\n", "[{'b_number': 1, 'method': 'VIS', 'source': 'S2'}, {'b_number': 2, 'method': 'SAR', 'source': 'S1'}, {'b_number': 3, 'method': 'DEM', 'source': 'ARCTICDEM'}]\n" ] } ], "source": [ "# Define projection of input binary raster\n", "proj = 'EPSG:3413'\n", "\n", "# Define band information of binary raster\n", "band_info = [{'b_number':1, 'method':'VIS', 'source':'S2'},\n", " {'b_number':2, 'method':'SAR', 'source':'S1'},\n", " {'b_number':3, 'method':'DEM', 'source':'ARCTICDEM'}]\n", "\n", "print(proj)\n", "print(band_info)" ] }, { "cell_type": "markdown", "id": "022f53a8-3dae-4fde-8b06-041d0f2fa5d9", "metadata": {}, "source": [ "Along with this, the acquisition time range is needed. In this example, classifications were made from averaged satellite imagery acquired between 01-07-2017 and 31-08-2017. In the case that classifications are defined from one image/scene, the start and end time range should be defined as the same date." ] }, { "cell_type": "code", "execution_count": 17, "id": "7d9d1d62-cfed-4eb3-9fc1-866c79aeb81f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20170701\n", "20170831\n" ] } ], "source": [ "# Define start and end dates of acquisitions from which rasters are created\n", "start='20170701'\n", "end='20170831'\n", "\n", "print(start)\n", "print(end)" ] }, { "cell_type": "markdown", "id": "e1fa4f33", "metadata": {}, "source": [ "The file can be converted from raster to vector classifications using the `convert` function and the input variables.\n", "\n", "Note that a single raster file is wrapped as a list, as the `convert` function expects a list of rasters normally. We recommend using `glob` to generate a list of rasters from converting, if you wish to convert multiple classifications." ] }, { "cell_type": "code", "execution_count": 18, "id": "55abc077bfbe57e4", "metadata": { "ExecuteTime": { "end_time": "2025-05-13T18:27:12.580219Z", "start_time": "2025-05-13T18:25:35.473980Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "1. Converting test_north_greenland.tif\n", "Retrieving vectors from band S2...\n", "Retrieving vectors from band S1...\n", "Retrieving vectors from band ARCTICDEM...\n", "[ geometry method source \\\n", "row_id \n", "1 POLYGON ((-240140 -742150, -240140 -742190, -2... VIS S2 \n", "2 POLYGON ((-240300 -742190, -240300 -742200, -2... VIS S2 \n", "3 POLYGON ((-240170 -742190, -240170 -742220, -2... VIS S2 \n", "4 POLYGON ((-241180 -742240, -241180 -742260, -2... VIS S2 \n", "5 POLYGON ((-239900 -742250, -239900 -742260, -2... VIS S2 \n", "... ... ... ... \n", "702096 POLYGON ((-356570 -974130, -356560 -974130, -3... DEM ARCTICDEM \n", "702097 POLYGON ((-352970 -974040, -352960 -974040, -3... DEM ARCTICDEM \n", "702098 POLYGON ((-309630 -974140, -309630 -974150, -3... DEM ARCTICDEM \n", "702099 POLYGON ((-290390 -974120, -290370 -974120, -2... DEM ARCTICDEM \n", "702100 POLYGON ((-263360 -974130, -263310 -974130, -2... DEM ARCTICDEM \n", "\n", " startdate enddate \n", "row_id \n", "1 20170701 20170831 \n", "2 20170701 20170831 \n", "3 20170701 20170831 \n", "4 20170701 20170831 \n", "5 20170701 20170831 \n", "... ... ... \n", "702096 20170701 20170831 \n", "702097 20170701 20170831 \n", "702098 20170701 20170831 \n", "702099 20170701 20170831 \n", "702100 20170701 20170831 \n", "\n", "[702100 rows x 5 columns]]\n" ] } ], "source": [ "# Convert binary raster to vectors\n", "out1 = convert([infile], proj, band_info, start, end)\n", "print(out1)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 5 }