|
35 | 35 | "\n", |
36 | 36 | "In the previous notebook, we took a look at accessing Planet Analytic Feeds Results for both segmentation and object detection, and showed how to visualize Analytic Feeds data with maps and Planet imagery. \n", |
37 | 37 | "\n", |
38 | | - "In this notebook, we take a closer look at a specific type of change detection: Roads & Buildings Construction feeds. We'll show how to use Analytic Feeds and Subscriptions to get this type of Change Detection result, and we'll show how this data can be visualized." |
| 38 | + "In this notebook, we take a closer look at a specific type of change: Road & Building Constructions. We'll show how to use Analytic Feeds and Subscriptions to get this type of Change Detection result, and we'll show how this data can be visualized." |
39 | 39 | ] |
40 | 40 | }, |
41 | 41 | { |
|
44 | 44 | "source": [ |
45 | 45 | "## 2. Change Detection Results\n", |
46 | 46 | "\n", |
47 | | - "The semantic change detection product has been built through the following steps:\n", |
| 47 | + "Planet's Road & Building Change Detection product has been built through the following steps:\n", |
48 | 48 | "\n", |
49 | 49 | "1. Develop a high performing road and building detection model and leverage it to extract roads and buildings from imagery\n", |
50 | 50 | "2. Run road and building detection over an AOI for an extended period of time, gathering as many data points as possible. From month to month, variations in atmosphere, shadows and other factors cause very small differences in the outputs over time leading to significant noise or “flicker”\n", |
51 | | - "3. We de-noise the results by considering the temporal context of each pixel detected. This leads to a more consistent output, however it does introduce a “lag” in when we are able to detect change\n", |
52 | | - "4. We then compare the most recent de-noised output with the previous de-noised output, pull out the differences, \"decimate\" the changes to a fixed size, and polygonize them.\n", |
| 51 | + "3. We de-noise the results by considering the temporal context of each pixel detected. This leads to a more consistent output, however it does introduce a \"lag\" in when we are able to detect change\n", |
| 52 | + "4. We then compare the most recent de-noised output with the previous de-noised output, pull out the differences and vectorize them into polygons, or more specifically into grid cells. This has the benefit of signaling where our model has detected a change.\n", |
53 | 53 | "\n", |
54 | 54 | "#### How do we define building and road construction?\n", |
55 | 55 | "\n", |
|
61 | 61 | "\n", |
62 | 62 | "#### What does a change detection result represent?\n", |
63 | 63 | "\n", |
64 | | - "In the building construction feed, a change result contains a geographic polygon that represents the footprint of a contiguous area where we have detected building construction. \n", |
65 | | - "Thus, these polygons represent general built-up area, and may not identify individual buildings. They may be a group of small buildings clumped together, or a new adjacent wing of an existing building.\n", |
| 64 | + "In the building construction feed, a change result contains a geographic polygon or grid cell that represents the footprint of a contiguous area where we have detected building construction. Thus, these polygons represent general built-up area, and may not identify individual buildings. They may be a group of small buildings clumped together, or a new adjacent wing of an existing building.\n", |
66 | 65 | "\n", |
67 | | - "In the case of the road construction feed, the change results contain a linestring, instead of a polygon. This linestring represents the skeleton of a road segment that has been constructed. \n", |
| 66 | + "In the case of the road construction feed, the change results also contain a polygon or grid cell. It represents the footprint of a contiguous area where a road segment has been constructed.\n", |
68 | 67 | "\n", |
69 | 68 | "#### When did the change actually occur?\n", |
70 | 69 | "\n", |
71 | | - "Building and road construction is typically detected 3-4 months after the event took place. Our system performs statistical inference on the time series of images at the pixel level, and issues a change detection once there is enough confidence that a true transition occurred. Since we use images from Planet Basemaps, which have a monthly sampling rate, we cannot determine the week or day of an event. \n" |
| 70 | + "Building construction is typically detected an average of two months after the event took place, while road construction is detected an average of two and half months after the event took place. Our system performs statistical inference on the time series of images at the pixel level, and issues a change detection once there is enough confidence that a true transition occurred. Currently, we use images from Planet's Monthly Basemaps, which have a monthly sampling rate. This results in an average lag of two to two and half month lag and a monthly cadence. \n", |
| 71 | + "\n", |
| 72 | + "" |
72 | 73 | ] |
73 | 74 | }, |
74 | 75 | { |
|
177 | 178 | "outputs": [], |
178 | 179 | "source": [ |
179 | 180 | "# Define the Subscripton UUID\n", |
180 | | - "#subscription_id = \"dd2878b3-eaf0-4cff-b7f9-7a39d6f460a5\" # Monthly Building Construction\n", |
181 | | - "subscription_id = \"dbfcd806-b44d-45d5-b84d-3566a80eca27\" # Monthly Road Construction\n", |
| 181 | + "#subscription_id = \"635c57d3-b921-453f-8e79-70929e50a470\" # Monthly Building Construction\n", |
| 182 | + "subscription_id = \"8869cf69-9596-47ab-8d94-52b94fcf528e\" # Monthly Road Construction\n", |
182 | 183 | "\n", |
183 | 184 | "# Construct the URL for the Subscription\n", |
184 | 185 | "subscription_url = PAA_BASE_URL + 'subscriptions/' + subscription_id\n", |
|
188 | 189 | "# Make the GET request for Subscriptions list \n", |
189 | 190 | "subscription = session.get(subscription_url).json()\n", |
190 | 191 | "\n", |
191 | | - "# Print subscription data\n", |
192 | | - "print(\"{} \\n{}\\nSubscription Id: {}\\n\".format(subscription['title'], subscription['description'], subscription['id']))\n", |
193 | | - "\n", |
194 | 192 | "# Print the subscription object\n", |
195 | | - "print(json.dumps(subscription, sort_keys=True, indent=4))" |
| 193 | + "print(json.dumps(subscription, sort_keys=True, indent=4))\n", |
| 194 | + "\n", |
| 195 | + "# Print subscription data\n", |
| 196 | + "print(\"{} \\n{}\\nSubscription Id: {}\\n\".format(subscription['title'], subscription['description'], subscription['id']))\n" |
196 | 197 | ] |
197 | 198 | }, |
198 | 199 | { |
|
0 commit comments