#7 Raspberry Pi | Tutorial Pemrograman Dasar OpenCV — Part 4

Muhammad Yunus
6 min readMay 26, 2020

--

Image Blurring, Image Binarization, Edge Detection, Contour Detection, Shape Detection & Color Detection

Hai, semua, setelah sebelumnya kita membahas penggunaan OpenCV Drawing library disini,

Sekarang kita akan bahas lebih lanjut mengenai teknik dasar pemrosesan citra.Berikut adalah ouline bahasan kali ini :

  • Image Blurring,
  • Image Binarization,
  • Edge Detection,
  • Contour Detection,
  • Shape Detection,
  • Color Detection

Prerequisite

  • Menggunakan Raspberry Pi 3,
  • OS Raspbian (non Lite),
  • Terinstall OpenCV > 3.0.0,
  • Menggunakan moba-xterm untuk remote SSH Raspberry Pi, download disini,
  • Clone Tutorial Resource di github saya, disini,

Cara clone, pada terminal Raspberry Pi 3, jalankan,

$ sudo apt-get install git
$ git clone https://github.com/Muhammad-Yunus/Basic-OpenCV-Programming.git
  • Terinstall Jupyter Notebook pada Raspbery Pi, dapat diikuti disini,

Tutorial

Preparation

  • Remote SSH Raspberry Pi Mengunakan Moba Xterm,
  • Jalankan jupyter notebook pada Raspberry Pi menggunakan perintah berikut,
  • Buka pada browser laptop dengan URL,
http://<IP Raspberry>:8888/?token=<token id>
  • Buka folder Basic-OpenCV-Programming , lalu buka kembali file notebook yang digunakan pada tutorial sebelumnya (kalian bisa membuat file notebook baru jika diinginkan).

Image Blurring (Image Smoothing)

Image blurring yang akan digunakan menggunakan Gaussian Filter. Teknik ini bekerja dengan cara convolving (menelusuri) Gaussian kernel pada input array (image). Gaussian Filter dirumuskan sebagai berikut,

Dimana μ merupakan mean dan σ merupakan deviation dari tiap nilai pixel (x,y). Ilustrasinya sebagai berikut,

Implementasinya sebagai berikut,

Gunakan cv2.GaussianBlur() untuk membuat input image menjadi blur / smooth. Atur Gaussian kernel size bisa di set 3, 5, atau 7, umunya di set 5.

Result pada Jupyter Notebook,

Image Binarization

Image Binarization adalah proses membuat sebuah gambar menjadi hitam putih (image hanya memiliki nilai pixel 0 atau 255) dengan menerapkan batas threshold tertentu. Beberapa teknik yang dapat digunakan, diantaranya :

cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV

Beikut adalah ilustrasi hasil binarization ke 5 teknik diatas,

Beikut adalah implementasinya,

Pertama kita convert image kedalam grayscale mggunakan cv2.cvtcolor() , setelah itu dengan menggunakan method cv2.threshold() kita bisa mengubah grayscale image menjadi binary.

Result pada Jupyter Notebook,

Otsu’s Thresholding : Jika kita lihat teknik threshold diatas memerlukan user untuk set nilai threshold. Hal ini dapat merepotkan jika kita memiliki gambaryang tidak seragam itensitas warna nya, dll. Sehingga munculah metode yang dapat menentukan nilai optimal untuk threshol secara otomatis dan dinamakan Otsu’s Thresholding.

Berikut adalah ilustrasi bagaimana Otsu’s method bekerja untuk mencari nilai threshold yang optimal.

Berikut adalah implementasinya,

Edge Detection (Canny Edge Detection)

Canny Edge detection merupakan algoritma edge detection paling populer. Dapat digunakan untuk menjari batas-batas objek pada gambar. Canny Edge detection diilustrasikan sebagai berikut,

Implementasinya sebagai berikut,

Dengan menggunakan method cv2.Canny() , kita dapat mengekstrak batas batas objek pada gambar. Berikut result pada Jupyter Notebook,

Contour Detection

Contour merupakan garis yang menghubungkan titik disekeliling objek yang memiliki warna atau istensitas yang sama. Bermanfaat untuk analisis bentuk, object detection dan recognition.

Berikut implementasinya,

Dengan menggunakan cv2.findContours() , kita bisa dapatkan lis contour yang mengelilingi objek pada gambar, jika didalam gambar terdapat 3 buat objek yang mampu dibedakan secara warna ataupun instensitas, maka akan didapatkan 3 buah contour untuk masing-masing object. Setelah itu kita bisa buat bounding line pada object yang ditemukan contoutnya dengan menggunakan cv2.drawContours().

Sebelum menggunakan cv2.findContours() , sangat disarankan untuk meng-convert image ke Grayscale dan lakukan proses binaryzation agar object dapat dibedakan dengan jelas. Untuk object yang memiliki noise signifikan, dapat di-apply image bluring sebelum proses binarization.

Saat menggunakan cv2.findContours() kita dapat memilih opsi mode dan method lainya,

Opsi method yang dapat digunakan :

Opsi mode yang dapat digunakan :

Berikut adalah result pada Jupyter Notebook,

Shape Detection (Line & Circle Detection Using Hough Transform)

Hough Line Transform : Untuk mendeteksi garis pada gambar, Hough Line Transform merekam tiap perpotongan antara kurva pada setiap titik gambar. Jika banyaknya perpotongan melebihi threshold, maka akan digolongkan sebagai garis.

Beikut adalah implementasinya,

Result pada Jupyter Notebook,

Hough Circle Transform : Untuk mendeteksi lingkaran pada gambar digunakan accumulator matrix dan voting yang dapat menghitung intersection/perpotongan titik pada parameter space, seingga bisa ditentukan maximum voted circle yang mengindikasikan sebuah object adalah lingkataran atau bukan. Hough Circle mampu mendeteksi lingkaran tak sempurna sehingga cocok digunakan sebagai shape based feature extraction dalam image processing.

Berikut adalah implementasinya,

Result pada Jupyter Notebook,

Color Detection

Untuk mendeteksi warna dapat digunakan dengan cara meng-convert RGB value ke HSV, setelah itu kita tentukan batas-batas warna.

Berikut adalah implementasinya,

untuk mendeteksi warna pada gambar gunakan cv2.bitwise_and() dengan mask parameter adalah warna hasil filtering menggunakan cv2.inRange() untuk batas -batas warna yang kita tentukan.

Result pada Jupyter Notebook,

Color Detection from Video Stream : Kita bisa menggunakan color detection pada video stream webcam atau Raspberry Pi Camera. Berikut adalah implemntasinya,

Result pada Jupyter Notebook,

Nah, ditahap ini kita sudah mampu menggunakan teknik-teknik dasar pemrosesan citra menggunakan OpenCV.

Selanjutnya akan dibahas salah satu algoritma object detection yang dapat digunakan untuk mendeteksi wajah pada OpenCV.

--

--

Muhammad Yunus

IoT Engineer, Software Developer & Machine Learning Enthusiast