Kali ini kita akan menganalisa sebuah gambar dengan package EBImage di RStudio.

What is EBImage?

EBImage menyediakan fungsionalitas untuk pemrosesan dan analisis gambar. Dalam konteks pengujian seluler berbasis mikroskop (high-throughput). Hal ini memungkinkan otomatisasi tugas tersebut menggunakan bahasa pemrograman R dan memfasilitasi penggunaan alat lain di R untuk pemrosesan sinyal, pemodelan statistik, pembelajaran mesin, dan visualisasi dengan data gambar.

Untuk memulainya silahkan klik Analisis Gambar

Analisis Gambar

Sebelum kita mulai, pastikan dulu kita sudah menginstal package EBImage di RStudio kita. Untuk menginstalnya kalian bisa mengikuti kode dibawah ini.

if(!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
  BiocManager::install("EbImage")

Panggil package

Lalu kita memanggil library EBImage untuk memastikan bahwa package EBImage sudah terpasang di RStudio. Jika tidak menampilkan apa-apa/kosong itu menandakan bahwa package EBImage sudah siap/terpasang di RStudio kita.

library(EBImage)

Reading Image

Untuk mengimport gambar pastikan bahwa lokasi gambar yang ada pada device kita sesuai, dan ubah tanda  menjadi /.
Untuk membaca gambar menggunakan readImage() dan masukan lokasi gambar dan nama gambar. Dan jangan lupa memberi nama variabel/inisialisai baru untuk memanggil gambar tersebut, saya memberikan nama Image.
Untuk menampilkan gambar menggunakan display(Image).

Image <- readImage("C:/Users/ASUS/OneDrive/Pictures/apa.jpg")
display(Image)

Data image

Untuk melihat data dari gambar menggunakan print(Image). Pada code ini akan menampilkan sifat gambar, nilai-nilai piksel, dan informasi lainnya.

print(Image)
## Image 
##   colorMode    : Color 
##   storage.mode : double 
##   dim          : 720 980 3 
##   frames.total : 3 
##   frames.render: 1 
## 
## imageData(object)[1:5,1:6,1]
##           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
## [1,] 0.6000000 0.6235294 0.6274510 0.5921569 0.5490196 0.5568627
## [2,] 0.5529412 0.5803922 0.5803922 0.5450980 0.5019608 0.5137255
## [3,] 0.5411765 0.5647059 0.5686275 0.5294118 0.4901961 0.5019608
## [4,] 0.5803922 0.6000000 0.6000000 0.5647059 0.5254902 0.5411765
## [5,] 0.6039216 0.6274510 0.6235294 0.5843137 0.5490196 0.5647059

Ini adalah penjelasan dari gambar di atas.
- colormode => jenis warna gambar (warna/grayscle)
- storage.mode => jenis nilai dalam array
- dim => dimensi array (X, Y, Z)
- frames.total => jumalh saluran di setiap pixel
- frames.render => jumlah saluran yang diberikan

Histogram image

Untuk melihat histogram dari gambar menggunakan hist(Image).

hist(Image)

Editing image

Sekarang kita akan mengubah cahaya dan posisi dari gambar.

Brightness

Untuk memanipulasi kecerahan gambar menggunakan tanda + untuk menambah intensitas cahaya pada gambar dan tanda - untuk mengurangi intensitas cahaya pada gambar.
Untuk menampilkan 2 gambar menggunakan plot(Image1) dan plot (Image2).
Gambar sebelah kanan adalah gambar yang ditambahi intensitas cahayanya dan gambar sebelah kiri adalah gambar yang dikurangi intensitas cahayanya.

Image1 <- Image + 0.2
Image2 <- Image - 0.2
par(mfrow= c(1,2))
plot(Image1)
plot(Image2)

Adjusting contrast

Untuk memanipulasi gambar dengan kontars menggunakan tanda * untuk mengatur kontras pada gambar.
Untuk menampilkan 2 gambar menggunakan plot(Image3) dan plot (Image4).
Gambar sebelah kanan adalah gambar dengan kontras cahaya yang dikali 0.5 dan gambar sebelah kiri adalah gambar dengan kontar cahaya yang dikali 2.

Image3 <- Image * 0.5
Image4 <- Image * 2
par(mfrow= c(1,2))
plot(Image3)
plot(Image4)

Gamma correction

Koreksi gamma adalah nama dari operasi nonlinear yang digunakan untuk kode dan decode luminance atau tristimulus.
Untuk memanipulasi gambar dengan gamma menggunakan tanda ^ untuk mengatur gamma pada gambar.
Untuk menampilkan 2 gambar menggunakan plot(Image5) dan plot (Image6).
Gambar sebelah kanan adalah gambar dengan gamma sebesar 2 dan gambar sebelah kiri adalah gambar dengan gamma sebesar 0.7.

Image5 <- Image ^ 2
Image6 <- Image ^ 0.7
par(mfrow= c(1,2))
plot(Image5)
plot(Image6)

Cropping

Untuk memotong array dari pixel gambar menggunakan display(Image[ukuran seberapa besar yang dipotong/crop]). Disini saya dengan ukuran 80:900, 100:600.

display(Image[80:500, 100:300,])

Transformation image

Untuk merotate gambar menggunakan code yang sudah ada di EBImage Imagetr <- translate(rotate(Image, 45 (derajat gambar yang di putar)), c(50,0))

Imagetr <- translate(rotate(Image, 45), c(50,0))
display(Imagetr)

Color management

Karena array pixel memiliki tiga sumbu di dimensi, contohnya 1200 x 800 x 3. Sumbu ketiga adalah slot untuk tiga saluran: merah, hijau dan biru, atau RGB.
Disini kita akan mengubah warna color menjadi grayscale menggunakan colormode(Image) <- Grayscale.
Untuk menampilkan gambar menggunakan display(Image).
Gambar berubah warna menjadi abu-abu.

colorMode(Image) <- Grayscale
display(Image)
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.

Data image


Untuk melihat data dari gambar menggunakan print(Image). Pada code ini akan menampilkan sifat gambar, nilai-nilai piksel, dan informasi lainnya.

print(Image)
## Image 
##   colorMode    : Grayscale 
##   storage.mode : double 
##   dim          : 720 980 3 
##   frames.total : 3 
##   frames.render: 3 
## 
## imageData(object)[1:5,1:6,1]
##           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
## [1,] 0.6000000 0.6235294 0.6274510 0.5921569 0.5490196 0.5568627
## [2,] 0.5529412 0.5803922 0.5803922 0.5450980 0.5019608 0.5137255
## [3,] 0.5411765 0.5647059 0.5686275 0.5294118 0.4901961 0.5019608
## [4,] 0.5803922 0.6000000 0.6000000 0.5647059 0.5254902 0.5411765
## [5,] 0.6039216 0.6274510 0.6235294 0.5843137 0.5490196 0.5647059

Color

Untuk mengembalikan warna gambar seperti semula menggunakan colorMode(Image) <- Color.
Untuk menampilkan gambar menggunakan display(Image).

colorMode(Image) <- Color
display(Image)

Filtering

Untuk melakukan smoothing/blurring menggunakan low-pass filter dan high-pass filter, dan median filter.

Low-pass filter

flow <- makeBrush(21, shape= 'disc', step=FALSE)^2
flow <- flow/sum(flow)
Image.flow <- filter2(Image, flow)
display(Image.flow)

High-pass filter

fHigh <- matrix(1, nc= 3, nr= 3)
fHigh[2, 2] <- -8
Image.fHigh <- filter2(Image, fHigh)
display(Image.fHigh)

Median filter

Untuk menghilangkan noise pada gambar menggunakan medFLTR <- medianFilter(Image, 1.1).
Gambar sebelah kanan adalah gambar noise dan gambar sebelah kiri adalah hasil gambar yang sudah dihilangkan noisenya.

Image <- readImage("C:/Users/ASUS/OneDrive/Pictures/lena.jpg")
medFltr <- medianFilter(Image, 1.1)
par(mfrow= c(1,2))
plot(Image)
plot(medFltr)

Hasil gambar lebih jelasnya

display(medFltr)

Tentang penulis

Saya, Firyal Nabila Zalfa
Mahasiswi Teknik Informatika
UIN Maulana Malik Ibrahim Malang

Ucapan terimakasih

Saya ucapkan terimakasih kepada dosen pengampu atas bimbingannya.
Prof. Dr. Suhartono, M.Kom