Menghitung Porositas Pada Sayatan Tipis Batuan dengan Python

Yogi P
2 min readMar 30, 2020

Seri: Python dan Geosains

Hi semua, kali ini kita akan mencoba untuk bermain image processing pada python untuk menghitung porositas pada sayatan tipis batuan. Tanpa banyak menulis panjang mari kita lanjut saja ke prosesnya.

Importing Library

import numpy as np
import matplotlib.pyplot as plt
import cv2
%matplotlib inline
mineral = ‘/content/drive/My Drive/rawdata/quartz2.jpg

Pertama-tama kita import data dan library yang dibutuhkan untuk keperluan menghitung rasio gambar. Library yang terpenting pada proses ini adalah cv2 dikarenakan library ini merupakan library untuk image processing. Library seperti numpy dan matplotlib digunakan untuk keperluan menghitung dan menge-plot gambar.

Processing the data

Langkah berikutnya adalah memasukkan gambar menjadi sebuah variabel pada python. Setelah gambar menjadi sebuah variabel, kita harus menyederhanakan gambar menggunakan kombinasi gaussian blur dan otsu’s thresholding.

#untuk membaca gambar
img = cv2.imread(mineral,0)
#Otsu’s thresholding setelah Gaussian filteringblur = cv2.GaussianBlur(img,(5,5),0)ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

Otsu thresholding berfungsi untuk membagi biner sebuah gambar. Langkah berikutnya yaitu menge-plot gambar hasil olahan opencv.

plt.imshow(img)#MENGEPLOT GAMBAR
plt.figure(figsize=(15,5))
images = [blur, 0, th3]
titles = [‘Blur’,’Histogram’,”Otsu’s Thresholding”]
plt.subplot(1,3,1),plt.imshow(images[0],’gray’)
plt.title(titles[0]), plt.xticks([]), plt.yticks([])
plt.subplot(1,3,2),plt.hist(images[0].ravel(),256)
plt.title(titles[1]), plt.xticks([]), plt.yticks([])
plt.subplot(1,3,3),plt.imshow(images[2],’gray’)
plt.title(titles[2]), plt.xticks([]), plt.yticks([])
Sayatan Mineral Original
Hasil Plot Gambar Mineral

Dari sini kita dapat melihat, dengan melakukan thresholding, kita dapat memisahkan antara object dan latar suatu gambar, atau dengan kata lain bisa memisahkan mineral dengan porositas.

plt.imshow(th3)
Otsu Threshold

Hasil Otsu Thresholding berhasil memisahkan mineral menjadi warna putih dan porositas menjadi warna hitam. Hasil pemisahan inilah yang selanjutnya akan kita hitung rasionya untuk menghasilkan angka porositas dari sayatan batuan ini.

n_white_pix = np.sum(th3 == 255) #255 dan 0 adalah RGB code
n_black_pix = np.sum(th3 == 0)
porositas = n_black_pix/(n_white_pix+n_black_pix)
porositas

Hasil porositas pada sampel sayatan ini adalah 0.28283462374149326

Penutup

Demikianlah hasil tutorial singkat dalam menghitung porositas pada sayatan tipis batuan. Tentunya dengan memperdalam opencv kita bisa meng-scale up penggunaannya dalam membantu geologis mempercepat scaling-up hasil interpretasinya ke lebih banyak data. Akhir kata pastinya tulisan ini akan banyak kekurangannya, semoga bisa bermanfaat.

--

--

Yogi P

Random writer — Geology, Data, Tech, and Music