The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Thresholding Images

2023-12-12

Thresholding Images

Although this package is for thresholding anything at all, it has added functionality for thresholding images. This vignette is all about thresholding single-frame, grayscale images. There’s another vignette about thresholding stacks of grayscale images.

library(autothresholdr)

We’ll be using the image that comes with the package:

img <- ijtiff::read_tif(system.file("extdata", "fiji_eg.tif",
  package = "autothresholdr"
))
#> Reading fiji_eg.tif: an 8-bit, 130x130 pixel image of unsigned
#> integer type. Reading 1 channel and 1 frame . . .
#> Done.
dim(img)
#> [1] 130 130   1   1
ijtiff::display(img) # displays first channel, first frame

It’s a picture of cells, the black part is where the cells are not. The threshold is supposed to tell us what is dark (not cell) and what is bright (cell). By playing around, we may discover that something like 20 might (for some purposes) be a good value.

ijtiff::display(img[, , 1, 1] > 20)

But what if we have many images and we don’t want to play around, we want a method of calculating the threshold automatically. https://imagej.net/plugins/auto-threshold gives many such methods and they are provided to you in R via this package. Go to that webpage for a nice comparison of the methods.

The function auto_thresh() finds the threshold, mask() gets the mask (an array with a TRUE for elements exceeding the threshold and FALSE elsewhere) and apply_mask() applies the mask to the original image by setting the elements that don’t exceed the threshold to NA.

Let’s see each with “Triangle” thresholding.

auto_thresh(img, "tri")
#> [1] 19
#> attr(,"ignore_black")
#> [1] FALSE
#> attr(,"ignore_white")
#> [1] FALSE
#> attr(,"ignore_na")
#> [1] FALSE
#> attr(,"autothresh_method")
#> [1] "Triangle"
#> attr(,"class")
#> [1] "th"      "integer"
ijtiff::display(mask(img, "tri"))

ijtiff::display(apply_mask(img, "tri"))

In this last image, the NA pixels are grey.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.