Image Processing menggunakan python dan open cv part 1: cropping gambar berdasarkan canny edge detection

banyak diatara kita yang pernah mencoba melakukan extraksi text dengan menggunakan google vision, google vision api yang sangat powerful dan mengghasikan hasil extraksi text yang sangat baik, namun outpunya sangat berpengaruh terhadap gambar yang dinputkan, objeck yang sama dengam sudut pengambilan yang berbeda akan menghasilkan hasil extraksi yang berbeda, pada artikel ini saya akan membahas pengolahan image yang dapat diaplikasikan sebelum melakukan extraksi text pada google vision, dengan menggunakan python dan library opencv .


Gambar sebelum di lakukan peprosesan

dalam penulisan ini saya berasumsi kalian telah mengistal python dan opencv

edge detection adalah metode yang digunakan untuk mencari tepi object dari gambar, tepi object pada gambar akan mempunyai intensitas pixel yang berumah secara drastis, perubahan pixel secara drastis inilah yang dianggap sebagai tepi, penerapan edge detection banyak di gunakan dalam image procesing diantaranya untuk membaca tulisan, sidik Jari dan lain lain, salah satu algoritma edge detection yang paling popular adalah canny filter. dan kita akan menggunakan algoritma ini.

  1. lakukan resize terhadap input image, kita tidak pernah tau ukuran gambar yang akan dimasukan oleh user, dalam image procesing parameter dalam filter-filter yang digunakan dalam satuan filter, oleh karna itu kita harus memastikan ukuran dan kerapatan pixel dari gambar yang akan di proses sama sehingga memberikan hasil yang di harapkan.
image resize code

dalam opencv resize tidak selalu dari besar ke kecil namun bisa juga sebaliknya ini karna opencv menerapkan algortima interpolasi pada proses resizenya, untuk yang menasaran apa itu interpolasi pada image procesing bisa check link di bawah

http://tanbakuchi.com/posts/comparison-of-openv-interpolation-algorithms/

2. Lakukan Gaussian blur, noise dan edge memiliki sifat yang hampir sama keberadaan noise akan mengurangi keakuratan dari edge detection. hasil dari gausian blur akan sangan tergantung pada dimensi matrix pada, semangkin besar ukuran matrix akan semagkin blur gambar

gausian blur code

untuk kepentingan edge detection gambar akan kita buat menjadi hitam putih karna hitam putih hanya dibentuk 2 dimensi array sedangkan gambar berwarna di bentuk dengan 3 dimensi array.

gambar setelah di terapkan gausian blur

3. edge detection setelah melakukan gausian selanjutnya kita akan mencari tepi yang ada pada gambar kita, dan hasilnya kan di ubah menjadi contour

code untuk edge detection
gambar countur dari ende detection.

4. crop gambar, dengan menggunakan edge detection kita telah mendapatkan contour(bentuk) dari object yang akan kita crop, dari gambar diatas kita dapat melihat ada banyak contour yang kita dapat secara natural object utama yang di maksud dari suatu gambar adalah bagian dengan luas yang paling besar. oleh karna itu tahap pertama dari proses kita melakuka crop adalah mencari luas contour yang paling besar.

setelah itu melakukan perkiraan terhadap bentuk contour kita dengan menggunakan apprpxPolyDP https://docs.opencv.org/3.1.0/dd/d49/tutorial_py_contour_features.html

setelah itu kita akan mencari tinggi lebar dan posisi sudut dari contour kita, yang di hitung pada transform function. getperpective transform dan warpPerpective dalah function yang digunakan untuk melakukan crop, pts1 adalah posisi sudut object pada gambar skarang dan pts2 adalah posisi 4 sudut gambar nantinya.

transform function
hasil setelah croping

5. putar gambar 90 derajat

hasil akhir

code pada trial ini menggunakan chaining method class di bawah adalah runner code untuk menjalankan proses diatas.

untuk full codenya silahkan cek git dibawah