R/calculate_DSC.R

Defines functions calculate_DSC DSC

Documented in calculate_DSC

DSC <- function(x,y){
  x <- as.array(x)
  y <- as.array(y)
  tt <- sum( x &  y)
  tf <- sum( x & !y)
  ft <- sum(!x &  y)
  ff <- sum(!x & !y)
  tab = matrix(c(ff, tf, ft, tt), ncol=2)
  n = list(c("FALSE", "TRUE"), c("FALSE", "TRUE"))
  dimnames(tab) = n
  tab = as.table(tab)

  DSC = 2*tab[2,2] / (2*tab[2,2] + tab[1,2] + tab[2,1])
  return(DSC)
}
#' Dice Similarity Coefficient Calculation
#'
#' Calculate the Dice similarity coefficient (DSC) for two iterations of lung templates
#'
#' @param template0 Initial template mask. Right lung = 1, left lung = 2, non-lung = 0
#' @param template1 New template mask. Right lung = 1, left lung = 2, non-lung = 0
#' @param sides Calculate DSC on right and/or left lungs. Overall DSC is given by default.
#'
#' @return DSC on whole lung, right lung and left lung.
#' @export
calculate_DSC <- function(template0, template1, sides = c("right","left")){

  # Overall DSC
  x <- template0 > 0
  y <- template1 > 0
  DSC_overall <- DSC(x,y)


  if ("right" %in% sides){
    x <- template0 == 1
    y <- template1 == 1
    DSC_right <- DSC(x,y)
  }else{DSC_right = NULL}


  if ("left" %in% sides){
    x <- template0 == 2
    y <- template1 == 2
    DSC_left <- DSC(x,y)
  }else{DSC_left = NULL}

  return(list(DSC_overall = DSC_overall,
              DSC_right = DSC_right,
              DSC_left = DSC_left))
}
muschellij2/lungct documentation built on July 13, 2020, 2:17 p.m.