{"id":313549,"name":"CspStandSegmentation","description":"An R-package for the segmentation of single trees from forest point clouds scanned with terrestrial, mobile or unmanned LiDAR systems.","url":"https://github.com/julfrey/cspstandsegmentation","last_synced_at":"2026-04-12T12:30:15.756Z","repository":{"id":154808713,"uuid":"546133784","full_name":"JulFrey/CspStandSegmentation","owner":"JulFrey","description":"R package for single tree delination from TLS/MLS/ULS point clouds","archived":false,"fork":false,"pushed_at":"2026-04-02T13:02:55.000Z","size":24420,"stargazers_count":25,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-02T13:14:50.569Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"R","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/JulFrey.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.txt","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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-10-05T15:26:34.000Z","updated_at":"2026-04-02T13:02:59.000Z","dependencies_parsed_at":"2026-02-05T05:01:56.963Z","dependency_job_id":null,"html_url":"https://github.com/JulFrey/CspStandSegmentation","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/JulFrey/CspStandSegmentation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulFrey","download_url":"https://codeload.github.com/JulFrey/CspStandSegmentation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31342700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T06:57:30.245Z","status":"ssl_error","status_checked_at":"2026-04-03T06:57:29.849Z","response_time":107,"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":"JulFrey","name":null,"uuid":"45684330","kind":"user","description":null,"email":"","website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/45684330?v=4","repositories_count":1,"last_synced_at":"2023-04-25T12:49:42.088Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/JulFrey","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-04-25T12:49:42.093Z","updated_at":"2023-04-25T12:49:42.093Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulFrey","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulFrey/repositories"},"packages":[{"id":12426403,"name":"CspStandSegmentation","ecosystem":"cran","description":"Comparative Shortest Path Forest Stand Segmentation from LiDAR\nData","homepage":"https://github.com/JulFrey/CspStandSegmentation","licenses":"GPL-3","normalized_licenses":["GPL-3.0"],"repository_url":"https://github.com/JulFrey/CspStandSegmentation","keywords_array":[],"namespace":null,"versions_count":2,"first_release_published_at":"2025-10-28T00:00:00.000Z","latest_release_published_at":"2026-02-17T00:00:00.000Z","latest_release_number":"0.2.0","last_synced_at":"2026-04-09T11:03:07.139Z","created_at":"2025-10-28T12:48:38.713Z","updated_at":"2026-04-09T11:14:39.021Z","registry_url":"https://cran.r-project.org/package=CspStandSegmentation","install_command":null,"documentation_url":"http://cran.r-project.org/web/packages/CspStandSegmentation/CspStandSegmentation.pdf","metadata":{},"repo_metadata":{"id":154808713,"uuid":"546133784","full_name":"JulFrey/CspStandSegmentation","owner":"JulFrey","description":"R package for single tree delination from TLS/MLS/ULS point clouds","archived":false,"fork":false,"pushed_at":"2026-03-25T13:20:25.000Z","size":24398,"stargazers_count":25,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-26T12:37:31.989Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"R","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/JulFrey.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.txt","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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-10-05T15:26:34.000Z","updated_at":"2026-03-17T13:50:36.000Z","dependencies_parsed_at":"2026-02-05T05:01:56.963Z","dependency_job_id":null,"html_url":"https://github.com/JulFrey/CspStandSegmentation","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/JulFrey/CspStandSegmentation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulFrey","download_url":"https://codeload.github.com/JulFrey/CspStandSegmentation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31085283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-28T02:23:35.801Z","status":"ssl_error","status_checked_at":"2026-03-28T02:23:32.528Z","response_time":79,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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_record":{"login":"JulFrey","name":null,"uuid":"45684330","kind":"user","description":null,"email":"","website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/45684330?v=4","repositories_count":1,"last_synced_at":"2023-04-25T12:49:42.088Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/JulFrey","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-04-25T12:49:42.093Z","updated_at":"2023-04-25T12:49:42.093Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulFrey","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulFrey/repositories"},"tags":[{"name":"v1.2.0","sha":"3bb5d6e4f0ca3b47ae541ba21aee6d7126ed00f3","kind":"commit","published_at":"2025-10-08T10:23:56.000Z","download_url":"https://codeload.github.com/JulFrey/CspStandSegmentation/tar.gz/v1.2.0","html_url":"https://github.com/JulFrey/CspStandSegmentation/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/JulFrey/CspStandSegmentation@v1.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/tags/v1.2.0/manifests"},{"name":"v1.1.0","sha":"79a6ff46bd69ccbf5b03ef19de3211527cd344b7","kind":"commit","published_at":"2024-11-18T16:25:13.000Z","download_url":"https://codeload.github.com/JulFrey/CspStandSegmentation/tar.gz/v1.1.0","html_url":"https://github.com/JulFrey/CspStandSegmentation/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/JulFrey/CspStandSegmentation@v1.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulFrey%2FCspStandSegmentation/tags/v1.1.0/manifests"}]},"repo_metadata_updated_at":"2026-04-09T11:14:38.999Z","dependent_packages_count":0,"downloads":285,"downloads_period":"last-month","dependent_repos_count":0,"rankings":{"downloads":85.81760650921008,"dependent_repos_count":31.07319094436283,"dependent_packages_count":25.24579048480054,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":47.37886264612448},"purl":"pkg:cran/CspStandSegmentation","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/cran/CspStandSegmentation","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/cran/CspStandSegmentation","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/cran/CspStandSegmentation/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-03-01T16:01:24.014Z","issues_count":1,"pull_requests_count":2,"avg_time_to_close_issue":2191740.0,"avg_time_to_close_pull_request":27717.0,"issues_closed_count":1,"pull_requests_closed_count":2,"pull_request_authors_count":1,"issue_authors_count":1,"avg_comments_per_issue":4.0,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":2,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/julfrey%2Fcspstandsegmentation/issues","maintainers":[{"login":"zoeschindler","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/zoeschindler"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/CspStandSegmentation/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/CspStandSegmentation/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/CspStandSegmentation/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/CspStandSegmentation/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/CspStandSegmentation/codemeta","maintainers":[{"uuid":"julian.frey@wwd.uni-freiburg.de","login":null,"name":"Julian Frey","email":"julian.frey@wwd.uni-freiburg.de","url":null,"packages_count":2,"html_url":null,"role":null,"created_at":"2025-10-28T21:53:54.685Z","updated_at":"2025-10-28T21:53:54.685Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/maintainers/julian.frey@wwd.uni-freiburg.de/packages"}],"registry":{"name":"cran.r-project.org","url":"https://cran.r-project.org","ecosystem":"cran","default":true,"packages_count":27955,"maintainers_count":15505,"namespaces_count":0,"keywords_count":0,"github":"r-project-org","metadata":{"icon_url":"https://cran.r-project.org/CRANlogo.png","funded_packages_count":546},"icon_url":"https://cran.r-project.org/CRANlogo.png","created_at":"2022-04-06T16:32:25.637Z","updated_at":"2026-04-03T06:40:33.945Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/namespaces"}}],"commits":{"id":9492455,"full_name":"julfrey/cspstandsegmentation","default_branch":"main","total_commits":110,"total_committers":7,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":15.714285714285714,"dds":0.6545454545454545,"past_year_total_commits":52,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":13.0,"past_year_dds":0.28846153846153844,"last_synced_at":"2026-04-09T11:49:40.072Z","last_synced_commit":"f6ea98951fa22cbbf80755c69b8a653c365faa2c","created_at":"2025-04-04T00:03:55.839Z","updated_at":"2026-04-09T11:48:15.622Z","committers":[{"name":"JulFrey","email":"julian.frey@iww.uni-freiburg.de","login":null,"count":38},{"name":"JulFrey","email":"julian.frey@@posteo.de","login":null,"count":37},{"name":"Julian Frey","email":"45684330+JulFrey","login":"JulFrey","count":24},{"name":"Katja Kroener","email":"Katja.kroener@wwd.uni-freiburg.de","login":"karpaddel","count":4},{"name":"Zoe","email":"59600387+zoeschindler","login":"zoeschindler","count":3},{"name":"Katja","email":"153747277+katjakroener","login":"katjakroener","count":2},{"name":"unknown","email":"Julian@IWW20.iww.privat","login":null,"count":2}],"past_year_committers":[{"name":"JulFrey","email":"julian.frey@@posteo.de","login":null,"count":37},{"name":"Julian Frey","email":"45684330+JulFrey","login":"JulFrey","count":9},{"name":"Katja Kroener","email":"Katja.kroener@wwd.uni-freiburg.de","login":"karpaddel","count":4},{"name":"Katja","email":"153747277+katjakroener","login":"katjakroener","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/julfrey%2Fcspstandsegmentation/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:23.197Z","repositories_count":6212600,"commits_count":905136917,"contributors_count":34959196,"owners_count":1143602,"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":"julfrey/cspstandsegmentation","html_url":"https://github.com/julfrey/cspstandsegmentation","last_synced_at":"2026-04-02T02:14:59.330Z","status":"error","issues_count":1,"pull_requests_count":2,"avg_time_to_close_issue":2191740.0,"avg_time_to_close_pull_request":27717.0,"issues_closed_count":1,"pull_requests_closed_count":2,"pull_request_authors_count":1,"issue_authors_count":1,"avg_comments_per_issue":4.0,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":2,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2025-04-04T00:03:56.397Z","updated_at":"2026-04-02T02:14:59.331Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/julfrey%2Fcspstandsegmentation","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/julfrey%2Fcspstandsegmentation/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":1},"pull_request_author_associations_count":{"COLLABORATOR":2},"issue_authors":{"LY0025":1},"pull_request_authors":{"zoeschindler":2},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-02T00:00:07.988Z","repositories_count":14038189,"issues_count":34411693,"pull_requests_count":112536975,"authors_count":11216329,"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":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[{"login":"zoeschindler","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/zoeschindler"}],"active_maintainers":[]},"events":{"total":{"ReleaseEvent":2,"MemberEvent":1,"WatchEvent":9,"PushEvent":40,"CreateEvent":3},"last_year":{"ReleaseEvent":1,"MemberEvent":1,"WatchEvent":4,"PushEvent":26,"CreateEvent":2}},"keywords":[],"dependencies":[{"ecosystem":"cran","filepath":"DESCRIPTION","sha":null,"kind":"manifest","created_at":"2023-09-02T11:01:50.860Z","updated_at":"2023-09-02T11:01:50.860Z","repository_link":"https://github.com/JulFrey/CspStandSegmentation/blob/main/DESCRIPTION","dependencies":[{"id":13277023828,"package_name":"Rcpp","ecosystem":"cran","requirements":"\u003e= 1.0.5","direct":true,"kind":"imports","optional":false},{"id":13277023829,"package_name":"lidR","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023833,"package_name":"TreeLS","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023834,"package_name":"dbscan","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023835,"package_name":"igraph","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023836,"package_name":"foreach","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023837,"package_name":"parallel","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023838,"package_name":"doParallel","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023839,"package_name":"magrittr","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023840,"package_name":"data.table","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023841,"package_name":"sf","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false},{"id":13277023842,"package_name":"terra","ecosystem":"cran","requirements":"*","direct":true,"kind":"imports","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/r.yml","sha":null,"kind":"manifest","created_at":"2026-02-05T05:00:43.846Z","updated_at":"2026-02-05T05:00:43.846Z","repository_link":"https://github.com/JulFrey/CspStandSegmentation/blob/main/.github/workflows/r.yml","dependencies":[{"id":25811306348,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25811306349,"package_name":"r-lib/actions/setup-pandoc","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25811306392,"package_name":"r-lib/actions/setup-r","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25811306393,"package_name":"r-lib/actions/setup-r-dependencies","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25811306395,"package_name":"r-lib/actions/check-r-package","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25811306396,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]}],"score":10.820777784743367,"created_at":"2025-04-04T00:03:49.717Z","updated_at":"2026-04-12T12:30:15.757Z","avatar_url":"https://github.com/JulFrey.png","language":"R","category":"Biosphere","sub_category":"Forest Remote Sensing","monthly_downloads":285,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"## CspStandSegmentation is an R-package for the segmentation of single trees from forest point clouds scanned with terrestrial, mobile or unmanned LiDAR systems \u003cimg src=\"https://github.com/JulFrey/CspStandSegmentation/blob/main/inst/figures/csp_logo.png\" align=\"right\" width = 300/\u003e\n\nAuthors: Julian Frey and Zoe Schindler, University of Freiburg, Chair of Forest Growth and Dendroecology\n\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17294732.svg)](https://doi.org/10.5281/zenodo.17294732)  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![R-CMD-check](https://github.com/JulFrey/CspStandSegmentation/actions/workflows/r.yml/badge.svg)](https://github.com/JulFrey/CspStandSegmentation/actions/workflows/r.yml)\n\n\n\n\n## Installation\nWe are on CRAN 🎉🥳 you can install the packe in R the simple way:\n```R\ninstall.packages(\"CspStandSegmentation\")\n```\n\n### Latest version from GitHub:\nIf you are working on Windows operating systems, you will need to install Rtools prior to installation: https://cran.r-project.org/bin/windows/Rtools/\u003e. On Mac, Xcode is required. \n\n```R\ninstall.packages(c('devtools', 'Rcpp', 'lidR', 'dbscan', 'igraph', 'foreach', 'doParallel','magrittr', 'data.table'))\n\ndevtools::install_github('https://github.com/JulFrey/CspStandSegmentation')\n\n# Check if it is working\nlibrary(CspStandSegmentation)\nexample(\"csp_cost_segmentation\", run.dontrun = TRUE)\n\n```\n\n## Usage\nThe package is firmly based on the `lidR` package and uses the las file structure. Smaller point clouds can be directly segmented using the ```csp_cost_segmentation``` function. This requires a set of tree positions (map) as starting points, which can be derived using the ```find_base_coordinates_raster``` function, which might require parameter optimization. Theoretically, tree positions might also come from field measurements or manual assignments.:\n\n```R\n# read example data\nfile = system.file(\"extdata\", \"beech.las\", package=\"CspStandSegmentation\")\ntls = lidR::readTLSLAS(file)\n\n# find tree positions as starting points for segmentation\nmap \u003c- CspStandSegmentation::find_base_coordinates_raster(tls)\n\n# segment trees\nsegmented \u003c- tls |\u003e\n  CspStandSegmentation::add_geometry(n_cores = parallel::detectCores()/2) |\u003e\n  CspStandSegmentation::csp_cost_segmentation(map, 1, N_cores = parallel::detectCores()/2)\n\n# show results\nlidR::plot(segmented, color = \"TreeID\")\n\n# create inventory\ninventory \u003c- CspStandSegmentation::forest_inventory(segmented)\nhead(inventory)\nlidR::plot(segmented, color = \"TreeID\") |\u003e CspStandSegmentation::plot_inventory(inventory)\n```\n\nFor large areas, the package can be used within the lidR LAScatalogue engine to cope with memory limitations. The following example shows how this can be done. The single tiles of segmented trees are saved in a folder in this example and merged afterwards. \n\n```R\n# packages\nlibrary(lidR)\nlibrary(CspStandSegmentation)\n\n# parameters\nlas_file \u003c- \"your_file.laz\"\nbase_dir \u003c- \"~/your_project_folder/\" # with trailing /\ncores \u003c- parallel::detectCores()/2 # number od cpu cores \nres \u003c- 0.3 # voxel resolution for segmentation\nchunk_size \u003c- 50 # size of one tile in m excl. buffer\nchunk_buffer \u003c- 10 # buffer around tile in m\n\n# main\n\n# create dir for segmentation tiles\nif(!dir.exists(paste0(base_dir,\"segmentation_tiles/\"))) {\n  dir.create(paste0(base_dir,\"segmentation_tiles/\"))\n}\n\nuls = lidR::readTLSLAScatalog(paste0(base_dir,las_file), select = \"XYZ0\", chunk_size = chunk_size, chunk_buffer = chunk_buffer)\nplot(uls, chunk_pattern = TRUE)\n# plot(dtm,add = TRUE)\n# sf::as_Spatial(sf::st_as_sf(map, coords = c(\"X\", \"Y\"))) |\u003e plot(add = TRUE)\n\nopt_output_files(uls) \u003c- paste0(base_dir,\"segmentation_tiles/{ID}\")\nsegmented \u003c- catalog_apply(uls, function(cluster) {\n  \n  las \u003c- suppressWarnings(readLAS(cluster)) # read files\n  if (is.empty(las) ) return(NULL) # stop if empty\n  message(str(cluster))\n  # find tree positions as starting points for segmentation\n  map \u003c- CspStandSegmentation::find_base_coordinates_raster(las)\n  \n  # add the tile ID*100,000 to the TreeID to ensure unique IDs across all tiles\n  map$TreeID \u003c- map$TreeID + as.numeric(basename(cluster@save)) * 100000\n  \n  # only use seed positions within the tile+buffer and save the tile bbox to only return tree pos within the tile (excl. buffer)\n  inv \u003c- map\n  invb \u003c- map\n  # the bbox includes the buffer, the bbbox excludes the buffer \n  bbox \u003c- cluster@bbox\n  bbbox \u003c- cluster@bbbox\n  inv \u003c- inv[inv$X \u003c bbox[1,2] \u0026 inv$X \u003e bbox[1,1] \u0026 inv$Y \u003c bbox[2,2] \u0026 inv$Y \u003e bbox[2,1],]\n  invb \u003c- invb[invb$X \u003c bbbox[1,2] \u0026 invb$X \u003e bbbox[1,1] \u0026 invb$Y \u003c bbbox[2,2] \u0026 invb$Y \u003e bbbox[2,1],]\n  if (nrow(inv) == 0) return(NULL) # stop if no tree pos in tile found\n  if (is.empty(las) ) return(NULL) # stop if empty\n  \n  # Assign all points to trees\n  las \u003c- las |\u003e add_geometry(n_cores = cores) |\u003e csp_cost_segmentation(invb,res, N_cores = cores, V_w = 0.5)\n  # las \u003c- las |\u003e csp_cost_segmentation(map,res, N_cores = cores, V_w = 0.5) # this is a faster version which does not make use of the geometric feature weights\n  if (is.empty(las)) return(NULL)\n  \n  las \u003c- las |\u003e  filter_poi(TreeID %in% c(0,inv$TreeID)) # only return trees within the tile\n  if (is.empty(las)) return(NULL) # stop if empty\n  \n  # remove unneccesary attributes for further processing \n  las \u003c- las |\u003e remove_lasattribute('x_vox') |\u003e \n    remove_lasattribute('y_vox') |\u003e \n    remove_lasattribute('z_vox') |\u003e \n    remove_lasattribute('buffer') |\u003e\n    remove_lasattribute('Linearity') |\u003e\n    remove_lasattribute('Sphericity') |\u003e\n    remove_lasattribute('Verticality')\n  \n  # validate las\n  las \u003c- las  |\u003e  las_quantize()  |\u003e las_update()\n  if (is.empty(las)) return(NULL)\n  return(las)\n}, .options = list(automerge = TRUE))\n\n# merge segmented trees\nsegmented \u003c- readTLSLAScatalog(paste0(base_dir,\"segmentation_tiles/\"), select = \"xyz0\", chunk_buffer = 0)\nopt_merge(segmented) \u003c- TRUE\nopt_output_files(segmented) \u003c- paste0(\"\")\nsegmented \u003c- catalog_apply(segmented, function(cluster) {\n  las \u003c- suppressWarnings(readLAS(cluster)) # read files\n  if (is.empty(las) ) return(NULL) # stop if empty\n  return(las)\n}, .options = list(automerge = TRUE))\n\n# write results in a single file\nwriteLAS(segmented, paste0(base_dir,\"segmented.las\"))\n```\n\n## Citation\nIf you publish work related to CspStandSegmentation please cite the following article:\n\nLarysch E, Frey J, Schindler Z, Sprengel L, Hillenmeyer K, Kohnle U, Seifert T, Spiecker H (2025) Quantifying and mapping the ready-to-use veneer volume of European beech trees based on terrestrial laser scanning data. European Journal of Forest Research. https://doi.org/10.1007/s10342-025-01796-z\n\nBibTex:\n```\n@article{larysch_2025,\n\ttitle = {Quantifying and mapping the ready-to-use veneer volume of European beech trees based on terrestrial laser scanning data},\n\tissn = {1612-4669},\n\turl = {https://link.springer.com/epdf/10.1007/s10342-025-01796-z},\n\tdoi = {10.1007/s10342-025-01796-z},\n\tabstract = {Using 3D point clouds obtained with terrestrial laser scanning ({TLS}), we automatically and non-destructively quantified and mapped the estimated veneer wood volume of standing trees in differently structured beech stands. To mitigate climate change, we need to utilise wood for long-term carbon storage in products like construction wood and for substituting building materials based on fossil fuels. As the supply of wood from Norway spruce decreases, alternative species like beech must be considered for construction purposes. We present an approach to quantify and map the volume available for veneer production in beech forests. Our method is based on point clouds derived from {TLS}. We studied three forest plots, each with two different treatments (moderate vs. heavy thinning), resulting in varying stand basal areas ranging from 25 m2 to 36 m2 per hectare. We fitted different configurations of veneer rolls into point clouds of tree stems, choosing the configuration that yielded the highest volume of veneer wood. Our automatic optimisation algorithm ensured no misplaced veneer rolls. At the tree level, veneer wood volume was higher in intensely thinned stands. At the stand level, overall veneer volume was higher in moderately thinned stands, whereas the overall veneer share was higher in the heavily thinned stands. The veneer volume of a tree depended on diameter at breast height, crown base height, taper and curvature depth. Our approach detects all trees in a forest potentially ready for veneer production and shows the direct volumetric outcome under bark. This enables the planning of tree selection for harvest based on adaptable requirements for the veneer production.},\n\tjournaltitle = {European Journal of Forest Research},\n\tauthor = {Larysch, Elena and Frey, Julian and Schindler, Zoe and Sprengel, Lars and Hillenmeyer, Katharina and Kohnle, Ulrich and Seifert, Thomas and Spiecker, Heinrich},\n\turldate = {2025-06-25},\n\tdate = {2025},\n\tlangid = {english},\n\tfile = {Full Text PDF:O\\:\\\\Research\\\\Projects\\\\Confobi_IWW\\\\Literatur\\\\lit_database\\\\storage\\\\R7Q8BFU5\\\\Larysch et al. - 2025 - Quantifying and mapping the ready-to-use veneer volume of European beech trees based on terrestrial.pdf:application/pdf},\n}\n```\n\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.5281/zenodo.17294732","https://doi.org/10.1007/s10342-025-01796-z"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/313549","html_url":"https://ost.ecosyste.ms/projects/313549"}