combine.tr: Combines rigid tranformation matrices

combine.trR Documentation

Combines rigid tranformation matrices

Description

Combines rigid tranformation matrices in the following order: translation of points to origin (0, 0) -> reflection of points -> rotation by alpha degrees and translation of points to new center

Usage

combine.tr(center.cur, center.new, alpha, mirror.x = FALSE, mirror.y = FALSE)

Arguments

center.cur

(x, y) image pixel coordinates specifying the current center of the tissue (stored in slot "tools" as "centers")

center.new

(x, y) image pixel coordinates specifying the new center (image center)

alpha

Rotation angle

mirror.x

Logical: mirrors x or y axis if set to TRUE

mirror.y

Logical: mirrors x or y axis if set to TRUE

Examples

## Not run: 
library(imager)
library(tidyverse)
im <- load.image("https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Aster_Tataricus.JPG/1024px-Aster_Tataricus.JPG")
d <- sRGBtoLab(im) %>% as.data.frame(wide="c")%>%
  dplyr::select(-x,-y)

km <- kmeans(d, 2)

# Run a segmentation to extract flower
seg <- as.cimg(abs(km$cluster - 2), dim = c(dim(im)[1:2], 1, 1))
plot(seg); highlight(seg == 1)

# Detect edges
dx <- imgradient(seg, "x")
dy <- imgradient(seg, "y")
grad.mag <- sqrt(dx^2 + dy^2)
plot(grad.mag)

# Extract points at edges
edges.px <- which(grad.mag > max(grad.mag[, , 1, 1])/2, arr.ind = TRUE)
points(edges.px, col = "green", cex = 0.1)

# Apply transformations to point set
tr1 <- combine.tr(center.cur = apply(edges.px[, 1:2], 2, mean),
                  center.new = c(1200, 1200), alpha = 90)
tr2 <- combine.tr(center.cur = apply(edges.px[, 1:2], 2, mean),
                  center.new = c(500, 1200), mirror.x = T, alpha = 30)
tr3 <- combine.tr(center.cur = apply(edges.px[, 1:2], 2, mean),
                  center.new = c(1200, 500), mirror.y = T, alpha = 270)
plot(edges.px, xlim = c(0, 1700), ylim = c(0, 1700), cex = 0.1)
points(t(tr1%*%t(edges.px[, 1:3])), cex = 0.1, col = "red")
points(t(tr2%*%t(edges.px[, 1:3])), cex = 0.1, col = "yellow")
points(t(tr3%*%t(edges.px[, 1:3])), cex = 0.1, col = "blue")

## End(Not run)


jbergenstrahle/STUtility documentation built on March 14, 2023, 7:15 a.m.