Skip to content

Instantly share code, notes, and snippets.

@jpolchlo
Last active February 4, 2021 21:47
Show Gist options
  • Select an option

  • Save jpolchlo/fa150870221c11f6860a00c650e26763 to your computer and use it in GitHub Desktop.

Select an option

Save jpolchlo/fa150870221c11f6860a00c650e26763 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plastics Detection with PRISMA over Bali\n",
"\n",
"## Load PRISMA Scene"
]
},
{
"cell_type": "code",
"execution_count": 240,
"metadata": {},
"outputs": [],
"source": [
"import h5py\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"from hyperspectral.spectra import Spectrum, SpectralLibrary\n",
"from hyperspectral.math import goodness_of_fit, rpca_grid, project_data\n",
"from hyperspectral.target import normalized_matched_filter"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"#h5 = h5py.File('data/HSI/PRISMA/PRS_L2D_STD_20200129024616_20200129024620_0001.he5')\n",
"h5 = h5py.File('data/HSI/PRISMA/PRS_L2D_STD_20200825024857_20200825024901_0001.he5')"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"data = h5['HDFEOS']['SWATHS']['PRS_L2D_HCO']['Data Fields']"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"swir = data['SWIR_Cube']\n",
"vnir = data['VNIR_Cube']"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((1179, 173, 1194), (1179, 66, 1194))"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"swir.shape, vnir.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The PRISMA data are in two chunks, but the axis ordering is a bit non-standard, so we reorder the axes and stack the results into a single data cube:"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [],
"source": [
"image = np.dstack([np.swapaxes(swir,1,2), np.swapaxes(vnir,1,2)])/65535\n",
"r,c,_ = image.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Masking\n",
"\n",
"Here, we attempt to derive a mask for the blank regions of the image. The dumb result of pixels that are zero everywhere works well enough,but it is possible to exclude most water surface pixels using the error matrices. (The threshold value was found through trial and error.)"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd2a9bd29e8>"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"mask = np.sum(swir, axis=1) == 0.0\n",
"plt.imshow(mask)"
]
},
{
"cell_type": "code",
"execution_count": 315,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd29df64cc0>"
]
},
"execution_count": 315,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(np.sum(np.dstack([np.swapaxes(data['SWIR_PIXEL_L2_ERR_MATRIX'], 1, 2), np.swapaxes(data['VNIR_PIXEL_L2_ERR_MATRIX'],1,2)]) == 2, axis=2)>40)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Inspect the data"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd2c898c080>"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment