Nothing
## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(
echo = TRUE,
warning = FALSE,
message = FALSE,
cache = FALSE,
comment = NA,
verbose = TRUE,
fig.width = 5,
fig.height = 5
)
original_options <- options()
options(digits = 3)
## -----------------------------------------------------------------------------
library(biopixR)
path2img <- system.file("images/beads.png", package = "biopixR")
beads <- importImage(path2img)
## ----beads--------------------------------------------------------------------
plot(beads)
## ----class--------------------------------------------------------------------
class(beads)
## ----objectDetection----------------------------------------------------------
res_objectDetection <-
objectDetection(beads, method = 'edge', alpha = 1, sigma = 0)
## ----visualization_1----------------------------------------------------------
plot(beads)
with(
res_objectDetection$centers,
points(
res_objectDetection$centers$mx,
res_objectDetection$centers$my,
col = factor(res_objectDetection$centers$value),
pch = 19
)
)
## ----visualization_2----------------------------------------------------------
changePixelColor(
beads,
res_objectDetection$coordinates,
color = factor(res_objectDetection$coordinates$value),
visualize = TRUE
)
## ----visualization_3----------------------------------------------------------
res_objectDetection$marked_objects |> plot()
## -----------------------------------------------------------------------------
res_threshold_object <- objectDetection(beads, method = 'threshold')
res_threshold_object$marked_objects |> plot()
## ----eval=FALSE---------------------------------------------------------------
# res_sizeFilter <- sizeFilter(
# centers = res_objectDetection$centers,
# coordinates = res_objectDetection$coordinates,
# lowerlimit = "auto",
# upperlimit = "auto"
# )
## ----echo=FALSE---------------------------------------------------------------
res_sizeFilter <- sizeFilter(
centers = res_objectDetection$centers,
coordinates = res_objectDetection$coordinates,
lowerlimit = 0,
upperlimit = Inf
)
plot(res_sizeFilter$centers$size, ylab = "size in px")
## -----------------------------------------------------------------------------
res_sizeFilter <- sizeFilter(
centers = res_objectDetection$centers,
coordinates = res_objectDetection$coordinates,
lowerlimit = 0,
upperlimit = 150
)
## -----------------------------------------------------------------------------
changePixelColor(
beads,
res_sizeFilter$coordinates,
color = "darkgreen",
visualize = TRUE
)
## -----------------------------------------------------------------------------
res_proximityFilter <-
proximityFilter(
centers = res_sizeFilter$centers,
coordinates = res_objectDetection$coordinates,
radius = "auto"
)
## -----------------------------------------------------------------------------
changePixelColor(
beads,
res_proximityFilter$coordinates,
color = "darkgreen",
visualize = TRUE
)
text(
res_proximityFilter$centers$mx,
res_proximityFilter$centers$my,
res_proximityFilter$centers$value,
col = "grey"
)
## -----------------------------------------------------------------------------
result <-
resultAnalytics(
img = beads,
coordinates = res_proximityFilter$coordinates,
unfiltered = res_objectDetection$coordinates
)
result$detailed
## -----------------------------------------------------------------------------
result$summary
## -----------------------------------------------------------------------------
result_proximityFilter <-
resultAnalytics(
img = beads,
coordinates = res_objectDetection$coordinates
)
result_proximityFilter$detailed
## -----------------------------------------------------------------------------
ind_sizeFilter <- sizeFilter(
centers = res_objectDetection$centers,
coordinates = res_objectDetection$coordinates,
lowerlimit = 50,
upperlimit = 150
)
changePixelColor(
beads,
ind_sizeFilter$coordinates,
color = "darkgreen",
visualize = TRUE
)
text(
ind_sizeFilter$centers$mx,
ind_sizeFilter$centers$my,
ind_sizeFilter$centers$value,
col = "grey"
)
## -----------------------------------------------------------------------------
result_sizeFilter <-
resultAnalytics(
img = beads,
coordinates = ind_sizeFilter$coordinates,
unfiltered = res_objectDetection$coordinates
)
result_sizeFilter$detailed
## -----------------------------------------------------------------------------
ind_proximityFilter <-
proximityFilter(
centers = res_objectDetection$centers,
coordinates = res_objectDetection$coordinates,
radius = "auto"
)
changePixelColor(
beads,
ind_proximityFilter$coordinates,
color = "darkgreen",
visualize = TRUE
)
text(
ind_proximityFilter$centers$mx,
ind_proximityFilter$centers$my,
ind_proximityFilter$centers$value,
col = "grey"
)
## -----------------------------------------------------------------------------
result_proximityFilter <-
resultAnalytics(
img = beads,
coordinates = ind_proximityFilter$coordinates,
unfiltered = res_objectDetection$coordinates
)
result_proximityFilter$detailed
## ----fig.show='hold', out.width="49%"-----------------------------------------
plot(droplets)
plot(droplet_beads)
## ----fig.show='hold', out.width="49%"-----------------------------------------
# preprocessing: threshold, negate and mirroring
thresh <- threshold(droplets, "13%")
thresh_cimg <- as.cimg(thresh)
thresh_magick <- cimg2magick(thresh_cimg)
neg_thresh <- image_negate(thresh_magick)
neg_thresh_cimg <- magick2cimg(neg_thresh)
neg_thresh_m <- mirror(neg_thresh_cimg, axis = "x")
# first remove microbeads from droplet image to prevent reconnecting with
# labeled regions that are not lines/edges
beads_to_del <- droplet_beads
bead_coords <-
objectDetection(beads_to_del, alpha = 1, sigma = 0.1)
# transform binary image to array to modify individual values
thresh_array <- as.array(neg_thresh_m)
for (i in seq_len(nrow(bead_coords$coordinates))) {
thresh_array[
bead_coords$coordinates[i, 1],
bead_coords$coordinates[i, 2], 1, 1
] <- 0
}
# removed microbeads from droplets and retransformation to cimg
thresh_clean_cimg <- as.cimg(thresh_array)
# displaying problem of discontinous edges
plot(thresh_cimg)
# displaying removed microbeads
plot(thresh_clean_cimg)
## ----fig.align='center'-------------------------------------------------------
# same orientation for 'cimg' and 'magick-image'
thresh_clean_m <- mirror(thresh_clean_cimg, axis = "x")
thresh_clean_magick <- cimg2magick(thresh_clean_m)
# getting coordinates of all line ends
mo1_lineends <- image_morphology(
thresh_clean_magick,
"HitAndMiss", "LineEnds"
)
# transform extracted coordinates into data frame
lineends_cimg <- magick2cimg(mo1_lineends)
end_points <- which(lineends_cimg == TRUE, arr.ind = TRUE)
end_points_df <- as.data.frame(end_points)
colnames(end_points_df) <- c("x", "y", "dim3", "dim4")
# highlighted line ends
vis_lineend <-
changePixelColor(thresh_clean_cimg,
end_points_df,
color = "green",
visualize = TRUE
)
## ----fig.show='hold', out.width="49%"-----------------------------------------
closed_gaps <- fillLineGaps(droplets,
droplet_beads,
threshold = "13%",
alpha = 1,
sigma = 0.1,
radius = 5,
iterations = 3,
visualize = TRUE
)
closed_gaps |> plot()
## ----fillLineGaps, fig.align='center'-----------------------------------------
first_img <- vis_lineend
second_img <- closed_gaps
first_m <- mirror(first_img, axis = "x")
second_m <- mirror(second_img, axis = "x")
first_magick <- cimg2magick(first_m)
second_magick <- cimg2magick(second_m)
img <- c(first_magick, second_magick)
image_animate(image_scale(img, "500x635"),
fps = 1,
dispose = "previous")
## ----echo=FALSE---------------------------------------------------------------
options(original_options)
## -----------------------------------------------------------------------------
sessionInfo()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.