Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
86b5034
update quality control for alignment
Artur-man Jun 1, 2026
2701661
separate some functions to metrics.cpp
Artur-man Jun 3, 2026
ff4f895
small modifs to metrics
Artur-man Jun 18, 2026
07e6cad
Merge branch 'dev' into dev_align_stats
Artur-man Jul 7, 2026
9decb56
use intersection and bhattacharyya measures for accuracy
Artur-man Jul 7, 2026
5cfefa7
compilable matte mi code
Artur-man Jul 12, 2026
b9c2c34
implement matte map for shiny app
Artur-man Jul 12, 2026
38ff84a
implement Alignment stats interface
Artur-man Jul 13, 2026
48e5786
replace unordered_map with map
Artur-man Jul 15, 2026
03b851f
update manual alignment metrics
Artur-man Jul 15, 2026
09a3cc6
more updates
Artur-man Jul 15, 2026
194e272
clean source, and update no-image alignment
Artur-man Jul 16, 2026
0401d3e
change interface of some functions
Artur-man Jul 16, 2026
6243d35
Merge branch 'dev' into dev_align_stats
Artur-man Jul 17, 2026
4d7d18b
rmarkdown doc check
Artur-man Jul 17, 2026
d68a1e8
add optional header
Artur-man Jul 17, 2026
657662c
Merge branch 'dev' into dev_align_stats
Artur-man Jul 21, 2026
d462baa
initial accuracy for fine alignment imp.
Artur-man Jul 22, 2026
225c32d
checking non-rigid fine accuracy errors
Artur-man Jul 22, 2026
ac051cb
fix fine non-rigid bug in remasking points again
Artur-man Jul 22, 2026
01f1af9
Merge branch 'dev_align_stats' into dev_align_stats_fine
Artur-man Jul 22, 2026
559b61e
fix mask alignment bug
Artur-man Jul 22, 2026
e0c3739
additional fixes to fine/coarse alignment accuracy
Artur-man Jul 22, 2026
d829123
initial mapping of mask for sitk
Artur-man Jul 23, 2026
b70e84d
get accuracy for SimpleITK fine alignment
Artur-man Jul 23, 2026
1bbe463
optimization updates
Artur-man Jul 25, 2026
fc6eb49
fix aligner issue
Artur-man Jul 25, 2026
798b990
add seed to simpleitk alignment
Artur-man Jul 25, 2026
2abeb0a
update NEWS, remove surplus code
Artur-man Jul 25, 2026
78a0900
return degenerate info
Artur-man Jul 27, 2026
cbb56d4
dont let simpleitk used in non-rigid only mode
Artur-man Jul 27, 2026
ba43b09
update degenerate reporting
Artur-man Jul 27, 2026
cba7ad7
some corrections based on codex review
Artur-man Jul 27, 2026
e235705
drop float operations from matte mi calculation
Artur-man Jul 27, 2026
315af53
remove surplus declaration
Artur-man Jul 27, 2026
e9ff2ab
some performance updates
Artur-man Jul 28, 2026
191fb32
Merge branch 'dev' into dev_align_stats
Artur-man Aug 6, 2026
eba7b4c
some updates from claude review
Artur-man Aug 6, 2026
0b2142c
more updates from claude
Artur-man Aug 6, 2026
6d7f2b6
some checks
Artur-man Aug 6, 2026
9807471
testing
Artur-man Aug 7, 2026
bdc875a
testing
Artur-man Aug 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# VoltRon 0.2.7

- `transferData` now allows integrating single cell data object (`Seurat` or `SingleCellExperiment`)
for transfering features (e.g. gene expression) or metadata features (e.g. cell types, annotations).
- `registerSpatialData` now allows registering assays with no images. In case of either one of the assays,
do not have images, assays can be registered with only the manual approach.
- The Shiny interface for `registerSpatialData` now reports on the accuracy of the alignment using multiple
metrics such as Intersection, Bhattacharyya and Matte's Mutual Information.
- An image-free alignment tutorial has been added where DBIT-Seq and a QuPath processed mIF experiment are
aligned using manually selected landmarks.
- `transferData` now allows integrating single cell data object (`Seurat` or `SingleCellExperiment`)
for transfering features (e.g. gene expression) or metadata features (e.g. cell types, annotations).
- Now `importImageData` and `importQuPathIF` functions only work with segments already converted to a
list by the user, or the `generateSegments` function whose arguement is an **sf** object.
list by the user, or the `generateSegments` function whose argument is an **sf** object.
- The `formAssay` function now accepts only segments without the user manually generating coordinates
(or centroids).
- The `name` argument in functions like `vrImages`, `vrCoordinates` and `vrSegments` is replaced
Expand Down
16 changes: 12 additions & 4 deletions R/RcppExports.R
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
# Generated by using Rcpp::compileAttributes() -> do not edit by hand
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

automated_registeration_rawvector <- function(ref_image, query_image, width1, height1, width2, height2, GOOD_MATCH_PERCENT, MAX_FEATURES, invert_query, invert_ref, flipflop_query, flipflop_ref, rotate_query, rotate_ref, matcher, method, nonrigid) {
.Call('_VoltRon_automated_registeration_rawvector', PACKAGE = 'VoltRon', ref_image, query_image, width1, height1, width2, height2, GOOD_MATCH_PERCENT, MAX_FEATURES, invert_query, invert_ref, flipflop_query, flipflop_ref, rotate_query, rotate_ref, matcher, method, nonrigid)
accuracy_rawvector <- function(ref_image, query_image, mask, width, height, type, overlay_images = TRUE, compute_matte_map = TRUE) {
.Call('_VoltRon_accuracy_rawvector', PACKAGE = 'VoltRon', ref_image, query_image, mask, width, height, type, overlay_images, compute_matte_map)
}

automated_registeration_rawvector <- function(ref_image, query_image, width1, height1, width2, height2, GOOD_MATCH_PERCENT, MAX_FEATURES, invert_query, invert_ref, flipflop_query, flipflop_ref, rotate_query, rotate_ref, matcher, method, nonrigid, compute_matte_map = TRUE) {
.Call('_VoltRon_automated_registeration_rawvector', PACKAGE = 'VoltRon', ref_image, query_image, width1, height1, width2, height2, GOOD_MATCH_PERCENT, MAX_FEATURES, invert_query, invert_ref, flipflop_query, flipflop_ref, rotate_query, rotate_ref, matcher, method, nonrigid, compute_matte_map)
}

replaceNaMatrix <- function(mat, replace) {
Expand All @@ -21,8 +25,8 @@ warpImageManual <- function(ref_image, query_image, mapping, width1, height1, wi
.Call('_VoltRon_warpImageManual', PACKAGE = 'VoltRon', ref_image, query_image, mapping, width1, height1, width2, height2)
}

manual_registeration_rawvector <- function(ref_image, query_image, reference_landmark, query_landmark, width1, height1, width2, height2, method, nonrigid) {
.Call('_VoltRon_manual_registeration_rawvector', PACKAGE = 'VoltRon', ref_image, query_image, reference_landmark, query_landmark, width1, height1, width2, height2, method, nonrigid)
manual_registeration_rawvector <- function(ref_image, query_image, reference_landmark, query_landmark, width1, height1, width2, height2, invert_query, invert_ref, method, nonrigid, compute_matte_map = TRUE) {
.Call('_VoltRon_manual_registeration_rawvector', PACKAGE = 'VoltRon', ref_image, query_image, reference_landmark, query_landmark, width1, height1, width2, height2, invert_query, invert_ref, method, nonrigid, compute_matte_map)
}

manual_registeration_matrix <- function(query_data, reference_landmark, query_landmark, method, nonrigid) {
Expand All @@ -33,6 +37,10 @@ applyRcppMapping <- function(coords, mapping) {
.Call('_VoltRon_applyRcppMapping', PACKAGE = 'VoltRon', coords, mapping)
}

generateOverlapMask <- function(dsize, trans_mat, ssize) {
.Call('_VoltRon_generateOverlapMask', PACKAGE = 'VoltRon', dsize, trans_mat, ssize)
}

build_snn_rank <- function(neighbors) {
.Call('_VoltRon_build_snn_rank', PACKAGE = 'VoltRon', neighbors)
}
Expand Down
55 changes: 37 additions & 18 deletions R/auxiliary.R
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,43 @@ fixVoltRon <- function(object) {
object
}

####
# Bioformats extensions for image pyramids ####
####

.PYRAMID_FORMATS <- c(
".ome.tiff", # OME-TIFF pyramidal TIFF variants (OME-TIFF and related)
".ome.tif",
".ome.tf2",
".ome.tf8",
".ome.btf",
".svs", # Aperio SVS
".afi", # Aperio AFI
".ndpi", # Hamamatsu NDPI
".ndpis", # Hamamatsu NDPI variants
".qptiff" # CODEX ?
)

####
# Alignment Metrics ####
####

.ALIGNMENT_ACCURACY_METRICS <- c(
"Intersection",
"Bhattacharyya",
"Matte's MI"
)

.ALIGNMENT_KEYPOINT_METRICS <- c(
"#Keypoints",
"Inlier Perc.",
"sd ref. kpts (>1?)",
"sd query kpts (>1?)",
"sd grid (in [w,h]?)",
"Median distance",
"Degenerate"
)

####
# Matrix Operations ####
####
Expand Down Expand Up @@ -326,24 +363,6 @@ getBasilisk <- function() {
py_env
}

####
# Bioformats extensions for pyramids ####
####

.PYRAMID_FORMATS <- c(
".ome.tiff", # OME-TIFF pyramidal TIFF variants (OME-TIFF and related)
".ome.tif",
".ome.tf2",
".ome.tf8",
".ome.btf",
".svs", # Aperio SVS
".afi", # Aperio AFI
".ndpi", # Hamamatsu NDPI
".ndpis", # Hamamatsu NDPI variants
".qptiff" # CODEX ?
)


####
# Other Auxiliary tools ####
####
Expand Down
Loading
Loading