MtreeRing

A tool for measuring tree-ring width

https://github.com/ropensci/mtreering

Science Score: 46.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: researchgate.net
  • Committers with academic emails
    1 of 6 committers (16.7%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.9%) to scientific vocabulary

Keywords

dendrochronology forest forestry r shiny-apps shinyapp tree-ring-width tree-rings

Keywords from Contributors

genome http-mock geocode air-pollution taxize agent-based-modeling individual-based-modelling netlogo biomart database-retrieval
Last synced: 6 months ago · JSON representation

Repository

A tool for measuring tree-ring width

Basic Info
Statistics
  • Stars: 34
  • Watchers: 4
  • Forks: 6
  • Open Issues: 9
  • Releases: 3
Topics
dendrochronology forest forestry r shiny-apps shinyapp tree-ring-width tree-rings
Created about 7 years ago · Last pushed over 1 year ago
Metadata Files
Readme Changelog Code of conduct Codemeta

README.md

MtreeRing

Authors: Jingning Shi, Wei Xiang
License: GPL3

TravisCI Build Status AppVeyor Build Status codecov ropensci cran checks Downloads

MtreeRing is a tool for automatically measuring tree-ring width using image processing techniques.

Installation

Install the stable version from CRAN

r install.packages("MtreeRing")

or the development version from GitHub

```r

install.packages("devtools")

devtools::install_github("ropensci/MtreeRing") ```

Ring-width measurement

1. Read an image

```r library(MtreeRing)

Read and plot a tree ring image

img.name <- system.file("001.png", package = "MtreeRing") t1 <- ring_read(img = img.name, dpi = 1200, plot = TRUE) ```

ring_read supports commonly used image formats, including png, tiff, jpg and bmp.

2. Detect ring borders

After plotting the image, the automatic detection of ring borders can be performed using three alternative methods: (1) watershed algorithm; (2) Canny edge detector; (3) a linear detection algorithm from R package measuRing.

```r

Split a long core sample into 2 pieces to

get better display performance and use the

watershed algorithm to detect ring borders:

t2 <- ring_detect(ring.data = t1, seg = 2, method = 'watershed') ```

Figure 1. The automatic detection of ring borders

3. Calculate ring-width series

If all ring borders are correctly identified, you can generate a ring-width series in data frame format. Use write.rwl to export the ring-width series to an rwl file.

r rw.df <- ring_calculate(ring.data = t2, seriesID = "940220") library(dplR) # A dendrochronological analysis package fn <- tempfile(fileext=".rwl") write.rwl(rwl.df = rw.df, fname = fn, format = "tucson")

Shiny application

If you are not familiar with R and its command line interface, the shiny-based app is a good alternative.

r MtreeRing::ring_app_launch()

This command allows to run a Shiny-based application within the system's default web browser. The app provides a beginner-friendly graphical interface and supports more flexible mouse-based interactions, allowing image files to be uploaded up to 150 MB in size.

The dashboard has three components: a header, sidebar and body, like this

A workflow for the Shiny app can be found at https://ropensci.github.io/MtreeRing/articles/app-MtreeRing.html. Most steps are demonstrated with a gif to make the workflow more understandable.

Ring width correction

If an increment borer is used to extract samples, it is well known that the auger sometimes fails to traverse the pith of the sampled tree but passes through one side of the pith at a certain distance. Tangent lines of rings close to the pith are therefore not perpendicular to the horizontal path, which may lead to considerable errors in ring widths.

Under such conditions, you can create two paths by setting the argument incline = TRUE, or by ticking the checkbox Inclined tree rings. See this example.

The line segment connecting two dots on the same ring should match the tangent of a tree ring border. The corrected ring width is estimated from the distance between adjacent rings and orientation of ring borders.

Support

Any feedback, bug reports or suggestions are welcomed. If you have a comment on MtreeRing, or you find a bug in the released or beta versions, please submit bugs and/or feature requests at https://github.com/ropensci/MtreeRing/issues. Include the package version, OS, and any command-line required to reproduce the problem.

Code of conduct

I will try to add new features based on user feedback. It is hoped that others will contribute additional useful features. Please note that the 'MtreeRing' project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

ropensci_footer

Owner

  • Name: rOpenSci
  • Login: ropensci
  • Kind: organization
  • Email: info@ropensci.org
  • Location: Berkeley, CA

CodeMeta (codemeta.json)

{
  "@context": [
    "https://doi.org/10.5063/schema/codemeta-2.0",
    "http://schema.org"
  ],
  "@type": "SoftwareSourceCode",
  "identifier": "MtreeRing",
  "description": "Use morphological image processing and edge detection algorithms to automatically measure tree ring widths on digital images. Users can also manually mark tree rings on species with complex anatomical structures. The arcs of inner-rings and angles of successive inclined ring boundaries are used to correct ring-width series. The package provides a Shiny-based application, allowing R beginners to easily analyze tree ring images and export ring-width series in standard file formats.",
  "name": "MtreeRing: A Shiny Application for Automatic Measurements of Tree-Ring Widths on Digital Images",
  "codeRepository": "https://github.com/ropensci/MtreeRing",
  "issueTracker": "https://github.com/ropensci/MtreeRing/issues",
  "license": "https://spdx.org/licenses/GPL-3.0",
  "version": "1.3",
  "programmingLanguage": {
    "@type": "ComputerLanguage",
    "name": "R",
    "version": "3.5.2",
    "url": "https://r-project.org"
  },
  "runtimePlatform": "R version 3.5.2 (2018-12-20)",
  "author": [
    {
      "@type": "Person",
      "givenName": "Jingning",
      "familyName": "Shi",
      "email": "snow940220@bjfu.edu.cn"
    },
    {
      "@type": "Person",
      "givenName": "Wei",
      "familyName": "Xiang"
    }
  ],
  "contributor": {},
  "copyrightHolder": {},
  "funder": {},
  "maintainer": [
    {
      "@type": "Person",
      "givenName": "Jingning",
      "familyName": "Shi",
      "email": "snow940220@bjfu.edu.cn"
    }
  ],
  "softwareSuggestions": [
    {
      "@type": "SoftwareApplication",
      "identifier": "testthat",
      "name": "testthat"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "knitr",
      "name": "knitr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "shinytest",
      "name": "shinytest"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "mockery",
      "name": "mockery"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "spelling",
      "name": "spelling"
    }
  ],
  "softwareRequirements": [
    {
      "@type": "SoftwareApplication",
      "identifier": "magrittr",
      "name": "magrittr",
      "version": ">= 1.5"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "png",
      "name": "png"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "jpeg",
      "name": "jpeg"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "tiff",
      "name": "tiff"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "bmp",
      "name": "bmp"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "magick",
      "name": "magick"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "imager",
      "name": "imager"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "dplR",
      "name": "dplR"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "spatstat",
      "name": "spatstat"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "measuRing",
      "name": "measuRing"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "shiny",
      "name": "shiny"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "dplyr",
      "name": "dplyr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "shinydashboard",
      "name": "shinydashboard"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "shinyWidgets",
      "name": "shinyWidgets"
    }
  ],
  "readme": "https://github.com/ropensci/MtreeRing/blob/master/README.md",
  "fileSize": "22396.559KB",
  "contIntegration": [
    "https://travis-ci.org/ropensci/MtreeRing.svg?branch=master",
    "https://ci.appveyor.com/project/JingningShi/mtreering/branch/master",
    "https://codecov.io/gh/ropensci/MtreeRing"
  ],
  "releaseNotes": "https://github.com/ropensci/MtreeRing/blob/master/NEWS.md"
}

GitHub Events

Total
  • Issues event: 1
  • Watch event: 4
Last Year
  • Issues event: 1
  • Watch event: 4

Committers

Last synced: over 1 year ago

All Time
  • Total Commits: 423
  • Total Committers: 6
  • Avg Commits per committer: 70.5
  • Development Distribution Score (DDS): 0.487
Past Year
  • Commits: 1
  • Committers: 1
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Jingning Shi 3****i 217
Jingning Shi 3****i 188
Jingning Shi s****0@b****n 13
Jeroen Ooms j****s@g****m 2
Maëlle Salmon m****n@y****e 2
rOpenSci Bot m****t@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 9
  • Total pull requests: 6
  • Average time to close issues: about 21 hours
  • Average time to close pull requests: 10 months
  • Total issue authors: 6
  • Total pull request authors: 4
  • Average comments per issue: 1.78
  • Average comments per pull request: 0.83
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • maelle (3)
  • lgsmith295 (2)
  • mariasimone308 (1)
  • condwanaland (1)
  • christopherbeatty (1)
  • stefaniebutland (1)
Pull Request Authors
  • maelle (3)
  • LaertesPecker (2)
  • JingningShi (1)
  • rorynolan (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • cran 157 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 7
  • Total maintainers: 1
cran.r-project.org: MtreeRing

A Shiny Application for Automatic Measurements of Tree-Ring Widths on Digital Images

  • Versions: 7
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 157 Last month
Rankings
Forks count: 10.1%
Stargazers count: 11.6%
Average: 25.2%
Dependent packages count: 29.8%
Dependent repos count: 35.5%
Downloads: 39.0%
Maintainers (1)
Last synced: 8 months ago

Dependencies

DESCRIPTION cran
  • bmp * imports
  • dplR * imports
  • dplyr * imports
  • imager * imports
  • jpeg * imports
  • magick * imports
  • magrittr >= 1.5 imports
  • measuRing * imports
  • png * imports
  • shiny * imports
  • shinyWidgets * imports
  • shinydashboard * imports
  • spatstat.geom * imports
  • tiff * imports
  • knitr * suggests
  • mockery * suggests
  • shinytest * suggests
  • spelling * suggests
  • testthat * suggests