Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id
Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link
kalian bisa lanjut baca lagi di http://softscients.com/2020/03/30/buku-pengolahan-citra-digital-dengan-python-dan-opencv-penerapan-watershed/
![]() |
https://www.researchgate.net/figure/Watershed-ridge-lines-and-catchment-basins_fig2_329901856 |
Sinopsis
Watershed biasa digunakan untuk memisahkan objek yang saling berhimpitan, biasanya bisa disiasati menggunakan teknik morfologi seperti erotion, dilation, close, open tapi terkadang teknik tersebut kurang efektif, sehingga perlu menggunakan teknik watershed. Berikut disajikan contoh gambar yang saling berhimpitan terdiri dari 2 objek yang saling berhimpitan
Sebagai informasi, bahwa tools yang digunakan menggunakan python, matplotlib, numpy dan opencv, jadi bila bagi pemula yang ingin belajar mengenai python silahkan beli buku saya di
http://www.softscients.web.id/2018/11/buku-belajar-mudah-python-dengan.html
Bisa beli disini
- https://www.bukalapak.com/p/hobi-koleksi/buku/komputer-487/wco01c-jual-belajar-mudah-python-dengan-package-open-source-mulkan-syarif-graha-ilmu
- https://www.tokopedia.com/bukukuliahan/belajar-mudah-python-dengan-package-open-source-mulkan-syarif
- https://togamas.com/detail-buku-8585=Belajar_Mudah_Python_dengan_Package_Open_Source_
- https://petramas.co.id/product/belajar-mudah-python-dengan-package-open-source-a8c4
- Python
- IDE Spyder sebagai Editor
- Package Numpy untuk perhitungan array
- Package Matplolib untuk visualisasi grafis
- Package Pandas untuk pengolahan data terstruktur
- Package Scipy untuk pengolahan data statistika
- Package OpenCV (instal tersendiri)
Langkah selanjutnya eucleid distance transform, untuk mendapatkan ‘puncak’
Kita ambil bagian titik tertinggi nya
ambil bagian titik rendah nya juga
Terapkan operasi labelling, terdapat 3 objek
Terapkan watershed, sehingga terpisah antara objek yang saling berhimpit
Contoh real dalam penerapan watershed yaitu segmentasi objek seperti berikuthttp://www.softscients.web.id/2019/02/python-watershed-segmentation.html
Berikut kode yang menggunakan numpy, opencv, dan matplotlib
# %% # Tahap cara kerja watershed
#' 14/06/2019 #'mulkan.ms@gmail.com
#'pustaka yang diperlukan
import cv2
import numpy as np
from matplotlib import pyplot as plt
from scipy import ndimage
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
cv_img = cv2.imread('2 objek.png',0)
sure_bg = cv_img.copy()
#'Kita mempunyai gambar berikut
#'terdiri dari 2 objek yang saling berhimpitan
plt.figure(),plt.imshow(sure_bg,cmap='gray'),plt.title('image original')
plt.show()
#'terapkan distanceTransform
dist_transform = cv2.distanceTransform(sure_bg,cv2.DIST_L2,5)
plt.figure(),plt.imshow(dist_transform,cmap='gray'),plt.title('Eucleid Distance Transform')
plt.show()
#'ambil bagian titik tertinggi
ret, titik_puncak = cv2.threshold(dist_transform,0.75*dist_transform.max(),255,0)
plt.figure(),plt.imshow(titik_puncak,cmap='gray'),plt.title('titik_puncak')
plt.show()
#'ambil bagian bagian luar nya
threshold = titik_puncak.copy()
titik_puncak = np.uint8(titik_puncak)
titik_rendah = cv2.subtract(sure_bg,titik_puncak)
plt.figure(),plt.imshow(titik_rendah,cmap='gray'),plt.title('titik_rendah')
plt.show()
#'terapkan labelling
ret, markers = cv2.connectedComponents(titik_puncak)
markers = markers+1
markers[titik_rendah==255] = 0
plt.figure(),plt.imshow(markers,cmap='Spectral'),plt.title('markers '+str(np.max(markers)))
#'input image watershed harus berupa RBG
#'maka diubah terlebih dahulu
backtorgb = cv2.cvtColor(cv_img,cv2.COLOR_GRAY2RGB)
#'terapkan watershed
markers = cv2.watershed(backtorgb,markers)
plt.figure()
plt.imshow(np.uint8(markers),cmap='gray'),plt.title('Batas Watershed')
plt.show()
No comments:
Post a Comment