Diff of /R/segment_human.R [000000] .. [242173]

Switch to side-by-side view

--- a
+++ b/R/segment_human.R
@@ -0,0 +1,71 @@
+#' @title Segment Human from CT scans
+#' @description Segment Human from a non-contrast CT scan
+#'
+#' @param img nifti image
+#' @param adder amount to be added to the image to make non-zero
+#' @param lthresh lower threshold for the image
+#' @param verbose Print diagnostic messages
+#' @param smooth smooth the image using `Perona-Malik` smoother,
+#' see [extrantsr::oMath]
+#'
+#' @return List of smoothed image, body, adder
+#' @export
+segment_human = function(
+    img,
+    adder = 1025,
+    lthresh = -300,
+    verbose = TRUE,
+    smooth = TRUE
+) {
+
+  ##############################
+  # 1024 should be lower limit
+  ##############################
+  if (verbose) {
+    message("# Adding to Values, usually to make them positive")
+  }
+  # reg_img = as.array(reg_img)
+
+  reg_img = img + adder
+  if (verbose) {
+    message("# Setting voxel ranges, 0 to (3071 + adder)")
+  }
+  reg_img[reg_img < 0] = 0
+  reg_img[reg_img > 3071 + adder] = 3071 + adder
+  # reg_img = as.antsImage(reg_img, reference = img)
+
+  if (verbose) {
+    message("# Getting Humans: Smoothing Image")
+  }
+  if (smooth) {
+    ss = extrantsr::oMath(reg_img, "PeronaMalik", 10, 5)
+  } else {
+    ss = reg_img
+  }
+
+  if (verbose) {
+    message("# Getting Humans: Largest Component")
+  }
+  body = ss > (0 + adder)
+  body = extrantsr::oMath(img = body, operation = "GetLargestComponent")
+  inds = neurobase::getEmptyImageDimensions(body)
+  if (verbose) {
+    message("# Getting Humans: Dropping Zero Dimensions")
+  }
+  ss = neurobase::maskEmptyImageDimensions(
+    img = ss,
+    inds = inds,
+    mask.value = 0)
+
+  if (verbose) {
+    message("# Getting Humans: Making Coarse Body")
+  }
+  body = ss > (lthresh + adder)
+  body = extrantsr::oMath(img = body, operation = "GetLargestComponent")
+
+  L = list(
+    smoothed = ss,
+    body = body,
+    adder = adder)
+  return(L)
+}
\ No newline at end of file