## ----------------------------------------------------------------------------- #| label: setup library(imagine) ## ----------------------------------------------------------------------------- #| eval: false # install.packages("imagine") ## ----------------------------------------------------------------------------- #| eval: false # # Build kernels # # Kernel 1: For bottom edge recognition # kernel1 <- matrix( # data = c(-1, -2, -1, # 0, 0, 0, # 1, 2, 1), # nrow = 3 # ) # # # Kernel 2: Diagonal weighting # kernel2 <- matrix( # data = c(-2, 0, 0, # 0, 1, 0, # 0, 0, 2), # nrow = 3 # ) # # # Apply filters # convolutionExample <- convolution2D(X = wbImage, kernel = kernel1) # convQuantileExample <- convolutionQuantile(X = wbImage, kernel = kernel2, probs = 0.1) ## ----------------------------------------------------------------------------- #| message: false #| label: fig-2d-quantile-conv #| fig-width: 5.33 #| fig-height: 8.5 #| fig-cap: "2D vs 2D quantile convolutions" #| fig-pos: "h" #| results: hide #| echo: false # Defining a copy of wbImage myMatrix <- wbImage # Defining color palette cols <- gray.colors(n = 1e3, start = 0, end = 1) # Build kernels # Kernel 1: For bottom edge recognition kernel1 <- matrix( data = c(-1, -2, -1, 0, 0, 0, 1, 2, 1), nrow = 3 ) # Kernel 2: Diagonal weighting kernel2 <- matrix( data = c(-2, 0, 0, 0, 1, 0, 0, 0, 2), nrow = 3 ) # Apply filters convolutionExample <- convolution2D(X = myMatrix, kernel = kernel1) convQuantileExample <- convolutionQuantile( X = myMatrix, kernel = kernel2, probs = 0.8 ) # Make plots par( mar = c(0, 0.5, 0, 0.5), oma = c(0, 0, 2, 0), mfrow = c(3, 1) ) image(wbImage, col = cols, axes = FALSE) mtext(text = "Original", side = 3, line = -1.5, font = 2, adj = 0.99) image(convolutionExample, col = cols, axes = FALSE) mtext( text = "2D convolution", side = 3, line = -1.5, col = "white", font = 2, adj = 0.99 ) image(convQuantileExample, col = cols, axes = FALSE) mtext( text = "2D quantile convolution", side = 3, line = -1.5, col = "black", font = 2, adj = 0.99 ) ## ----------------------------------------------------------------------------- #| eval: false # # Add some noise (NA) to the image (matrix) # set.seed(7) # naIndex <- sample( # x = seq(prod(dim(myMatrix))), # size = as.integer(0.4*prod(dim(myMatrix))), # replace = FALSE # ) # myMatrix[naIndex] <- NA # # # Build kernel # radius <- 3 # # # Apply filters # meanfilterExample <- meanFilter(X = myMatrix, radius = radius) # quantilefilterExample <- quantileFilter(X = myMatrix, radius = radius, probs = 0.1) # medianfilterExample <- medianFilter(X = myMatrix, radius = radius) ## ----------------------------------------------------------------------------- #| message: false #| label: fig-basic-filter-comparison #| fig-width: 7.5 #| fig-height: 5 #| fig-cap: "Basic filters comparison" #| fig-pos: "h" #| results: hide #| echo: false # Defining a copy of wbImage myMatrix <- wbImage # Defining color palette cols <- gray.colors(n = 1e3, start = 0, end = 1) # Add some noise (NA) to the image (matrix) set.seed(7) naIndex <- sample( x = seq(prod(dim(myMatrix))), size = as.integer(0.4*prod(dim(myMatrix))) ) myMatrix[naIndex] <- NA # Apply filters meanfilterExample <- meanFilter(X = myMatrix, radius = 3) medianfilterExample <- medianFilter(X = myMatrix, radius = 3) # Make plots par(mar = rep(0, 4), oma = rep(0.5, 4), mfrow = c(2, 2)) image(wbImage, col = cols, axes = FALSE) mtext(text = "Original", side = 3, line = -1.5, font = 2, adj = 0.99) image(myMatrix, col = cols, axes = FALSE) mtext( text = "Original with noise (NA)", side = 3, line = -1.5, font = 2, adj = 0.99 ) # meanfilterExample[meanfilterExample < 0] <- 0 image(meanfilterExample, col = cols, axes = FALSE) mtext( text = "Mean filter", side = 3, line = -1.5, font = 2, adj = 0.99 ) # medianfilterExample[medianfilterExample < 0] <- 0 image(medianfilterExample, col = cols, axes = FALSE) mtext( text = "2D median filter", side = 3, line = -1.5, font = 2, adj = 0.99 ) ## ----------------------------------------------------------------------------- #| eval: false # medianFilter(X = wbImage, radius = 5, times = 50) ## ----------------------------------------------------------------------------- #| message: false #| label: fig-recursive-filtering #| fig-width: 7.5 #| fig-height: 5 #| fig-cap: "Filters with several time settings" #| fig-pos: "h" #| results: hide #| echo: false times <- c(1, 5, 15) # Defining color palette cols <- gray.colors(n = 1e3, start = 0, end = 1) # Apply filters median_times1 <- medianFilter(X = wbImage, radius = 5, times = times[1]) median_times2 <- medianFilter(X = wbImage, radius = 5, times = times[2]) median_times3 <- medianFilter(X = wbImage, radius = 5, times = times[3]) # Make plots par(mar = rep(0, 4), oma = rep(0.5, 4), mfrow = c(2, 2)) image(wbImage, col = cols, axes = FALSE) mtext(text = "Original", side = 3, line = -1.5, font = 2, adj = 0.99) image(median_times1, col = cols, axes = FALSE) mtext(text = paste("2D median filter\ntimes =", times[1]), side = 3, line = -2.5, font = 2, adj = 0.99) image(median_times2, col = cols, axes = FALSE) mtext(text = paste("2D median filter\ntimes =", times[2]), side = 3, line = -2.5, font = 2, adj = 0.99) image(median_times3, col = cols, axes = FALSE) mtext(text = paste("2D median filter\ntimes =", times[3]), side = 3, line = -2.5, font = 2, adj = 0.99)