Kali ini kita akan menganalisa sebuah gambar dengan package EBImage di RStudio.
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
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")
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)
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)
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
Untuk melihat histogram dari gambar menggunakan hist(Image).
hist(Image)
Sekarang kita akan mengubah cahaya dan posisi dari gambar.
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)
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)
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)
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,])
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)
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'.
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
Untuk mengembalikan warna gambar seperti semula menggunakan colorMode(Image) <- Color.
Untuk menampilkan gambar menggunakan display(Image).
colorMode(Image) <- Color
display(Image)
Untuk melakukan smoothing/blurring menggunakan low-pass filter dan high-pass filter, dan median filter.
flow <- makeBrush(21, shape= 'disc', step=FALSE)^2
flow <- flow/sum(flow)
Image.flow <- filter2(Image, flow)
display(Image.flow)
fHigh <- matrix(1, nc= 3, nr= 3)
fHigh[2, 2] <- -8
Image.fHigh <- filter2(Image, fHigh)
display(Image.fHigh)
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)
Berikut adalah sumber referensi yang digunakan dalam pembuatan web ini:
1. https://thinkstudioo.blogspot.com/2018/03/analisis-image-menggunakan-ebimage-di-r.html
2. https://thinkstudioo.blogspot.com/2018/03/analisis-image-menggunakan-ebimage-di-r_6.html
Saya, Firyal Nabila Zalfa
Mahasiswi Teknik Informatika
UIN Maulana Malik Ibrahim Malang
Saya ucapkan terimakasih kepada dosen pengampu atas bimbingannya.
Prof. Dr. Suhartono, M.Kom