{"id":1258,"date":"2026-10-19T08:57:07","date_gmt":"2026-10-19T08:57:07","guid":{"rendered":"https:\/\/helpwithmygisassignment.com\/blog\/?p=1258"},"modified":"2026-10-19T08:57:07","modified_gmt":"2026-10-19T08:57:07","slug":"processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare","status":"publish","type":"post","link":"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/","title":{"rendered":"Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &#038; CloudCompare"},"content":{"rendered":"<div><\/div>\n<div>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Processing_LiDAR_Point_Clouds_Extracting_Canopy_Height_Models_CHM_in_QGIS_CloudCompare\" >Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#1_Processing_LiDAR_Point_Clouds_Extracting_Canopy_Height_Models_CHM_in_QGIS_CloudCompare_Introduction\" >1. Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare: Introduction<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Software_and_input_data\" >Software and input data<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#2_Core_Concepts_DSM_vs_DEM_vs_CHM\" >2. Core Concepts: DSM vs. DEM vs. CHM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#3_Step-by-Step_LiDAR_Processing_Workflow\" >3. Step-by-Step LiDAR Processing Workflow<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_1_Inspect_and_clean_the_raw_LASLAZ_point_cloud_in_CloudCompare\" >Step 1: Inspect and clean the raw LAS\/LAZ point cloud in CloudCompare<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_2_Classify_ground_and_non-ground_points_using_the_CSF_filter\" >Step 2: Classify ground and non-ground points using the CSF filter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_3_Rasterize_the_ground_points_to_create_a_bare-earth_DEM\" >Step 3: Rasterize the ground points to create a bare-earth DEM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_4_Rasterize_the_upper_surface_to_create_a_DSM\" >Step 4: Rasterize the upper surface to create a DSM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_5_Align_the_DSM_and_DEM_in_QGIS\" >Step 5: Align the DSM and DEM in QGIS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_6_Calculate_the_Canopy_Height_Model_using_the_QGIS_Raster_Calculator\" >Step 6: Calculate the Canopy Height Model using the QGIS Raster Calculator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Step_7_Style_and_validate_the_final_CHM\" >Step 7: Style and validate the final CHM<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#4_Common_Problems_and_Troubleshooting\" >4. Common Problems and Troubleshooting<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#5_Applications_in_Forestry_and_Biomass_Estimation\" >5. Applications in Forestry and Biomass Estimation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#6_Summary\" >6. Summary<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/#Further_reading\" >Further reading<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"Processing_LiDAR_Point_Clouds_Extracting_Canopy_Height_Models_CHM_in_QGIS_CloudCompare\"><\/span>Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h2><span class=\"ez-toc-section\" id=\"1_Processing_LiDAR_Point_Clouds_Extracting_Canopy_Height_Models_CHM_in_QGIS_CloudCompare_Introduction\"><\/span>1. Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare: Introduction<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Light Detection and Ranging (LiDAR) is a remote sensing technology that uses laser pulses to measure distances between a sensor and objects on the Earth&#8217;s surface. Airborne LiDAR systems can capture thousands or millions of three-dimensional points, recording the terrain, forest canopy, buildings, and other features.<\/p>\n<p>Unlike conventional satellite imagery, which primarily records reflected electromagnetic energy, LiDAR provides direct three-dimensional measurements of the surveyed environment. This makes it particularly valuable for forestry inventories, terrain modelling, vegetation analysis, and urban infrastructure mapping.<\/p>\n<p>However, raw LiDAR data is not immediately suitable for many GIS analyses. Before estimating vegetation height, analysts must inspect the point cloud, identify ground returns, and generate elevation rasters representing both the terrain and the upper surface.<\/p>\n<p>This tutorial demonstrates how to process LiDAR point clouds to create a Canopy Height Model (CHM) using CloudCompare and QGIS. The workflow uses CloudCompare for point-cloud inspection, cleaning, ground classification, and rasterization, followed by QGIS for raster alignment, mathematical subtraction, and visualization.<\/p>\n<p>QGIS supports LAS and LAZ point clouds, while CloudCompare provides specialized tools for manipulating point clouds and separating ground from non-ground measurements.<\/p>\n<div>\n<div><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Software_and_input_data\"><\/span>Software and input data<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<table>\n<tbody>\n<tr>\n<th>Requirement<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<tr>\n<td>CloudCompare<\/td>\n<td>Inspect, clean, and classify LiDAR points<\/td>\n<\/tr>\n<tr>\n<td>QGIS<\/td>\n<td>Align elevation rasters, calculate CHM, and create maps<\/td>\n<\/tr>\n<tr>\n<td>Input <code>.las<\/code> or <code>.laz<\/code><\/td>\n<td>Original LiDAR point cloud<\/td>\n<\/tr>\n<tr>\n<td>Output GeoTIFFs<\/td>\n<td>Ground DEM\/DTM, DSM, and final CHM<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Expected outputs:<\/p>\n<ul>\n<li>\n<div>\n<div>\n<p><code>ground_points.las<\/code> \u2014 points classified as ground by the workflow.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p><code>dem_ground.tif<\/code> \u2014 bare-earth elevation model.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p><code>dsm_surface.tif<\/code> \u2014 upper surface elevation model.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p><code>chm_final.tif<\/code> \u2014 estimated canopy height above the ground.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<p>Recommended starting resolution: 1 metre for a sufficiently dense airborne LiDAR dataset. Choose a coarser resolution when point density is low; resolution must reflect the survey&#8217;s sampling density and the detail required.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"2_Core_Concepts_DSM_vs_DEM_vs_CHM\"><\/span>2. Core Concepts: DSM vs. DEM vs. CHM<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Before processing the data, it is important to understand what each elevation model represents.<\/p>\n<div>\n<div>\n<div>\n<div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/images.openai.com\/static-rsc-4\/xKjbWjwx4sCUX5BQEIkATsvrQ_BEm-QX16IG4g31u0MLt550bIN7UvSkzg8hnqeo47w96wM7fMXVttM3WNrmjrB1egzOKj_Yd4yLUumoChNYeDbzwyYJLlCwIED2HkjJ0qGss50OssdzWbOYqyQFVJxJUow1Hogco8jbPTKw1kY?purpose=inline\" alt=\"Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare\" width=\"833\" height=\"989\" \/><\/p>\n<div>\n<div><\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>\n<p>Digital Surface Model (DSM)<\/p>\n<p>A DSM represents the upper surface of the landscape, including trees, rooftops, and other objects. It can be generated by selecting first returns or by taking the maximum observed elevation within each raster cell.<\/p>\n<p>Output: <code>dsm_surface.tif<\/code><\/p>\n<\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/images.openai.com\/static-rsc-4\/l-Oo16lUEvlGBO5eMwyLntw6fB8ILll1HB0vRBLtoExYZ13XzMCKSMmH0_mroCidCXIrGJo6JT_um7JfBQjdVavFvML2H-qUySa97X3xjcErX38P7kEfyZDa6nalEmIRz9SEEDEY00GYt14yTq5e99dvE18XOeHN_4BRycFQShQ?purpose=inline\" alt=\"Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare\" width=\"750\" height=\"644\" \/><\/p>\n<div>\n<div><\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>\n<p>Digital Elevation Model (DEM) \/ Digital Terrain Model (DTM)<\/p>\n<p>A bare-earth DEM represents the ground surface after vegetation and other elevated objects have been excluded. In this workflow, ground-classified LiDAR points are used to estimate the terrain.<\/p>\n<p>Output: <code>dem_ground.tif<\/code><\/p>\n<\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\n<p><img decoding=\"async\" src=\"https:\/\/images.openai.com\/static-rsc-4\/kuK0R8XmZZ1id5qHO3ivvBApy1n7dxbYlDBIBQIN_DsVIz6qrCG3OQRDiG8U4CRrqRvi7_x8NYk-Xw6JW3LPDmkacj8QB38XoqfPBuXsSHenJSNwGeYbyXBAcFBVUhkirf9Bkhh42kns0Wf0DenCnsbNdimnbt-RJ2C1YhWiqiM?purpose=inline\" alt=\"GitHub - r-lidar\/lidR: Airborne LiDAR data manipulation and visualisation for forestry application\" \/><\/p>\n<div>\n<div><\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>\n<p>Canopy Height Model (CHM)<\/p>\n<p>A CHM expresses the elevation of the upper surface relative to the underlying ground. Subtracting the bare-earth elevation from the surface elevation removes the terrain&#8217;s vertical contribution.<\/p>\n<p>Output: <code>chm_final.tif<\/code><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>The core mathematical relationship is:<\/p>\n<div><span data-math-source=\"\\boxed{\\mathrm{CHM}=\\mathrm{DSM}-\\mathrm{DEM}}\" data-math-display=\"true\">\\[ \\boxed{\\mathrm{CHM}=\\mathrm{DSM}-\\mathrm{DEM}} \\]<\/span><\/div>\n<p>For example, if a DSM cell has an elevation of 128.4 metres and its corresponding DEM cell has an elevation of 116.7 metres:<\/p>\n<div><span data-math-source=\"128.4-116.7=11.7\\text{ m}\" data-math-display=\"true\">\\[ 128.4-116.7=11.7\\text{ m} \\]<\/span><\/div>\n<p>The estimated canopy or upper-object height at that location is therefore 11.7 metres.<\/p>\n<p>Important distinction: The CHM represents height above the modelled ground, not necessarily the exact height of an individual tree. Buildings and other elevated objects can also appear in the CHM unless they are identified and removed.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"3_Step-by-Step_LiDAR_Processing_Workflow\"><\/span>3. Step-by-Step LiDAR Processing Workflow<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Step_1_Inspect_and_clean_the_raw_LASLAZ_point_cloud_in_CloudCompare\"><\/span>Step 1: Inspect and clean the raw LAS\/LAZ point cloud in CloudCompare<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The first stage is to inspect the input point cloud and identify obvious data-quality problems.<\/p>\n<p>CloudCompare can open common LiDAR formats, including <code>.las<\/code> and <code>.laz<\/code>. LAS stores point-cloud records in a standard format, while LAZ provides a compressed representation.<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Launch CloudCompare.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Select File \u2192 Open and load the <code>.las<\/code> or <code>.laz<\/code> file.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>If CloudCompare requests a global shift because coordinates are large, accept the suggested shift when appropriate. This helps maintain numerical precision when working with projected coordinates.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Select the point cloud in the database tree.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Inspect the cloud in the 3D viewport. Rotate the scene and examine its vertical structure.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Open the cloud&#8217;s properties or scalar-field list to inspect available attributes such as elevation, intensity, classification, and return number.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Check the coordinate reference system and horizontal and vertical units. If the CRS is missing or uncertain, verify it against the survey metadata rather than guessing.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>Cleaning noise and outliers<\/p>\n<p>Look for isolated points far above the canopy, below the terrain, or outside the main survey area. These may be noise or erroneous measurements.<\/p>\n<p>Depending on your CloudCompare build, use its statistical outlier removal tools or crop the cloud to the study area. Apply filtering conservatively: an unusually high point might be a genuine treetop rather than noise.<\/p>\n<p>Save the original point cloud separately before cleaning. This preserves a reference copy if later processing removes valid measurements.<\/p>\n<p>Suggested figure: CloudCompare showing an airborne LiDAR forest point cloud, with the ground surface and tree canopy visible in the 3D viewport.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_2_Classify_ground_and_non-ground_points_using_the_CSF_filter\"><\/span>Step 2: Classify ground and non-ground points using the CSF filter<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The DEM must represent the bare-earth surface. If vegetation or rooftops are included in the ground model, the resulting canopy heights will be underestimated or otherwise distorted.<\/p>\n<p>The Cloth Simulation Filter (CSF) is a ground-filtering method that models a simulated cloth over an inverted representation of the terrain. It uses the resulting surface to distinguish ground returns from points above the ground.<\/p>\n<div>\n<div><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Select the input point cloud in CloudCompare.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Open Plugins \u2192 CSF or the corresponding CSF filter command in your installed build.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Choose the terrain type:<\/p>\n<ul>\n<li>\n<div>\n<div>\n<p>Flat: relatively level terrain.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Relief: rolling or undulating terrain.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Steep slope: steep or mountainous terrain.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Review the advanced settings.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Set the cloth resolution and classification threshold according to the terrain and point density.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Start with a classification threshold around <code>0.5<\/code> in the dataset&#8217;s vertical units when appropriate, then test and adjust it. This is a starting point, not a universal optimum.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>For steep terrain, consider enabling slope post-processing.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Run the filter and inspect the resulting ground and off-ground subsets.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Save the extracted point clouds as separate LAS\/LAZ files if required for your next processing stage.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>A cloth resolution of approximately 0.5\u20131 metre can be a reasonable initial test for some dense datasets, but the appropriate value depends on terrain complexity, vegetation density, and the scale of the features you need to retain.<\/p>\n<p>Validate the classification before continuing.<\/p>\n<p>The ground subset should follow the terrain beneath the canopy rather than tracing treetops or building roofs. Incorrectly classified low vegetation can introduce bumps into the DEM, while incorrectly excluded ground points can leave holes.<\/p>\n<p>Also note that the CloudCompare CSF workflow typically produces separate ground and off-ground point clouds. Do not assume that it has written LAS classification code 2 into every ground point unless you have verified the saved file.<\/p>\n<p>Suggested figure: CloudCompare displaying ground points and off-ground vegetation points in contrasting colours after CSF classification.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_3_Rasterize_the_ground_points_to_create_a_bare-earth_DEM\"><\/span>Step 3: Rasterize the ground points to create a bare-earth DEM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once the ground subset has been checked, convert its 3D elevations into a continuous <a href=\"https:\/\/helpwithmygisassignment.com\/blog\/vector-tiles-vs-traditional-raster-tiles\/\">raster surface<\/a>.<\/p>\n<p>CloudCompare&#8217;s Rasterize tool converts point clouds to a 2.5D grid and can export the result as a GeoTIFF raster. It supports minimum, average, and maximum height statistics, as well as interpolation of empty cells.<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Select the extracted ground-point cloud in CloudCompare.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Open Tools \u2192 Projection \u2192 Rasterize.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Set the projection direction to Z.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Set the grid step to your target pixel size, such as <code>1.0<\/code> for a 1-metre raster when supported by the survey density.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Choose average height to reduce the influence of minor point-level variation within each cell. Inspect the results and consider alternative interpolation methods if terrain characteristics require them.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Click Update Grid to generate the raster preview.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Review empty cells. Interpolate small gaps when appropriate, but do not automatically fill large data voids with a constant elevation or unrestricted interpolation.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Export the grid using Raster (GeoTIFF).<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Save the result as <code>dem_ground.tif<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>Why use average height?<\/p>\n<p>Ground returns can vary slightly within a cell because of measurement noise and natural surface variation. Averaging accepted ground points can provide a stable estimate of local terrain elevation. In steep or highly variable terrain, however, you should inspect whether this generalization adequately represents the underlying surface.<\/p>\n<p>Critical grid setting: Record the raster grid&#8217;s origin, extent, and cell size. Ideally, the DEM and DSM should use the same grid. CloudCompare&#8217;s Edit Grid controls can be used to define the grid position. When necessary, the rasters can be aligned later in QGIS.<\/p>\n<p>Suggested figure: CloudCompare Rasterize dialog configured to generate a ground elevation GeoTIFF.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_4_Rasterize_the_upper_surface_to_create_a_DSM\"><\/span>Step 4: Rasterize the upper surface to create a DSM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Next, create a Digital Surface Model representing the highest observed surface within each raster cell.<\/p>\n<p>For this step, use the cleaned original point cloud, not just the off-ground subset. The original cloud retains ground points in open areas and beneath gaps in the canopy, allowing the DSM to represent the uppermost observed surface across both vegetated and open locations.<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Select the cleaned, complete point cloud in CloudCompare.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Open Tools \u2192 Projection \u2192 Rasterize.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Set the projection direction to Z.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Use the same cell size as the DEM.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Select maximum height as the cell statistic.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>If the LAS\/LAZ data contain reliable return-number attributes, you may optionally filter to first returns for a first-return surface. Otherwise, taking the maximum Z value within each cell is a straightforward way to estimate the upper surface.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Click Update Grid.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Confirm that the cell size and raster grid alignment match those specified for the DEM.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Export the raster as a GeoTIFF named <code>dsm_surface.tif<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>The maximum-height operation can be represented as:<\/p>\n<div><span data-math-source=\"\\mathrm{DSM}(x,y)=\\max\\{Z_i:(X_i,Y_i)\\in C_{x,y}\\}\" data-math-display=\"true\">\\[ \\mathrm{DSM}(x,y)=\\max\\{Z_i:(X_i,Y_i)\\in C_{x,y}\\} \\]<\/span><\/div>\n<p>Here, <span data-math-source=\"C_{x,y}\" data-math-display=\"false\">\\(C_{x,y}\\)<\/span> is a raster cell and <span data-math-source=\"Z_i\" data-math-display=\"false\">\\(Z_i\\)<\/span> represents the elevations of points falling within it.<\/p>\n<p>Why not use only the non-ground cloud?<\/p>\n<p>Using only non-ground points can leave gaps where the cloud contains no above-ground return. Including the full cleaned cloud produces a more complete surface representation, although gaps in acquisition coverage and other data-quality limitations may still require attention.<\/p>\n<p>Inspect the DSM for isolated high spikes caused by residual noise. Such outliers can generate artificial peaks in the CHM.<\/p>\n<p>Suggested figure: A DSM raster showing the upper surface of a forest, including treetops and open-ground areas.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_5_Align_the_DSM_and_DEM_in_QGIS\"><\/span>Step 5: Align the DSM and DEM in QGIS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Before subtraction, verify that the two rasters share the same coordinate reference system, units, pixel size, grid alignment, and spatial coverage.<\/p>\n<p>Although both rasters may have a nominal 1-metre cell size, they can still be misaligned if their grid origins differ. Pixel-by-pixel subtraction between differently aligned surfaces can introduce artificial height differences.<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Open QGIS and create a new project.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Add <code>dem_ground.tif<\/code> and <code>dsm_surface.tif<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Inspect each raster&#8217;s properties to confirm the CRS, pixel size, extent, and NoData settings.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>If the grids already match, proceed directly to the next step.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>If alignment is required, open the Processing Toolbox and search for Align rasters under the Raster tools group.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Configure the DSM as the reference grid.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Align the DEM to the DSM&#8217;s resolution, CRS, and grid alignment. Use a suitable interpolation method, such as bilinear resampling for continuous elevation data, when resampling is necessary.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Save the aligned output as <code>dem_aligned.tif<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>QGIS provides raster-alignment tools for resampling raster layers to a reference cell size and CRS.<\/p>\n<p>Do not replace NoData cells with zero indiscriminately. A missing ground elevation is not the same as ground elevation zero metres, and treating it as zero would create misleading canopy heights.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_6_Calculate_the_Canopy_Height_Model_using_the_QGIS_Raster_Calculator\"><\/span>Step 6: Calculate the Canopy Height Model using the QGIS Raster Calculator<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>This is the central calculation in the workflow.<\/p>\n<p>The DSM represents the upper surface elevation, while the DEM represents the underlying ground elevation. Subtracting the second from the first isolates their vertical difference.<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Open Raster \u2192 Raster Calculator in QGIS.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Select the raster bands for the DSM and aligned DEM.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Enter the following expression, substituting your actual layer names if necessary:<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<div>\n<div>\n<pre dir=\"ltr\"><code>\"DSM@1\" - \"DEM@1\"<\/code><\/pre>\n<\/div>\n<\/div>\n<p>In this expression, <code>DSM@1<\/code> represents band 1 of the DSM layer, and <code>DEM@1<\/code> represents band 1 of the aligned DEM layer.<\/p>\n<ol start=\"4\">\n<li>\n<div>\n<div>\n<p>Set the output extent and resolution to match the desired analysis grid.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Choose a GeoTIFF output file named <code>chm_final.tif<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Run the calculation.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>The result is:<\/p>\n<div><span data-math-source=\"\\boxed{\\mathrm{CHM}(x,y)=\\mathrm{DSM}(x,y)-\\mathrm{DEM}(x,y)}\" data-math-display=\"true\">\\[ \\boxed{\\mathrm{CHM}(x,y)=\\mathrm{DSM}(x,y)-\\mathrm{DEM}(x,y)} \\]<\/span><\/div>\n<p>For example:<\/p>\n<div>\n<table>\n<tbody>\n<tr>\n<th>Raster<\/th>\n<th>Elevation<\/th>\n<\/tr>\n<tr>\n<td>DSM<\/td>\n<td>128.4 m<\/td>\n<\/tr>\n<tr>\n<td>DEM<\/td>\n<td>116.7 m<\/td>\n<\/tr>\n<tr>\n<td>CHM<\/td>\n<td>11.7 m<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>The resulting raster stores height estimates rather than absolute elevations, provided the input vertical units and datums are compatible.<\/p>\n<p>Interpreting negative values<\/p>\n<p>A correctly aligned surface model will generally produce non-negative height estimates in valid cells. Small negative values can arise from classification errors, interpolation differences, or residual misalignment.<\/p>\n<p>Do not simply clip every negative value to zero before investigating the cause. Review the surfaces first. If the remaining negative values are demonstrably minor artefacts, you can create a cleaned CHM in which those values are set to zero or NoData, depending on your analysis requirements.<\/p>\n<p>Large negative values or implausibly tall peaks usually indicate a problem that should be resolved before publication.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_7_Style_and_validate_the_final_CHM\"><\/span>Step 7: Style and validate the final CHM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>A valid CHM should show meaningful variation in vegetation height, rather than simply reproducing the underlying terrain or displaying random spikes.<\/p>\n<p>Procedure<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Right-click <code>chm_final.tif<\/code> and open Properties \u2192 Symbology.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Choose Singleband pseudocolor.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Select a continuous colour ramp, such as Viridis, or a vegetation-oriented ramp from shorter to taller canopy.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Set an appropriate display range. For an initial inspection, a range of <code>0\u201330 m<\/code> may work for some forest types; adjust it to the actual dataset.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Use the QGIS Identify tool to inspect pixels in several locations.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Compare open-ground areas, individual trees, dense forest, and any known structures against the original point cloud and elevation rasters.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Review the raster statistics and histogram for unexpected negative values, isolated high peaks, or widespread NoData gaps.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>A useful quality-control checklist is:<\/p>\n<ul>\n<li>\n<div>\n<div>\n<p>Open areas should generally have CHM values near zero.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Tree crowns should appear as elevated features.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Ground undulations should not dominate the CHM.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Obvious buildings and other non-vegetation features should be identified if the objective is a forest-only canopy model.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>NoData areas should be understood rather than silently treated as zero-height canopy.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<p>The final product, <code>chm_final.tif<\/code>, is now ready for further forestry analysis, subject to validation against suitable reference data.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"4_Common_Problems_and_Troubleshooting\"><\/span>4. Common Problems and Troubleshooting<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div>\n<table>\n<tbody>\n<tr>\n<th>Problem<\/th>\n<th>Likely cause<\/th>\n<th>Recommended solution<\/th>\n<\/tr>\n<tr>\n<td>Negative CHM values<\/td>\n<td>Misalignment, classification errors, or interpolation differences<\/td>\n<td>Check the grid alignment and inspect DSM\/DEM values before correcting<\/td>\n<\/tr>\n<tr>\n<td>Unrealistically tall trees<\/td>\n<td>High noise points or incorrect DSM maximums<\/td>\n<td>Reinspect outliers and compare against the point cloud<\/td>\n<\/tr>\n<tr>\n<td>Holes in the CHM<\/td>\n<td>Missing returns or NoData in the DEM\/DSM<\/td>\n<td>Inspect data coverage and use justified interpolation where appropriate<\/td>\n<\/tr>\n<tr>\n<td>DEM includes trees<\/td>\n<td>Incorrect ground classification<\/td>\n<td>Adjust CSF parameters and inspect the ground subset<\/td>\n<\/tr>\n<tr>\n<td>Building footprints appear as tall canopy<\/td>\n<td>DSM includes buildings<\/td>\n<td>Mask building footprints or use validated vegetation-only data<\/td>\n<\/tr>\n<tr>\n<td>Different-looking raster extents<\/td>\n<td>DEM and DSM use different grids<\/td>\n<td>Align the rasters before calculation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"5_Applications_in_Forestry_and_Biomass_Estimation\"><\/span>5. Applications in Forestry and Biomass Estimation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A Canopy Height Model is a useful input to forest structure and inventory workflows because it describes the relative height of the upper vegetation surface.<\/p>\n<p>Forest inventory and tree-height estimation: Local CHM maxima can help identify potential tree tops. With appropriate filtering and segmentation, analysts can estimate individual-tree heights and crown dimensions. These are estimates, and dense, overlapping, or multi-layered canopies can make individual-tree delineation difficult.<\/p>\n<p>Canopy cover and forest structure: Applying height thresholds can help estimate the proportion of an area occupied by vegetation above a specified height. CHM statistics can also describe variation in canopy height across forest stands.<\/p>\n<p>Biomass estimation: Mean height, height percentiles, canopy cover, and other CHM-derived metrics can serve as predictors in calibrated biomass models. However, canopy height alone is not a direct measurement of biomass. Reliable biomass estimation generally requires suitable field-plot data and models that may incorporate diameter at breast height (DBH), species, wood density, and tree allometry.<\/p>\n<p>Habitat and ecological assessment: Canopy height patterns can help characterize vertical structure and identify differences between vegetation types or forest conditions.<\/p>\n<p>For all these applications, validate the model&#8217;s accuracy against independent measurements or field observations whenever possible.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"6_Summary\"><\/span>6. Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The workflow combines CloudCompare&#8217;s point-cloud processing tools with QGIS raster analysis to produce a Canopy Height Model:<\/p>\n<ol>\n<li>\n<div>\n<div>\n<p>Inspect and clean the raw LAS\/LAZ data.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Separate ground and non-ground points with the CSF filter.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Rasterize ground returns to generate a bare-earth DEM.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Rasterize the cleaned full cloud using maximum Z values to generate a DSM.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Align the elevation rasters and calculate <code>CHM = DSM \u2212 DEM<\/code> in QGIS.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p>Inspect, style, and validate the resulting CHM before applying it to forestry analysis.<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>The most important quality-control decisions are the accuracy of ground classification, the treatment of empty cells, and the alignment of the DSM and DEM. A well-constructed CHM provides a valuable foundation for forest inventory, canopy characterization, and biomass modelling.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<div>\n<div>\n<p><a href=\"https:\/\/cloudcompare.org\/doc\/wiki\/index.php\/CSF_%28plugin%29?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">CloudCompare: CSF ground-classification plugin<\/a><\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p><a href=\"https:\/\/cloudcompare.org\/doc\/wiki\/index.php\/Rasterize?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">CloudCompare: Rasterize point clouds and export GeoTIFFs<\/a><\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p><a href=\"https:\/\/docs.qgis.org\/4.2\/en\/docs\/user_manual\/working_with_point_clouds\/point_clouds.html?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">QGIS: Working with point clouds<\/a><\/p>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<p><a href=\"https:\/\/docs.qgis.org\/4.2\/en\/docs\/user_manual\/processing_algs\/qgis\/pointcloudconversion.html?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">QGIS: Point-cloud export and conversion tools<\/a><\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare 1. Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &amp; CloudCompare: Introduction Light Detection and Ranging (LiDAR) is a remote sensing technology that uses laser pulses to measure distances between a sensor and objects on the Earth&#8217;s surface. Airborne &#8230; <a title=\"Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &#038; CloudCompare\" class=\"read-more\" href=\"https:\/\/helpwithmygisassignment.com\/blog\/processing-lidar-point-clouds-extracting-canopy-height-models-chm-qgis-cloudcompare\/\" aria-label=\"Read more about Processing LiDAR Point Clouds: Extracting Canopy Height Models (CHM) in QGIS &#038; CloudCompare\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,4],"tags":[],"class_list":["post-1258","post","type-post","status-publish","format-standard","hentry","category-uncategorized","category-gis-articles"],"_links":{"self":[{"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/posts\/1258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/comments?post=1258"}],"version-history":[{"count":4,"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/posts\/1258\/revisions"}],"predecessor-version":[{"id":1313,"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/posts\/1258\/revisions\/1313"}],"wp:attachment":[{"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/media?parent=1258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/categories?post=1258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helpwithmygisassignment.com\/blog\/wp-json\/wp\/v2\/tags?post=1258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}