1. Needed packages

# install.packages("BiocManager") 
# BiocManager::install("EBImage")
library(EBImage)
library(ggplot2)
library(gridExtra)
library(dplyr)

2. Read image

r <- readImage("C:\\Users\\user\\Desktop\\109_2\\Machine Learning\\Final project\\rice2.jpg")
# class(r), numbers in df is intensity
plot(r)

2. Enhance or reduce brightness

par(mfrow=c(1,2))
plot(r) ; plot(r+0.2)

2. Enhance or reduce brightness

par(mfrow=c(1,2))
hist(r) ; hist(r+0.2)

3. Color mode

colorMode(r)<- "Grayscale"
plot(r, all = T)

colorMode(r)<- "Color"

4. Detect edges

fhi = matrix(1, nrow = 3, ncol = 3)
fhi[3, 2] = -8
img_fhi = filter2(r, fhi)
plot(img_fhi)

5. Thresholding

nuc = readImage(system.file('images', 'nuclei.tif', package='EBImage'))
cel = readImage(system.file('images', 'cells.tif', package='EBImage'))
par(mfrow=c(1,2))
plot(nuc, all = T)
plot(cel, all = T)

cells = rgbImage(green=1.5*cel, blue=nuc)
par(mfrow=c(1,1))
plot(cells, all = TRUE)

nmask = thresh(nuc, w=10, h=10, offset=0.05)
nmask = opening(nmask, makeBrush(5, shape='disc'))
nmask = fillHull(nmask)
nmask = bwlabel(nmask)

ctmask = opening(cel>0.1, makeBrush(5, shape='disc'))
cmask = propagate(cel, seeds=nmask, mask=ctmask)
par(mfrow=c(1,2))
plot(nmask, all=TRUE) ; plot(ctmask, all=TRUE)

segmented = paintObjects(cmask, cells, col='#ff00ff')
segmented = paintObjects(nmask, segmented, col='#ffff00')
par(mfrow=c(1,1))
plot(segmented, all=TRUE)