{"id":629,"name":"Forest Structural Complexity Tool","description":"Allowing plot scale measurements to be extracted automatically from most high-resolution forest point clouds from a variety of sensor sources.","url":"https://github.com/SKrisanski/FSCT","last_synced_at":"2026-04-07T23:30:19.302Z","repository":{"id":37441532,"uuid":"379154239","full_name":"SKrisanski/FSCT","owner":"SKrisanski","description":null,"archived":false,"fork":false,"pushed_at":"2024-03-03T15:18:51.000Z","size":166294,"stargazers_count":179,"open_issues_count":23,"forks_count":70,"subscribers_count":25,"default_branch":"main","last_synced_at":"2026-03-24T10:47:46.881Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SKrisanski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-06-22T05:39:18.000Z","updated_at":"2026-03-05T05:55:02.000Z","dependencies_parsed_at":"2024-03-17T05:52:20.710Z","dependency_job_id":null,"html_url":"https://github.com/SKrisanski/FSCT","commit_stats":{"total_commits":149,"total_committers":4,"mean_commits":37.25,"dds":"0.20805369127516782","last_synced_commit":"68e2f1e0f295babcaf7d459ca7f78a7626435422"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SKrisanski/FSCT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SKrisanski","download_url":"https://codeload.github.com/SKrisanski/FSCT/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31053455,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T16:55:14.406Z","status":"ssl_error","status_checked_at":"2026-03-27T16:55:07.885Z","response_time":164,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"SKrisanski","name":"Sean Krisanski","uuid":"16696855","kind":"user","description":"","email":"","website":null,"location":"Tasmania","twitter":"SKrisanski","company":null,"icon_url":"https://avatars.githubusercontent.com/u/16696855?u=08b9402ad74cde3122339b1fd9279b78b8282a4e\u0026v=4","repositories_count":1,"last_synced_at":"2026-01-21T18:45:53.698Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/SKrisanski","funding_links":["https://github.com/sponsors/SKrisanski"],"total_stars":130,"followers":36,"following":1,"created_at":"2022-11-15T04:09:26.788Z","updated_at":"2026-01-21T18:45:53.698Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SKrisanski","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SKrisanski/repositories"},"packages":[],"commits":{"id":1254305,"full_name":"SKrisanski/FSCT","default_branch":"main","total_commits":149,"total_committers":4,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":37.25,"dds":0.20805369127516782,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-04T22:01:50.306Z","last_synced_commit":"68e2f1e0f295babcaf7d459ca7f78a7626435422","created_at":"2023-03-27T11:31:58.891Z","updated_at":"2026-04-04T22:01:36.651Z","committers":[{"name":"Sean Krisanski","email":"sean.krisanski@uqconnect.edu.au","login":null,"count":118},{"name":"Sean Krisanski","email":"sean.krisanski@utas.edu.au","login":"SKrisanski","count":28},{"name":"Na1an","email":"yuchenbai@hotmail.com","login":"Na1an","count":2},{"name":"Stefano Puliti","email":"stefano.puliti@gmail.com","login":"stefp","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-06T00:00:08.903Z","repositories_count":6211303,"commits_count":920336441,"contributors_count":35661370,"owners_count":1143045,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"SKrisanski/FSCT","html_url":"https://github.com/SKrisanski/FSCT","last_synced_at":"2026-03-11T10:00:23.815Z","status":"error","issues_count":39,"pull_requests_count":12,"avg_time_to_close_issue":1670490.45,"avg_time_to_close_pull_request":2499338.4285714286,"issues_closed_count":20,"pull_requests_closed_count":7,"pull_request_authors_count":7,"issue_authors_count":25,"avg_comments_per_issue":2.3076923076923075,"avg_comments_per_pull_request":0.4166666666666667,"merged_pull_requests_count":2,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":2,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":7145.0,"past_year_avg_time_to_close_pull_request":15125.0,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.5,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:36:30.013Z","updated_at":"2026-03-11T10:00:23.815Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/SKrisanski%2FFSCT/issues","issue_labels_count":{"enhancement":1,"bug":1},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":36,"OWNER":2,"CONTRIBUTOR":1},"pull_request_author_associations_count":{"NONE":10,"CONTRIBUTOR":2},"issue_authors":{"Rotoslider":5,"ShukhratSh":4,"AnthoineResea":3,"yiqingguobuaa":2,"SKrisanski":2,"ylevental":2,"enhong19":2,"emanthi":2,"msamin23":1,"shorzov":1,"chugom":1,"xiangtaoxu":1,"RodriHS":1,"SeishiroTaki":1,"stefp":1,"grshennan":1,"BoonlueKac":1,"yfly99":1,"cyrilbz":1,"gistin":1,"Kostassan":1,"pentadotddot":1,"bhjolly":1,"FelixUniDa":1,"NinhGhoster":1},"pull_request_authors":{"NinhGhoster":4,"mhdata04":2,"surajiyer28":2,"markovejnovic":1,"stefp":1,"Na1an":1,"smorcuend":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-31T00:00:10.865Z","repositories_count":14022261,"issues_count":34561165,"pull_requests_count":112999297,"authors_count":11212779,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":2},"past_year_pull_request_author_associations_count":{"NONE":2},"past_year_issue_authors":{"cyrilbz":1,"Rotoslider":1},"past_year_pull_request_authors":{"surajiyer28":2},"maintainers":[{"login":"SKrisanski","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/SKrisanski"}],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":5,"ForkEvent":11,"IssuesEvent":2,"WatchEvent":24,"IssueCommentEvent":1},"last_year":{"PullRequestEvent":2,"ForkEvent":4,"IssuesEvent":1,"WatchEvent":11}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2023-09-21T19:44:22.196Z","updated_at":"2023-09-21T19:44:22.196Z","repository_link":"https://github.com/SKrisanski/FSCT/blob/main/requirements.txt","dependencies":[{"id":13856846811,"package_name":"certifi","ecosystem":"pypi","requirements":"==2021.10.8","direct":true,"kind":"runtime","optional":false},{"id":13856846812,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"==2.0.12","direct":true,"kind":"runtime","optional":false},{"id":13856846813,"package_name":"colorama","ecosystem":"pypi","requirements":"==0.4.4","direct":true,"kind":"runtime","optional":false},{"id":13856846814,"package_name":"cycler","ecosystem":"pypi","requirements":"==0.11.0","direct":true,"kind":"runtime","optional":false},{"id":13856846815,"package_name":"Cython","ecosystem":"pypi","requirements":"==0.29.28","direct":true,"kind":"runtime","optional":false},{"id":13856846816,"package_name":"fonttools","ecosystem":"pypi","requirements":"==4.33.3","direct":true,"kind":"runtime","optional":false},{"id":13856846817,"package_name":"googledrivedownloader","ecosystem":"pypi","requirements":"==0.4","direct":true,"kind":"runtime","optional":false},{"id":13856846818,"package_name":"hdbscan","ecosystem":"pypi","requirements":"==0.8.28","direct":true,"kind":"runtime","optional":false},{"id":13856846819,"package_name":"idna","ecosystem":"pypi","requirements":"==3.3","direct":true,"kind":"runtime","optional":false},{"id":13856846820,"package_name":"imageio","ecosystem":"pypi","requirements":"==2.19.0","direct":true,"kind":"runtime","optional":false},{"id":13856846821,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"==4.11.3","direct":true,"kind":"runtime","optional":false},{"id":13856846822,"package_name":"isodate","ecosystem":"pypi","requirements":"==0.6.1","direct":true,"kind":"runtime","optional":false},{"id":13856846823,"package_name":"Jinja2","ecosystem":"pypi","requirements":"==3.1.2","direct":true,"kind":"runtime","optional":false},{"id":13856846824,"package_name":"joblib","ecosystem":"pypi","requirements":"==1.1.0","direct":true,"kind":"runtime","optional":false},{"id":13856846825,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"==1.4.2","direct":true,"kind":"runtime","optional":false},{"id":13856846826,"package_name":"laspy","ecosystem":"pypi","requirements":"==2.1.2","direct":true,"kind":"runtime","optional":false},{"id":13856846827,"package_name":"Markdown","ecosystem":"pypi","requirements":"==3.3.7","direct":true,"kind":"runtime","optional":false},{"id":13856846828,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":13856846829,"package_name":"matplotlib","ecosystem":"pypi","requirements":"==3.5.2","direct":true,"kind":"runtime","optional":false},{"id":13856846830,"package_name":"mdutils","ecosystem":"pypi","requirements":"==1.3.1","direct":true,"kind":"runtime","optional":false},{"id":13856846831,"package_name":"networkx","ecosystem":"pypi","requirements":"==2.8","direct":true,"kind":"runtime","optional":false},{"id":13856846832,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.22.3","direct":true,"kind":"runtime","optional":false},{"id":13856846833,"package_name":"packaging","ecosystem":"pypi","requirements":"==21.3","direct":true,"kind":"runtime","optional":false},{"id":13856846834,"package_name":"pandas","ecosystem":"pypi","requirements":"==1.4.2","direct":true,"kind":"runtime","optional":false},{"id":13856846835,"package_name":"Pillow","ecosystem":"pypi","requirements":"==9.1.0","direct":true,"kind":"runtime","optional":false},{"id":13856846836,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.0.8","direct":true,"kind":"runtime","optional":false},{"id":13856846837,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.8.2","direct":true,"kind":"runtime","optional":false},{"id":13856846838,"package_name":"python-louvain","ecosystem":"pypi","requirements":"==0.16","direct":true,"kind":"runtime","optional":false},{"id":13856846839,"package_name":"pytz","ecosystem":"pypi","requirements":"==2022.1","direct":true,"kind":"runtime","optional":false},{"id":13856846840,"package_name":"PyWavelets","ecosystem":"pypi","requirements":"==1.3.0","direct":true,"kind":"runtime","optional":false},{"id":13856846841,"package_name":"rdflib","ecosystem":"pypi","requirements":"==6.1.1","direct":true,"kind":"runtime","optional":false},{"id":13856846842,"package_name":"requests","ecosystem":"pypi","requirements":"==2.27.1","direct":true,"kind":"runtime","optional":false},{"id":13856846843,"package_name":"scikit-image","ecosystem":"pypi","requirements":"==0.19.2","direct":true,"kind":"runtime","optional":false},{"id":13856846844,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"==1.0.2","direct":true,"kind":"runtime","optional":false},{"id":13856846845,"package_name":"scikit-spatial","ecosystem":"pypi","requirements":"==6.4.0","direct":true,"kind":"runtime","optional":false},{"id":13856846846,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.8.0","direct":true,"kind":"runtime","optional":false},{"id":13856846847,"package_name":"six","ecosystem":"pypi","requirements":"==1.16.0","direct":true,"kind":"runtime","optional":false},{"id":13856846848,"package_name":"sklearn","ecosystem":"pypi","requirements":"==0.0","direct":true,"kind":"runtime","optional":false},{"id":13856846849,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"==3.1.0","direct":true,"kind":"runtime","optional":false},{"id":13856846850,"package_name":"tifffile","ecosystem":"pypi","requirements":"==2022.5.4","direct":true,"kind":"runtime","optional":false},{"id":13856846851,"package_name":"torch","ecosystem":"pypi","requirements":"==1.9.0","direct":true,"kind":"runtime","optional":false},{"id":13856846852,"package_name":"torch-cluster","ecosystem":"pypi","requirements":"==1.5.9","direct":true,"kind":"runtime","optional":false},{"id":13856846853,"package_name":"torch-geometric","ecosystem":"pypi","requirements":"==1.7.2","direct":true,"kind":"runtime","optional":false},{"id":13856846854,"package_name":"torch-scatter","ecosystem":"pypi","requirements":"==2.0.8","direct":true,"kind":"runtime","optional":false},{"id":13856846855,"package_name":"torch-sparse","ecosystem":"pypi","requirements":"==0.6.11","direct":true,"kind":"runtime","optional":false},{"id":13856846856,"package_name":"torch-spline-conv","ecosystem":"pypi","requirements":"==1.2.1","direct":true,"kind":"runtime","optional":false},{"id":13856846857,"package_name":"tqdm","ecosystem":"pypi","requirements":"==4.64.0","direct":true,"kind":"runtime","optional":false},{"id":13856846858,"package_name":"typing_extensions","ecosystem":"pypi","requirements":"==4.2.0","direct":true,"kind":"runtime","optional":false},{"id":13856846859,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.26.9","direct":true,"kind":"runtime","optional":false},{"id":13856846860,"package_name":"zipp","ecosystem":"pypi","requirements":"==3.8.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-09-21T19:44:24.022Z","updated_at":"2023-09-21T19:44:24.022Z","repository_link":"https://github.com/SKrisanski/FSCT/blob/main/setup.py","dependencies":[]}],"score":6.694562058521096,"created_at":"2023-09-11T11:54:35.425Z","updated_at":"2026-04-07T23:30:19.303Z","avatar_url":"https://github.com/SKrisanski.png","language":"Python","category":"Biosphere","sub_category":"Forest Remote Sensing","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Forest Structural Complexity Tool\n\n### Created by Sean Krisanski\n![banner.png](readme_images/banner.png)\n## Purpose of this tool\n\nThis tool was written for the purpose of allowing plot scale measurements to be extracted automatically from most\nhigh-resolution forest point clouds from a variety of sensor sources. Such sensor types it works on include\nTerrestrial Laser Scanning (TLS), Mobile Laser Scanning (MLS), Terrestrial Photogrammetry, Above and below-canopy\nUAS Photogrammetry or similar. Very high resolution Aerial Laser Scanning (ALS) is typically on the borderline of what\nthe segmentation tool is capable of handling at this time. If a dataset is too low resolution, the segmentation model\nwill likely label the stems as vegetation points instead.\n\nThere are also some instances where the segmentation model has not seen appropriate training data for the point cloud.\nThis may be improved in future versions, as it should be easily fixed with additional training data.\n\n**A video showing the outputs of the tool is provided here: https://youtu.be/rej5Bu57AqM**\n\n\n## Installation\n\nYou will need to install all packages in the requirements.txt file. \n\nIf using Anaconda, create a clean environment and activate it. \nIn Anaconda Prompt, type the following (replacing the path to FSCT and your desired environment name as needed):\n\n```shell\ncd PATH_TO_FSCT-MAIN_DIRECTORY\nconda create --name YOUR_ENVIRONMENT_NAME_HERE python==3.9\nconda activate YOUR_ENVIRONMENT_NAME_HERE\nconda install pip\npip install -r requirements.txt\n```\n\nThis should hopefully install all required packages for you.\nThese are the instructions for Windows 10 and Linux.\nI have not tested this on Mac. If someone with a Mac tests this and \nit works (or doesn't), please let me know!\n\nIf you have any difficulties or find any bugs, please get in touch and I will try to help you get it going. \nSuggestions for improvements are greatly appreciated.\n\nIf you do not have an Nvidia GPU, please set the ```use_CPU_only``` setting in ```run.py``` to True.\n\n## How to use\n\nOpen the \"run.py\" file and set num_procs and batch_size appropriately for your computer hardware.\nAdjust the parameters if needed or leave them as they are.\n\nRun the \"run.py\" file. This will ask you to select 1 or multiple \".las\" files.\nIf all goes well, you will have a new directory in the same location as the \".las\" file/s you selected and once complete,\nthis will contain the following outputs.\n\nStart with small plots containing at least some trees. The tree measurement code will currently cause an error if it\nfinds no trees in the point cloud.\n\n## FSCT Outputs\n\n```Plot_Report.html``` and ```Plot_Report.md```\nA summary of the information extracted. Nicer to look at than the processing report, but still a bit ugly in Version 1.\nFuture versions may make this a bit nicer/add data tables/etc.\n\n```tree_data.csv```\nBasic measurements of the trees.\n* Headings are as follows (all units are in metres or cubic metres for volume)\n[x_tree_base, y_tree_base, z_tree_base, DBH, CCI_at_BH, Height, Volume_1, Volume_2, Crown_mean_x, Crown_mean_y, Crown_top_x, Crown_top_y, Crown_top_z, mean_understory_height_in_5m_radius]\n* CCI_at_BH stands for Circumferential Completeness Index at Breast Height. CCI is simply the fraction of a circle with\npoint coverage in a stem slice as illustrated below. This provides an indication of how complete your stem coverage is.\nIn a single scan TLS point cloud, you cannot get a CCI greater than 0.5 (assuming the cylinder fitting was not erroneous), as only one side of the tree is mapped.\nIf you have completely scanned the tree (at the measurement location), you should get a CCI of 1.0 (the highest possible CCI).\n![CCI.jpg](readme_images/CCI.jpg)\nThe figure is from this paper: https://doi.org/10.3390/rs12101652 if you would like a more detailed explanation of the idea.\n\n\n* Volume_1 is the sum of the volume of the fitted cylinders. \n* Volume_2 is the volume of a cone (with a base diameter equal to the DBH and height from 1.3 m up to the tree height) + \nthe volume of a cylinder (with a diameter of DBH and 1.3 m tall). This avoids the possibility of a short and shallow \nangled cone resulting from a short tree with a large DBH.* \n\n```taper_data.csv```\nThis is simply the largest diameter at a range of given heights above the DTM for each stem.\nAll measurements are in metres.\nHeadings are PlotId, TreeId, x_base, y_base, z_base, followed by the measurement heights. \n\n```processing_report.csv```\nSummary information about the plot and the processing times. Be aware: if you open this while processing and FSCT\nattempts to write to the open file, it will throw a permission error.\n\n\n![simple_outputs.png](readme_images/simple_outputs.png)\n\n\n### Point Cloud Outputs\n\n```DTM.las``` Digital Terrain Model in point form.\n![dtm1.png](readme_images/dtm1.png)\n\n```cropped_DTM.las``` Digital Terrain Model cropped to the plot_radius.\n\n```working_point_cloud.las``` The subsampled and cropped point cloud that is fed to the segmentation tool.\n![input_point_cloud.png](readme_images/input_point_cloud.png)\n\n```segmented.las``` The classified point cloud created by the segmentation tool.\n![segmented2.png](readme_images/segmented2.png)\n\n```segmented_cleaned.las``` The cleaned segmented point cloud created during the post-processing step.\n\n```terrain_points.las```  Semantically segmented terrain points.\n\n```vegetation_points.las``` Semantically segmented vegetation points.\n\n```ground_veg.las``` Ground vegetation points.\n\n```cwd_points.las``` Semantically segmented Coarse woody debris points.\n\n```stem_points.las``` Semantically segmented stem points.\n\n```cleaned_cyls.las``` Point-based cylinder representation with a variety of properties. Saved as CSV as well for convenience/ease of use.\n\n```cleaned_cyl_vis.las``` A point cloud visualisation of the circles/cylinders defined in cleaned_cyls.las\nEssentially makes circles out of points for every measurement in cleaned_cyls.\n\n![cleaned_cyl_vis.png](readme_images/cleaned_cyl_vis.png)\n\n```stem_points_sorted.las``` Stem points assigned by tree_id. **This is a simple output at the moment and will not give\nhighly reliable results. This current iteration may be useful for generating instance segmentation training datasets,\nhowever, this will likely require you to manually correct it to be of high enough quality for training data.\n\n```veg_points_sorted.las``` Vegetation assigned by tree_id. Ground points are given a tree_id of 0. **This is a simple \noutput at the moment and will not give highly reliable results.** This current iteration may be useful for generating \ninstance segmentation training datasets, however, this will likely require you to manually correct it to be of high \nenough quality for training data.\n\n\n```text_point_cloud.las``` A point cloud text visualisation of TreeId, DBH, height, CCI at breast height, Volume_1 and \nVolume_2. It's a bit dodgy, but it works in any point cloud viewer without fuss.\n\n```tree_aware_cropped_point_cloud.las``` If you specify a plot_radius and a plot_radius_buffer, this will trim the point\ncloud to the plot_radius. See the **Tree Aware Plot Cropping** section in User Parameters for more information on this mode.\n\n![individual_tree_segmentation.png](readme_images/individual_tree_segmentation.png)\n\n\n### Recommended PC Specifications\n**Warning: FSCT is computationally expensive in its current form.** Fortunately, it is still considerably faster than a human \nat what it does.\n\nIt is **strongly recommended** to have a CUDA compatible GPU (Nvidia) for running this tool. \nThis can be run on CPU only, but expect inference to take a long time. **CPU also appears to give worse semantic segmentation results than GPU. I did not expect this and I do not know why this is the case. If you have any ideas about why they are so different, please let me know!**\n\nIt should be able to be run on most modern gaming desktop PCs (or decently powerful laptops).\n\nI use the following setup and the computational times are tolerable:\n- CPU: Intel i9-10900K (overclocked to 4.99GHz all cores).\n- GPU: Nvidia Titan RTX (24 GB vRAM)\n- RAM: 128 GB DDR4 at 3200 MHz (If you run out of RAM, try increasing your page file size (Windows) or swap size (Linux))\n\nHopefully in time, I'll be able to make this more efficient and less resource hungry.\n\n## User Parameters\n\n### Circular Plot options\n```plot_centre```\n[X, Y] Coordinates of the plot centre (metres). If \"None\", plot_centre is the centre of the bounding box of the point cloud. Leave at None if not using.\n\n```plot_radius```\nIf 0 m, the plot is not cropped. Otherwise, the plot is cylindrically cropped from the plot centre with plot_radius + plot_radius_buffer. Leave at 0 if not using.\n\n```plot_radius_buffer```\nThis is used for \"Tree Aware Plot Cropping Mode\". Leave at 0 if not using.\n\n### Tree Aware Plot Cropping\nThe purpose of this mode is to simulate the behaviour of a typical field plot, by not chopping trees in half if they are\nat the boundary of the plot radius.\n\nWe first trim the point cloud to a radius where the initial trim radius = plot_radius + plot_radius_buffer.\nFor example, we might want a 4 m plot_radius. If we use a 2 m plot_radius_buffer, the point cloud will be cropped to\n6 m radius initially. FSCT will then use the measurement information extracted from the trees in that 6 m radius point\ncloud, to check which tree centres are within the 4 m radius. This allows a tree which was just inside the boundary, to\nextend 2 m beyond the plot boundary without losing points. If we used a simple radius trim at 4 m, trees which were\njust inside the boundary may be cut in half.\n\n![img.png](readme_images/tree_aware_plot_cropping.png)\n\nThis mode is used if plot_radius is non-zero and plot_radius_buffer is non-zero.\n### Other Parameters\n\n```PlotId```\nThe \"PlotId\" is taken from the filename of the input point cloud, so name files accordingly.\n\n### Set these appropriately for your hardware.\n```batch_size```\nThe number of samples in a batch used for the deep learning inference. This number depends on the amount of GPU memory you\nhave. If you set this too high, you will run out of GPU memory. As a rough guide, I can fit 18-20 on an Nvidia Titan RTX GPU with 24 GB GPU\nRAM. \n**Please Note: Until I add some nicer handling of this section, you must set batch_size\u003e=2.**\n\n```num_cpu_cores```\nThe number of CPU cores you have/wish to use. Set to 0 by default, which means using ALL cores.\n\n### Optional settings - Generally leave as they are.\n\n```ground_veg_cutoff_height```\nAny vegetation points below this height are considered to be understory and are not assigned to individual trees.\n\n```veg_sorting_range```\nVegetation points can be, at most, this far away from a cylinder horizontally to be matched to a particular tree.\n\n```sort_stems```\nIf you don't need the sorted stem points, turning this off speeds things up. Veg sorting is required for tree height measurement, but stem sorting isn't necessary for general use.\n\n```stem_sorting_range```\nStem points can be, at most, this far away from a cylinder in 3D to be matched to a particular tree.\n\n```taper_measurement_height_min```\nThe starting height for the output taper measurements.\n\n```taper_measurement_height_max```\nTaper measurements are extracted up to this height above the DTM.\n\n```taper_measurement_height_increment```\nThe increment of the taper measurements.\n\n```taper_slice_thickness```\nThe cleaned cylinders (in the point based representation) within +/- 0.5 * taper_slice_thickness are found. The largest radius within this slice is used as the diameter for that particular height. \n\n```delete_working_directory```\nGenerally leave this on. Deletes the files used for segmentation after segmentation is finished.\nYou may wish to turn it off if you want to re-run/modify the segmentation code so you don't need to run pre-processing every time.\n\n## Scripts\n\n### Scripts you would normally interact with:\n```run.py``` This is how you should interface with the code base under normal use.\n\n```combine_multiple_output_CSVs.py``` This will get\nall \"plot_summary.csv\" files and combine them into one CSV. This will be saved in the highest common directory\nof the selected point clouds.\n\n### Scripts you would only use directly if you are modifying the software:\n```run_tools.py``` A few helper functions to clean up run.py.\n\n```tools.py``` Other helper functions used throughout the code base.\n\n```preprocessing.py``` Performs subsampling of the input point cloud and handles the slicing and dicing of the point\ncloud into samples the segmentation model can work with.\n\n```model.py``` The segmentation model modified from the Pytorch Geometric implementation of Pointnet++.\n\n```inference.py``` Performs the semantic segmentation on the samples and then reassembles them back into a full point\ncloud.\n\n```post_segmentation_script.py``` Creates the Digital Terrain Model (DTM) and uses this and some basic rules to clean the\nsegmented point cloud up. Creates the class specific point clouds (terrain, vegetation, CWD and stem points).\n\n```measure.py``` Extracts measurements and metrics from the outputs of the post_segmentation_script.\n\n```report_writer.py``` Summarises the measurements in a simple report format.\n\n\n#\n\n\n## Known Limitations\n* Young trees with a lot of branching do not currently get segmented correctly.\n* Some extremely large trees do not currently get measured properly as the rules don't always hold.\n* FSCT is unlikely to output useful results on low resolution point clouds. \n* *Very high* resolution Aerial LiDAR is about the lowest it can currently cope with. If your dataset is on the borderline,\ntry setting low_resolution_point_cloud_hack_mode (in other_parameters.py) to 4 or 5 and rerunning. It's an ugly hack, but it can help sometimes.\n* Segmentation does often miss some branches, but usually gets the bulk of them.\n* Small branches are often not detected.\n* Completely horizontal branches/sections may not be measured correctly from the method used.\n\n## Citation\n#### If you wish to cite this work, please use the below citation. If citing for something other than a scientific journal, feel free to link to the GitHub instead.\nKrisanski, S.; Taskhiri, M.S.; Gonzalez Aracil, S.; Herries, D.; Muneri, A.; Gurung, M.B.; Montgomery, J.; Turner, P. Forest Structural Complexity Tool—An Open Source, Fully-Automated Tool for Measuring Forest Point Clouds. Remote Sens. 2021, 13, 4677. https://doi.org/10.3390/rs13224677\n\n## Use of this code\nPlease feel free to use/modify/share this code. If you can improve/evaluate the code somehow and wish to make a paper of it, please do!\nI might not have a chance to make many improvements going forward after my PhD, but I will try to keep it maintained.\n\nIf you can share your improvements, that would be great, but you are not obligated. Commercial use of FSCT is also permitted.\n\n\n## Instructions for training a new semantic segmentation model\n\nFSCT relies heavily on the segmentation model working properly. \nTraining your own model may help expand the utility of FSCT to additional datasets outside of the original training set I used.\n\n### Step 1 - Creating training data\nUnless you modify the code, training data must be provided as a .las file.\nThis file must have a \"label\" column, with integer based labels as follows: 1: Terrain, 2: Vegetation, 3: Coarse woody debris, 4: Stems/branches.\n\nLook at a \"segmented.las\" or \"segmented_cleaned.las\" file (an output of FSCT in normal use) as an example of what the training data must look like.\nIt is strongly recommended to use FSCT to label your data, THEN correct it manually. \n\n**Note: manually segmenting/correcting point clouds is extremely tedious. The original dataset took me ~3-4 weeks to label from scratch...\nI use CloudCompare's segmentation tool for manually correcting the training data. You should start by loading the terrain_points.las, vegetation_points.las, cwd_points.las, and stem_points.las. \nI may eventually add an explanation video of how I do this, but for now, you will need to work out a way to do this.\nImportantly, take great care to label consistently. Sloppy labelling may result in your model not learning what you want it to learn. Small details can matter.**\n\n### Step 2 - Preparing training data for processing\nTake your chosen point cloud, and chop it into train, validation and test slices. You may choose to slice them \nas 50%, 25% and 25% respectively, but use your discretion.\n- Save each slice as a .las file.\n- Place the \"train\" slice into the directory ```FSCT/data/train_dataset/```\n- Place the \"validation\" slice into the directory ```FSCT/data/validation_dataset/```\n- Place the \"test\" slice into the directory ```FSCT/data/test_dataset/```\n\nYou can have multiple point clouds in the above directories, and during preprocessing, they will all be placed in the respective sample directories ```FSCT/data/*_dataset/sample_dir/```\n\n### Step 3 - Preprocessing the training data\nSet the parameters: ```preprocess_train_datasets```, ```preprocess_validation_datasets``` and ```preprocess_test_datasets``` to True (or 1).\nRun the ```train.py``` file and it will generate the samples for you. After running this the first time, set the above to False (or 0) to avoid preprocessing them again and duplicating them in the ```sample_dir``` directories.\n\nFor each labelled point cloud you wish to use for training, you must slice it into a chunk for training (most of the point cloud), and a chunk for validation.\nPlace the training chunk into the \"data/train_dataset/\" directory.\n\n\n**Note:** Preprocessing will add files to the respective ```sample_dir``` directory, but *does not yet delete them*. This is important if you re-run the preprocessing step.\n\n#### Here is a simple scenario which should hopefully make this clearer:\nI have already preprocessed some point clouds located in the ```train_dataset``` directory. I have created another training dataset and wish to preprocess it so I can use it for training.\n\nI have 2 options:\n  Option A: move the already processed point clouds out of the ```train_dataset``` directory. Leave the ```sample_dir``` directory as it was. Add the new training point cloud into the train_dataset directory. Set the ```preprocess_train_datasets``` parameter to 1 and run the script. As you moved the previously processed point clouds out of the train_dataset directory, they will not be processed, and just the new point cloud will be pre-processed and added to the ```sample_dir``` directory. Set the ```preprocess_train_datasets``` parameter back to 0 and proceed as you wish.\n    \n  Option B: Leave your previously processed training point clouds in the ```train_dataset``` directory, add your new training point cloud to this directory also. Manually delete the contents of the ```sample_dir``` directory and re-run preprocessing for all of the training point clouds.\n    \nOptions A and B achieve the same thing, but option A is more efficient, as you are not pre-processing everything from scratch again. Option B is likely necessary if you wish to remove a sample point cloud from the dataset.\n\nWhile most users of FSCT aren't likely to be training their own models, I plan to improve this process. Please see here for future work enhancements planned: https://github.com/SKrisanski/FSCT/issues/4\n \n\n### Step 4 - Train the model\nYou can either let the script continue on after the preprocessing step, or stop it, turn off the preprocessing modes and rerun.\nBe sure to set the parameters according to your computer's specs. If you have CUDA errors, reduce the batch size or switch to CPU mode. If you don't have an Nvidia GPU, you must use CPU mode, but training will be very slow...\n\nThe ```training_monitor.py``` script will plot the loss and accuracy of the model. You must run this simultaneously in a separate terminal/python console to the training script.\n\n**Note: the training process will take several days on a powerful desktop computer.**\n\n### Step 5 - Use the trained model in FSCT\nSimply change the ```model_filename``` in ```other_parameters.py``` to the model you named in ```train.py```.\n\n### An idea potentially worth exploring\nFSCT is already capable of producing reasonably well segmented point clouds (within the stated limitations). \nBy leveraging FSCT to automatically segment point clouds, it seems likely that the model could almost train itself into\na more consistent and robust state through the use of carefully designed data augmentations.\n\n### Created a model that you wish to contribute to the repository?\nGet in touch and if it works well, I'll happily add it to the model collection of this repo.\n\n## Contributing/Collaborating\nThis code is likely far from optimal, so if you find errors or have ideas/suggestions on improvements/better practices,\nthey would be most welcome!\n\n## Acknowledgements\nThis research was funded by the Australian Research Council - Training Centre for Forest Value (IC150100004),\nUniversity of Tasmania, Australia.\n\nThanks to my supervisory team Assoc. Prof Paul Turner and Dr. Mohammad Sadegh Taskhiri from the eLogistics Research\nGroup and Dr. James Montgomery from the University of Tasmania.\n\nThanks to Susana Gonzalez Aracil, David Herries from Interpine Group Ltd (New Zealand) https://interpine.nz/, Allie \nMuneri and Mohan Gurung from PF Olsen (Australia) Ltd. https://au.pfolsen.com/, who provided a number of the raw point\nclouds and plot measurements used during the development and validation of this tool.\n\n\n\n## References\nThe deep learning component uses Pytorch https://pytorch.org/ and Pytorch-Geometric \nhttps://pytorch-geometric.readthedocs.io/en/latest/#\n\nThe first step is semantic segmentation of the forest point cloud. This is performed using a modified version of\nPointnet++ https://github.com/charlesq34/pointnet2 using the implementation in Pytorch-Geometric as a starting point\nprovided here: https://github.com/rusty1s/pytorch_geometric/blob/master/examples/pointnet2_segmentation.py\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.3390/rs12101652","https://doi.org/10.3390/rs13224677"],"works":{"https://doi.org/10.3390/rs12101652":{"id":"https://openalex.org/W3027817129","doi":"https://doi.org/10.3390/rs12101652","title":"Enhancing Methods for Under-Canopy Unmanned Aircraft System Based Photogrammetry in Complex Forests for Tree Diameter Measurement","display_name":"Enhancing Methods for Under-Canopy Unmanned Aircraft System Based Photogrammetry in Complex Forests for Tree Diameter Measurement","publication_year":2020,"publication_date":"2020-05-21","ids":{"openalex":"https://openalex.org/W3027817129","doi":"https://doi.org/10.3390/rs12101652","mag":"3027817129"},"language":"en","primary_location":{"is_oa":true,"landing_page_url":"https://doi.org/10.3390/rs12101652","pdf_url":"https://www.mdpi.com/2072-4292/12/10/1652/pdf","source":{"id":"https://openalex.org/S43295729","display_name":"Remote Sensing","issn_l":"2072-4292","issn":["2072-4292"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310310987","host_organization_name":"Multidisciplinary Digital Publishing Institute","host_organization_lineage":["https://openalex.org/P4310310987"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},"type":"article","type_crossref":"journal-article","open_access":{"is_oa":true,"oa_status":"gold","oa_url":"https://www.mdpi.com/2072-4292/12/10/1652/pdf","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5070066422","display_name":"Sean Krisanski","orcid":"https://orcid.org/0000-0003-0689-0051"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]}],"countries":["AU"],"is_corresponding":true,"raw_author_name":"Sean Krisanski","raw_affiliation_string":"ARC Training Centre for Forest Value, University of Tasmania, Churchill Ave., Hobart, TAS 7005, Australia","raw_affiliation_strings":["ARC Training Centre for Forest Value, University of Tasmania, Churchill Ave., Hobart, TAS 7005, Australia"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5072320455","display_name":"Mohammad Sadegh Taskhiri","orcid":"https://orcid.org/0000-0002-9871-361X"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]}],"countries":["AU"],"is_corresponding":false,"raw_author_name":"Mohammad Sadegh Taskhiri","raw_affiliation_string":"ARC Training Centre for Forest Value, University of Tasmania, Churchill Ave., Hobart, TAS 7005, Australia","raw_affiliation_strings":["ARC Training Centre for Forest Value, University of Tasmania, Churchill Ave., Hobart, TAS 7005, Australia"]},{"author_position":"last","author":{"id":"https://openalex.org/A5084007275","display_name":"Paul Turner","orcid":"https://orcid.org/0000-0003-4504-2338"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]}],"countries":["AU"],"is_corresponding":false,"raw_author_name":"Paul Turner","raw_affiliation_string":"ARC Training Centre for Forest Value, University of Tasmania, Churchill Ave., Hobart, TAS 7005, Australia","raw_affiliation_strings":["ARC Training Centre for Forest Value, University of Tasmania, Churchill Ave., Hobart, TAS 7005, Australia"]}],"countries_distinct_count":1,"institutions_distinct_count":1,"corresponding_author_ids":["https://openalex.org/A5070066422"],"corresponding_institution_ids":["https://openalex.org/I129801699"],"apc_list":{"value":2500,"currency":"CHF","value_usd":2707,"provenance":"doaj"},"apc_paid":{"value":2500,"currency":"CHF","value_usd":2707,"provenance":"doaj"},"has_fulltext":true,"fulltext_origin":"pdf","cited_by_count":41,"cited_by_percentile_year":{"min":97,"max":98},"biblio":{"volume":"12","issue":"10","first_page":"1652","last_page":"1652"},"is_retracted":false,"is_paratext":false,"keywords":[{"keyword":"tree diameter measurement","score":0.5864},{"keyword":"complex forests","score":0.4571},{"keyword":"photogrammetry","score":0.392},{"keyword":"under-canopy","score":0.25}],"concepts":[{"id":"https://openalex.org/C117455697","wikidata":"https://www.wikidata.org/wiki/Q190149","display_name":"Photogrammetry","level":2,"score":0.83571386},{"id":"https://openalex.org/C131979681","wikidata":"https://www.wikidata.org/wiki/Q1899648","display_name":"Point cloud","level":2,"score":0.7937397},{"id":"https://openalex.org/C101000010","wikidata":"https://www.wikidata.org/wiki/Q5033434","display_name":"Canopy","level":2,"score":0.767721},{"id":"https://openalex.org/C62649853","wikidata":"https://www.wikidata.org/wiki/Q199687","display_name":"Remote sensing","level":1,"score":0.7580035},{"id":"https://openalex.org/C161840515","wikidata":"https://www.wikidata.org/wiki/Q186131","display_name":"Terrain","level":2,"score":0.6708551},{"id":"https://openalex.org/C39432304","wikidata":"https://www.wikidata.org/wiki/Q188847","display_name":"Environmental science","level":0,"score":0.6012717},{"id":"https://openalex.org/C51399673","wikidata":"https://www.wikidata.org/wiki/Q504027","display_name":"Lidar","level":2,"score":0.5673943},{"id":"https://openalex.org/C139669111","wikidata":"https://www.wikidata.org/wiki/Q422666","display_name":"Understory","level":3,"score":0.4561417},{"id":"https://openalex.org/C39807119","wikidata":"https://www.wikidata.org/wiki/Q1134228","display_name":"Tree canopy","level":3,"score":0.44335306},{"id":"https://openalex.org/C146159030","wikidata":"https://www.wikidata.org/wiki/Q7625099","display_name":"Structure from motion","level":3,"score":0.4164587},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.29252937},{"id":"https://openalex.org/C205649164","wikidata":"https://www.wikidata.org/wiki/Q1071","display_name":"Geography","level":0,"score":0.22672194},{"id":"https://openalex.org/C58640448","wikidata":"https://www.wikidata.org/wiki/Q42515","display_name":"Cartography","level":1,"score":0.12277299},{"id":"https://openalex.org/C154945302","wikidata":"https://www.wikidata.org/wiki/Q11660","display_name":"Artificial intelligence","level":1,"score":0.0702267},{"id":"https://openalex.org/C166957645","wikidata":"https://www.wikidata.org/wiki/Q23498","display_name":"Archaeology","level":1,"score":0.0},{"id":"https://openalex.org/C10161872","wikidata":"https://www.wikidata.org/wiki/Q557891","display_name":"Motion estimation","level":2,"score":0.0}],"mesh":[],"locations_count":4,"locations":[{"is_oa":true,"landing_page_url":"https://doi.org/10.3390/rs12101652","pdf_url":"https://www.mdpi.com/2072-4292/12/10/1652/pdf","source":{"id":"https://openalex.org/S43295729","display_name":"Remote Sensing","issn_l":"2072-4292","issn":["2072-4292"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310310987","host_organization_name":"Multidisciplinary Digital Publishing Institute","host_organization_lineage":["https://openalex.org/P4310310987"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},{"is_oa":true,"landing_page_url":"https://figshare.com/articles/journal_contribution/Enhancing_methods_for_under-canopy_unmanned_aircraft_system_based_photogrammetry_in_complex_forests_for_tree_diameter_measurement/22988651","pdf_url":"https://figshare.com/articles/journal_contribution/Enhancing_methods_for_under-canopy_unmanned_aircraft_system_based_photogrammetry_in_complex_forests_for_tree_diameter_measurement/22988651/1/files/40736273.pdf","source":{"id":"https://openalex.org/S4306400572","display_name":"OPAL (Open@LaTrobe) (La Trobe University)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"host_organization":"https://openalex.org/I196829312","host_organization_name":"La Trobe University","host_organization_lineage":["https://openalex.org/I196829312"],"host_organization_lineage_names":["La Trobe University"],"type":"repository"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},{"is_oa":true,"landing_page_url":"https://dx.doi.org/10.3390/rs12101652","pdf_url":"https://www.mdpi.com/2072-4292/12/10/1652/pdf?version=1590565666","source":{"id":"https://openalex.org/S4306400947","display_name":"MDPI (MDPI AG)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"host_organization":"https://openalex.org/I4210097602","host_organization_name":"Multidisciplinary Digital Publishing Institute (Switzerland)","host_organization_lineage":["https://openalex.org/I4210097602"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute (Switzerland)"],"type":"repository"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},{"is_oa":true,"landing_page_url":"https://vuir.vu.edu.au/45066/1/remotesensing-12-01652-v2.pdf","pdf_url":"https://vuir.vu.edu.au/45066/1/remotesensing-12-01652-v2.pdf","source":{"id":"https://openalex.org/S4306400215","display_name":"Victoria University Research Repository (Victoria University)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"host_organization":"https://openalex.org/I41156924","host_organization_name":"Victoria University of Wellington","host_organization_lineage":["https://openalex.org/I41156924"],"host_organization_lineage_names":["Victoria University of Wellington"],"type":"repository"},"license":"cc-by","version":"acceptedVersion","is_accepted":true,"is_published":false}],"best_oa_location":{"is_oa":true,"landing_page_url":"https://doi.org/10.3390/rs12101652","pdf_url":"https://www.mdpi.com/2072-4292/12/10/1652/pdf","source":{"id":"https://openalex.org/S43295729","display_name":"Remote Sensing","issn_l":"2072-4292","issn":["2072-4292"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310310987","host_organization_name":"Multidisciplinary Digital Publishing Institute","host_organization_lineage":["https://openalex.org/P4310310987"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},"sustainable_development_goals":[{"id":"https://metadata.un.org/sdg/15","display_name":"Life in Land","score":0.72}],"grants":[],"referenced_works_count":21,"referenced_works":["https://openalex.org/W1970685828","https://openalex.org/W1998222021","https://openalex.org/W2019549520","https://openalex.org/W2027672019","https://openalex.org/W2043223959","https://openalex.org/W2094499615","https://openalex.org/W2108664923","https://openalex.org/W2296685749","https://openalex.org/W2319003540","https://openalex.org/W2496005047","https://openalex.org/W2593778105","https://openalex.org/W2611090267","https://openalex.org/W2740121437","https://openalex.org/W2742575390","https://openalex.org/W2768000522","https://openalex.org/W2782264647","https://openalex.org/W2782807102","https://openalex.org/W2787951286","https://openalex.org/W2826247891","https://openalex.org/W2941082889","https://openalex.org/W2974449456"],"related_works":["https://openalex.org/W4353089720","https://openalex.org/W2543661874","https://openalex.org/W3165704192","https://openalex.org/W3027817129","https://openalex.org/W2056769725","https://openalex.org/W4210661478","https://openalex.org/W2771153279","https://openalex.org/W2335177719","https://openalex.org/W4213110649","https://openalex.org/W3089700404"],"ngrams_url":"https://api.openalex.org/works/W3027817129/ngrams","abstract_inverted_index":{"The":[0,125,189,245,281],"application":[1],"of":[2,22,35,77,116,134,154,173,178,191,207,210,227,256,271,312],"Unmanned":[3],"Aircraft":[4],"Systems":[5],"(UAS)":[6],"beneath":[7],"the":[8,41,114,132,152,162,171,192,208,240,309],"forest":[9,42,46,78,97,186,211],"canopy":[10,24,43],"provides":[11],"a":[12,33,36,92,110,135,159,174,204,252,267,295,336],"potentially":[13],"valuable":[14],"alternative":[15,61,297],"to":[16,54,62,112,169,202,298,317,328,341],"ground-based":[17],"measurement":[18,127,190],"techniques":[19],"in":[20,44,91,199,233,239,248,283,293,320],"areas":[21],"dense":[23],"cover":[25],"and":[26,47,102,146,220,236,261,276,314,335],"undergrowth.":[27],"This":[28,50],"research":[29],"presents":[30],"results":[31,282,304],"from":[32,88,119,185],"study":[34,79,250,285],"consumer-grade":[37],"UAS":[38,51,57,289],"flown":[39],"under":[40],"challenging":[45,242],"terrain":[48,137],"conditions.":[49],"was":[52,129,167,223],"deployed":[53],"assess":[55],"under-canopy":[56,120,288],"photogrammetry":[58,290,313],"as":[59,69,71,109],"an":[60,140],"field":[63,300],"measurements":[64,86,106,118,229],"for":[65,151,197,258,263,273,278,338],"obtaining":[66],"stem":[67,183],"diameters":[68,184],"well":[70],"ultra-high-resolution":[72],"(~400,000":[73],"points/m2)":[74],"3D":[75],"models":[76],"sites.":[80],"There":[81],"were":[82,107,230],"378":[83],"tape-based":[84,142],"diameter":[85,117,126,228],"collected":[87],"99":[89],"stems":[90],"native,":[93],"unmanaged":[94],"eucalyptus":[95],"pulchella":[96],"with":[98,266],"mixed":[99],"understory":[100],"conditions":[101],"steep":[103],"terrain.":[104],"These":[105],"used":[108],"baseline":[111],"evaluate":[113],"accuracy":[115,128],"UAS-based":[121],"photogrammetric":[122],"point":[123,156,179,187,212,217,246,333,342],"clouds.":[124,157,188],"evaluated":[130],"without":[131],"influence":[133],"digital":[136],"model":[138],"using":[139,214],"innovative":[141],"method.":[143],"A":[144],"practical":[145,296],"detailed":[147],"methodology":[148],"is":[149,195],"presented":[150],"creation":[153],"these":[155,303],"Lastly,":[158],"metric":[160],"called":[161],"Circumferential":[163],"Completeness":[164],"Index":[165],"(CCI)":[166],"defined":[168,176],"address":[170],"absence":[172],"clearly":[175],"measure":[177],"coverage":[180,209],"when":[181,344],"measuring":[182],"mean":[193,253,268],"CCI":[194,255,270],"suggested":[196],"use":[198],"future":[200],"studies":[201],"enable":[203],"consistent":[205],"comparison":[206],"clouds":[213,247,343],"different":[215],"sensors,":[216],"densities,":[218],"trajectories,":[219],"methodologies.":[221],"It":[222],"found":[224],"that":[225,287],"root-mean-squared-errors":[226],"0.011":[231],"m":[232,238],"Site":[234,243,259,264,274,279],"1":[235,260,275],"0.021":[237],"more":[241,331],"2.":[244,280],"this":[249,284],"had":[251],"validated":[254],"0.78":[257],"0.7":[262],"2,":[265],"unvalidated":[269],"0.86":[272],"0.89":[277],"demonstrate":[286],"shows":[291],"promise":[292],"becoming":[294],"traditional":[299],"measurements,":[301],"however,":[302],"are":[305,349],"currently":[306],"reliant":[307],"upon":[308],"operator’s":[310],"knowledge":[311],"his/her":[315],"ability":[316],"fly":[318],"manually":[319],"object-rich":[321],"environments.":[322],"Future":[323],"work":[324],"should":[325],"pursue":[326],"solutions":[327],"autonomous":[329],"operation,":[330],"complete":[332],"clouds,":[334],"method":[337],"providing":[339],"scale":[340],"global":[345],"navigation":[346],"satellite":[347],"systems":[348],"unavailable.":[350]},"cited_by_api_url":"https://api.openalex.org/works?filter=cites:W3027817129","counts_by_year":[{"year":2023,"cited_by_count":12},{"year":2022,"cited_by_count":13},{"year":2021,"cited_by_count":12},{"year":2020,"cited_by_count":2}],"updated_date":"2023-12-13T14:34:54.246561","created_date":"2020-05-29"},"https://doi.org/10.3390/rs13224677":{"id":"https://openalex.org/W3215497122","doi":"https://doi.org/10.3390/rs13224677","title":"Forest Structural Complexity Tool—An Open Source, Fully-Automated Tool for Measuring Forest Point Clouds","display_name":"Forest Structural Complexity Tool—An Open Source, Fully-Automated Tool for Measuring Forest Point Clouds","publication_year":2021,"publication_date":"2021-11-19","ids":{"openalex":"https://openalex.org/W3215497122","doi":"https://doi.org/10.3390/rs13224677","mag":"3215497122"},"language":"en","primary_location":{"is_oa":true,"landing_page_url":"https://doi.org/10.3390/rs13224677","pdf_url":"https://www.mdpi.com/2072-4292/13/22/4677/pdf?version=1637335541","source":{"id":"https://openalex.org/S43295729","display_name":"Remote Sensing","issn_l":"2072-4292","issn":["2072-4292"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310310987","host_organization_name":"Multidisciplinary Digital Publishing Institute","host_organization_lineage":["https://openalex.org/P4310310987"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},"type":"article","type_crossref":"journal-article","open_access":{"is_oa":true,"oa_status":"gold","oa_url":"https://www.mdpi.com/2072-4292/13/22/4677/pdf?version=1637335541","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5070066422","display_name":"Sean Krisanski","orcid":"https://orcid.org/0000-0003-0689-0051"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]}],"countries":["AU"],"is_corresponding":true,"raw_author_name":"Sean Krisanski","raw_affiliation_string":"ARC Training Centre for Forest Value, University of Tasmania, Sandy Bay, TAS 7005, Australia","raw_affiliation_strings":["ARC Training Centre for Forest Value, University of Tasmania, Sandy Bay, TAS 7005, Australia"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5072320455","display_name":"Mohammad Sadegh Taskhiri","orcid":"https://orcid.org/0000-0002-9871-361X"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]},{"id":"https://openalex.org/I71270174","display_name":"Victoria University","ror":"https://ror.org/04j757h98","country_code":"AU","type":"education","lineage":["https://openalex.org/I71270174"]}],"countries":["AU"],"is_corresponding":false,"raw_author_name":"Mohammad Sadegh Taskhiri","raw_affiliation_string":"ARC Training Centre for Forest Value, University of Tasmania, Sandy Bay, TAS 7005, Australia; Institute of Sustainable Industries and Livable Cities, Victoria University, Footscray, VIC 3011, Australia","raw_affiliation_strings":["ARC Training Centre for Forest Value, University of Tasmania, Sandy Bay, TAS 7005, Australia","Institute of Sustainable Industries and Livable Cities, Victoria University, Footscray, VIC 3011, Australia"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5084741013","display_name":"Susana Gonzalez Aracil","orcid":null},"institutions":[{"id":"https://openalex.org/I4210099880","display_name":"Rotorua Hospital","ror":"https://ror.org/012eghd53","country_code":"NZ","type":"healthcare","lineage":["https://openalex.org/I4210099880"]}],"countries":["NZ"],"is_corresponding":false,"raw_author_name":"Susana Gonzalez Aracil","raw_affiliation_string":"Interpine Group Ltd., Rotorua 3010, New Zealand","raw_affiliation_strings":["Interpine Group Ltd., Rotorua 3010, New Zealand"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5089948661","display_name":"David Herries","orcid":null},"institutions":[{"id":"https://openalex.org/I4210099880","display_name":"Rotorua Hospital","ror":"https://ror.org/012eghd53","country_code":"NZ","type":"healthcare","lineage":["https://openalex.org/I4210099880"]}],"countries":["NZ"],"is_corresponding":false,"raw_author_name":"David Herries","raw_affiliation_string":"Interpine Group Ltd., Rotorua 3010, New Zealand","raw_affiliation_strings":["Interpine Group Ltd., Rotorua 3010, New Zealand"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5034052037","display_name":"Allie Muneri","orcid":null},"institutions":[],"countries":["AU"],"is_corresponding":false,"raw_author_name":"Allie Muneri","raw_affiliation_string":"PF Olsen (Australia) Pty Ltd., Ivanhoe, VIC 3079, Australia","raw_affiliation_strings":["PF Olsen (Australia) Pty Ltd., Ivanhoe, VIC 3079, Australia"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5042977109","display_name":"Mohan Babu Gurung","orcid":null},"institutions":[],"countries":["AU"],"is_corresponding":false,"raw_author_name":"Mohan Babu Gurung","raw_affiliation_string":"PF Olsen (Australia) Pty Ltd., Ivanhoe, VIC 3079, Australia","raw_affiliation_strings":["PF Olsen (Australia) Pty Ltd., Ivanhoe, VIC 3079, Australia"]},{"author_position":"middle","author":{"id":"https://openalex.org/A5024921295","display_name":"James Montgomery","orcid":"https://orcid.org/0000-0002-5360-7514"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]}],"countries":["AU"],"is_corresponding":false,"raw_author_name":"James Montgomery","raw_affiliation_string":"School of Information and Communication Technology, University of Tasmania, Sandy Bay, TAS 7005, Australia","raw_affiliation_strings":["School of Information and Communication Technology, University of Tasmania, Sandy Bay, TAS 7005, Australia"]},{"author_position":"last","author":{"id":"https://openalex.org/A5084007275","display_name":"Paul Turner","orcid":"https://orcid.org/0000-0003-4504-2338"},"institutions":[{"id":"https://openalex.org/I129801699","display_name":"University of Tasmania","ror":"https://ror.org/01nfmeh72","country_code":"AU","type":"education","lineage":["https://openalex.org/I129801699"]}],"countries":["AU"],"is_corresponding":false,"raw_author_name":"Paul Turner","raw_affiliation_string":"ARC Training Centre for Forest Value, University of Tasmania, Sandy Bay, TAS 7005, Australia","raw_affiliation_strings":["ARC Training Centre for Forest Value, University of Tasmania, Sandy Bay, TAS 7005, Australia"]}],"countries_distinct_count":2,"institutions_distinct_count":3,"corresponding_author_ids":["https://openalex.org/A5070066422"],"corresponding_institution_ids":["https://openalex.org/I129801699"],"apc_list":{"value":2500,"currency":"CHF","value_usd":2707,"provenance":"doaj"},"apc_paid":{"value":2500,"currency":"CHF","value_usd":2707,"provenance":"doaj"},"has_fulltext":true,"fulltext_origin":"pdf","cited_by_count":18,"cited_by_percentile_year":{"min":96,"max":97},"biblio":{"volume":"13","issue":"22","first_page":"4677","last_page":"4677"},"is_retracted":false,"is_paratext":false,"keywords":[{"keyword":"complexity","score":0.3812},{"keyword":"structural","score":0.2523},{"keyword":"fully-automated","score":0.25}],"concepts":[{"id":"https://openalex.org/C131979681","wikidata":"https://www.wikidata.org/wiki/Q1899648","display_name":"Point cloud","level":2,"score":0.7894384},{"id":"https://openalex.org/C62649853","wikidata":"https://www.wikidata.org/wiki/Q199687","display_name":"Remote sensing","level":1,"score":0.70171463},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.6983063},{"id":"https://openalex.org/C177212765","wikidata":"https://www.wikidata.org/wiki/Q627335","display_name":"Workflow","level":2,"score":0.57141984},{"id":"https://openalex.org/C2778755073","wikidata":"https://www.wikidata.org/wiki/Q10858537","display_name":"Scale (ratio)","level":2,"score":0.52640295},{"id":"https://openalex.org/C139945424","wikidata":"https://www.wikidata.org/wiki/Q1940696","display_name":"Mean squared error","level":2,"score":0.44459987},{"id":"https://openalex.org/C39432304","wikidata":"https://www.wikidata.org/wiki/Q188847","display_name":"Environmental science","level":0,"score":0.41308612},{"id":"https://openalex.org/C154945302","wikidata":"https://www.wikidata.org/wiki/Q11660","display_name":"Artificial intelligence","level":1,"score":0.16426426},{"id":"https://openalex.org/C105795698","wikidata":"https://www.wikidata.org/wiki/Q12483","display_name":"Statistics","level":1,"score":0.12448275},{"id":"https://openalex.org/C77088390","wikidata":"https://www.wikidata.org/wiki/Q8513","display_name":"Database","level":1,"score":0.119594544},{"id":"https://openalex.org/C33923547","wikidata":"https://www.wikidata.org/wiki/Q395","display_name":"Mathematics","level":0,"score":0.09741461},{"id":"https://openalex.org/C127313418","wikidata":"https://www.wikidata.org/wiki/Q1069","display_name":"Geology","level":0,"score":0.09163669},{"id":"https://openalex.org/C58640448","wikidata":"https://www.wikidata.org/wiki/Q42515","display_name":"Cartography","level":1,"score":0.08893913},{"id":"https://openalex.org/C205649164","wikidata":"https://www.wikidata.org/wiki/Q1071","display_name":"Geography","level":0,"score":0.088002235}],"mesh":[],"locations_count":5,"locations":[{"is_oa":true,"landing_page_url":"https://doi.org/10.3390/rs13224677","pdf_url":"https://www.mdpi.com/2072-4292/13/22/4677/pdf?version=1637335541","source":{"id":"https://openalex.org/S43295729","display_name":"Remote Sensing","issn_l":"2072-4292","issn":["2072-4292"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310310987","host_organization_name":"Multidisciplinary Digital Publishing Institute","host_organization_lineage":["https://openalex.org/P4310310987"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},{"is_oa":false,"landing_page_url":"https://doaj.org/article/7cfe1b6b06fd4369bdb4710e66673be1","pdf_url":null,"source":{"id":"https://openalex.org/S4306401280","display_name":"DOAJ (DOAJ: Directory of Open Access Journals)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"repository"},"license":null,"version":null,"is_accepted":false,"is_published":false},{"is_oa":true,"landing_page_url":"https://figshare.com/articles/journal_contribution/Forest_structural_complexity_tool_-_an_open_source_fully-automated_tool_for_measuring_forest_point_clouds/23003399","pdf_url":"https://figshare.com/articles/journal_contribution/Forest_structural_complexity_tool_-_an_open_source_fully-automated_tool_for_measuring_forest_point_clouds/23003399/1/files/40754129.pdf","source":{"id":"https://openalex.org/S4306400572","display_name":"OPAL (Open@LaTrobe) (La Trobe University)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"host_organization":"https://openalex.org/I196829312","host_organization_name":"La Trobe University","host_organization_lineage":["https://openalex.org/I196829312"],"host_organization_lineage_names":["La Trobe University"],"type":"repository"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},{"is_oa":true,"landing_page_url":"https://vuir.vu.edu.au/45105/1/remotesensing-13-04677.pdf","pdf_url":"https://vuir.vu.edu.au/45105/1/remotesensing-13-04677.pdf","source":{"id":"https://openalex.org/S4306402209","display_name":"VU Research Repository (Victoria University)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"host_organization":"https://openalex.org/I41156924","host_organization_name":"Victoria University of Wellington","host_organization_lineage":["https://openalex.org/I41156924"],"host_organization_lineage_names":["Victoria University of Wellington"],"type":"repository"},"license":"cc-by","version":"acceptedVersion","is_accepted":true,"is_published":false},{"is_oa":true,"landing_page_url":"https://eprints.utas.edu.au/44510/1/148068%20-%20Forest%20structural%20complexity%20tool.pdf","pdf_url":"https://eprints.utas.edu.au/44510/1/148068%20-%20Forest%20structural%20complexity%20tool.pdf","source":{"id":"https://openalex.org/S4377196333","display_name":"Open Access Repository (University of Tasmania)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"host_organization":"https://openalex.org/I129801699","host_organization_name":"University of Tasmania","host_organization_lineage":["https://openalex.org/I129801699"],"host_organization_lineage_names":["University of Tasmania"],"type":"repository"},"license":"cc-by","version":"acceptedVersion","is_accepted":true,"is_published":false}],"best_oa_location":{"is_oa":true,"landing_page_url":"https://doi.org/10.3390/rs13224677","pdf_url":"https://www.mdpi.com/2072-4292/13/22/4677/pdf?version=1637335541","source":{"id":"https://openalex.org/S43295729","display_name":"Remote Sensing","issn_l":"2072-4292","issn":["2072-4292"],"is_oa":true,"is_in_doaj":true,"host_organization":"https://openalex.org/P4310310987","host_organization_name":"Multidisciplinary Digital Publishing Institute","host_organization_lineage":["https://openalex.org/P4310310987"],"host_organization_lineage_names":["Multidisciplinary Digital Publishing Institute"],"type":"journal"},"license":"cc-by","version":"publishedVersion","is_accepted":true,"is_published":true},"sustainable_development_goals":[{"id":"https://metadata.un.org/sdg/15","display_name":"Life in Land","score":0.67},{"id":"https://metadata.un.org/sdg/12","display_name":"Responsible consumption and production","score":0.21}],"grants":[],"referenced_works_count":54,"referenced_works":["https://openalex.org/W1145502669","https://openalex.org/W1964011242","https://openalex.org/W1973361498","https://openalex.org/W1977940988","https://openalex.org/W2009056258","https://openalex.org/W2030222098","https://openalex.org/W2067871368","https://openalex.org/W2076700149","https://openalex.org/W2085261163","https://openalex.org/W2088922279","https://openalex.org/W2089957759","https://openalex.org/W2091688953","https://openalex.org/W2094876857","https://openalex.org/W2113748593","https://openalex.org/W2136245122","https://openalex.org/W2146751368","https://openalex.org/W2175890440","https://openalex.org/W2280788228","https://openalex.org/W2345973107","https://openalex.org/W2395696537","https://openalex.org/W2466494297","https://openalex.org/W2541777388","https://openalex.org/W2563061754","https://openalex.org/W2601243251","https://openalex.org/W2611090267","https://openalex.org/W2744949162","https://openalex.org/W2747930430","https://openalex.org/W2754869336","https://openalex.org/W2755608923","https://openalex.org/W2760677139","https://openalex.org/W2791056138","https://openalex.org/W2799703355","https://openalex.org/W2805779451","https://openalex.org/W2811093923","https://openalex.org/W2826247891","https://openalex.org/W2884197231","https://openalex.org/W2901497416","https://openalex.org/W2920797839","https://openalex.org/W2941082889","https://openalex.org/W2954114306","https://openalex.org/W2977537634","https://openalex.org/W2989736827","https://openalex.org/W2991301410","https://openalex.org/W2993118362","https://openalex.org/W3003509779","https://openalex.org/W3010920006","https://openalex.org/W3021818817","https://openalex.org/W3027817129","https://openalex.org/W3032659302","https://openalex.org/W3084104778","https://openalex.org/W3087605142","https://openalex.org/W3088292472","https://openalex.org/W3100430072","https://openalex.org/W3148599316"],"related_works":["https://openalex.org/W2029380707","https://openalex.org/W2465382974","https://openalex.org/W2547528905","https://openalex.org/W1974511032","https://openalex.org/W1981780420","https://openalex.org/W2182707996","https://openalex.org/W45233828","https://openalex.org/W2964988449","https://openalex.org/W188202134","https://openalex.org/W2397952901"],"ngrams_url":"https://api.openalex.org/works/W3215497122/ngrams","abstract_inverted_index":{"Forest":[0,93],"mensuration":[1,199],"remains":[2,13],"critical":[3],"in":[4,40,200,228],"managing":[5],"our":[6],"forests":[7],"sustainably,":[8],"however,":[9,48],"capturing":[10],"such":[11,22],"measurements":[12,44,121,135],"costly,":[14],"time-consuming":[15,62],"and":[16,30,46,61,74,83,115,141,152,202,223],"provides":[17],"minimal":[18],"amounts":[19],"of":[20,100,108,122,131,147,167,176,187,225],"information":[21],"as":[23,181],"diameter":[24,120,134],"at":[25],"breast":[26],"height":[27],"(DBH),":[28],"location,":[29],"height.":[31],"Plot":[32],"scale":[33,190],"remote":[34,191],"sensing":[35,192],"techniques":[36,193],"show":[37],"great":[38],"promise":[39],"extracting":[41],"detailed":[42],"forest":[43,86,106,198,231],"rapidly":[45],"cheaply,":[47],"they":[49],"have":[50],"been":[51],"held":[52],"back":[53],"from":[54],"large-scale":[55],"implementation":[56],"due":[57],"to":[58,65,78,128,162,194,211,215,218],"the":[59,92,123,132,165,172,185,221],"complex":[60],"workflows":[63],"required":[64],"utilize":[66],"them.":[67],"This":[68],"work":[69,205],"is":[70,102,159,174,179],"focused":[71],"on":[72,206],"describing":[73],"evaluating":[75],"an":[76],"approach":[77],"create":[79],"a":[80],"robust,":[81],"sensor-agnostic":[82],"fully":[84,136],"automated":[85],"point":[87,113,168,232],"cloud":[88,169],"measurement":[89],"tool":[90,173,227],"called":[91],"Structural":[94],"Complexity":[95],"Tool":[96],"(FSCT).":[97],"The":[98],"performance":[99],"FSCT":[101,125,178],"evaluated":[103],"using":[104],"49":[105],"plots":[107],"terrestrial":[109],"laser":[110],"scanned":[111],"(TLS)":[112],"clouds":[114],"7022":[116],"destructively":[117],"sampled":[118],"manual":[119],"stems.":[124],"was":[126],"able":[127],"match":[129],"5141":[130],"reference":[133],"automatically":[137],"with":[138,184],"mean,":[139],"median":[140],"root":[142],"mean":[143],"squared":[144],"errors":[145],"(RMSE)":[146],"0.032":[148],"m,":[149,151],"0.02":[150],"0.103":[153],"m":[154],"respectively.":[155],"A":[156],"video":[157],"demonstration":[158],"also":[160],"provided":[161,180],"qualitatively":[163],"demonstrate":[164],"diversity":[166],"datasets":[170],"that":[171],"capable":[175],"measuring.":[177],"open":[182],"source,":[183],"goal":[186],"enabling":[188],"plot":[189],"replace":[195],"most":[196,229],"structural":[197],"research":[201],"industry.":[203],"Future":[204],"this":[207,216,226],"project":[208],"will":[209],"seek":[210],"make":[212],"incremental":[213],"improvements":[214],"methodology":[217],"further":[219],"improve":[220],"reliability":[222],"accuracy":[224],"high-resolution":[230],"clouds.":[233]},"cited_by_api_url":"https://api.openalex.org/works?filter=cites:W3215497122","counts_by_year":[{"year":2023,"cited_by_count":11},{"year":2022,"cited_by_count":6}],"updated_date":"2023-12-18T07:24:06.886757","created_date":"2021-12-06"}},"citation_counts":{"https://doi.org/10.3390/rs12101652":39,"https://doi.org/10.3390/rs13224677":17},"total_citations":56,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/629","html_url":"https://ost.ecosyste.ms/projects/629"}