
Pengarang: Dmitri Azarnyh
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Segmentasi Gambar Memutar iPhone Dengan Scikit-image
Perangkat modern penuh dengan berbagai sensor: kamera depan dan belakang, akselerometer, giroskop, magnetometer, GPS, dll. Penggunaan perangkat ini secara cerdas memungkinkan sejumlah besar aplikasi menarik seperti kompas, deteksi lokasi, dan permainan.
Foto oleh Nikita Vinogradov di Unsplash. Cobalah untuk mengelompokkan kucing ini dari latar belakang
Salah satu aplikasi tersebut adalah untuk mendeteksi orientasi iPhone di luar angkasa yang dapat dicapai dengan data dari akselerometer dan giroskop. Dalam posting blog sebelumnya, saya menulis tentang deteksi orientasi iPhone di sekitar satu sumbu dengan data dari dua sensor iPhone: giroskop dan akselerometer. Rekonstruksi orientasi iPhone dibandingkan dengan video. Hasil orientasi yang direkonstruksi dengan sensor adalah kecocokan kualitatif yang baik dengan orientasi yang digambarkan dalam video:
Gambar oleh penulis
Dalam posting blog ini, saya menyajikan cara mengekstrak sudut kemiringan iPhone dari video dengan segmentasi gambar. Kemudian, saya menunjukkan perbandingan kesalahan antara dua cara pengukuran. Biarkan saya memandu Anda.
Persiapan video
Sebelum memulai segmentasi, ada beberapa hal yang harus dipersiapkan. Video saya direkam dengan iPhone dan memiliki frame rate yang bervariasi. Untuk menyinkronkan jam video dengan jam sensor, kecepatan bingkai yang konstan lebih disukai. Jadi, langkah pertama adalah mentransfer video ke kecepatan bingkai konstan. Langkah selanjutnya adalah membagi video menjadi gambar di mana setiap frame sesuai dengan gambar jpeg. Seluruh dataset gambar dapat ditemukan di sini.
Pendekatan pembelajaran mendalam dengan Mask-R-CNN
Ketika kita berbicara tentang segmentasi gambar, itu adalah godaan besar untuk mencoba beberapa algoritma pembelajaran mendalam yang keren dan berharap itu akan berhasil. Mengikuti godaan ini, saya mencoba Mask-RCNN yang sudah dilatih sebelumnya. Untungnya, ponsel adalah salah satu kelas model asli yang dilatih. Hasil pertama cukup mengesankan, seperti terlihat pada gambar di bawah ini:
Gambar oleh penulis
Namun, dengan penyelidikan lebih dekat, tampaknya beberapa gambar iPhone salah diidentifikasi (lihat gambar di bawah):
Gambar oleh penulis
Seperti di banyak proyek ilmu data kehidupan nyata, hasil model pembelajaran mendalam ternyata sangat baik tetapi tidak sepenuhnya memberikan apa yang diharapkan. Setidaknya tidak untuk seluruh dataset. Salah satu pilihan untuk mengatasi tantangan ini adalah dengan memberi label data dan menyempurnakan model aslinya. Namun, mengingat fakta bahwa itu adalah iPhone merah dengan latar belakang yang hampir putih, seharusnya ada beberapa cara yang lebih mudah. Mari kita lihat mereka.
Pendekatan CV klasik dengan gambar RGB
Untuk mensegmentasi sebuah citra, pertama-tama kita coba menggunakan representasi RGB 3-channel dari sebuah citra yang pendek dari merah, hijau, dan biru. Merah akan sesuai dengan angka pertama yang sangat tinggi, sedangkan angka kedua dan ketiga diharapkan rendah, agak seperti (255,0,0). Dalam hal ini, kami hanya dapat memilih semua piksel merah dan berharap itu adalah iPhone. Untuk menangkap lebih banyak bayangan merah, saya mencoba memfilter semua piksel yang memiliki nilai warna untuk saluran pertama (merah) lebih besar dari 130. Untuk saluran kedua dan ketiga, saya memfilter piksel yang lebih rendah dari 60. Ini dia kode.
https://medium.com/media/a551e688f73eff9e4396f46a1c1e2eaf/href
Pendekatan semacam itu menghasilkan hasil yang cukup baik:
Gambar oleh penulis
Ada juga “lubang” kamera di iPhone, yang berwarna hitam dan karenanya tidak tersegmentasi. Kita dapat mengisi lubang ini dengan alat scikit-image:
https://medium.com/media/03839bb0955d37149e28db052f339678/href
Seseorang harus mengatur area lubang untuk diisi dan benda-benda kecil untuk disaring. Saya memilih 40000 sebagai area. Sekarang segmentasinya mencakup kamera iPhone:
Gambar oleh penulis
Sehingga segmentasi berdasarkan warna merah pada representasi RGB bekerja dengan baik pada satu citra. Namun, setelah menjalankan algoritme berbasis ambang ini melalui semua gambar, saya menemukan bahwa ada beberapa ketidakakuratan segmentasi:
Gambar oleh penulis
Ketidakakuratan ini dapat diperbaiki dengan memanipulasi ambang batas pada warna merah, hijau, dan biru. Namun, jika kita mengendurkan parameter, topeng mulai menangkap warna cokelat:
Gambar oleh penulis
Masih mungkin untuk bermain-main dengan ambang batas dalam RGB. Namun, setidaknya ada tiga parameter yang harus disetel (ambang batas merah, hijau, dan biru). Jauh lebih mudah untuk menguranginya menjadi hanya satu parameter yang dapat disetel. Untuk tujuan itu, kita dapat mempertimbangkan gambar iPhone dalam representasi warna yang berbeda.
Pendekatan CV klasik dengan gambar HED
Di perpustakaan scikit-image, beberapa transformasi tersedia dari RGB ke representasi warna yang berbeda. Salah satu tantangan yang saya alami dalam bekerja dengan gambar iPhone berputar adalah pemisahan dari merah tua dan coklat. Pemisahan warna ini ditangani dengan baik dalam ruang warna Haematoxylin-Eosin-DAB (HED), di mana Hematoxylin memiliki warna biru-ungu tua, Eosin berwarna merah muda, dan DAB berwarna coklat. IPhone merah terdeteksi cukup baik dengan saluran Eosin dari representasi warna seperti itu, yang memperbaiki masalah pencampurannya dengan cokelat, karena cokelat disajikan sebagai DAB. Dalam representasi HED, kami hanya memiliki satu ambang di saluran Eosin untuk disetel. Topeng untuk gambar yang menantang untuk RGB ditangkap dengan benar berdasarkan saluran Eosin dan ambang batas 0,05.
Gambar oleh penulis
Scikit-image juga menyediakan alat untuk mengukur properti dari wilayah tersegmentasi. Di antara properti lainnya, mungkin untuk mengukur orientasi iPhone:
https://medium.com/media/e988c7639c5c193a6ba5faa9aa407afa/href
Algoritma segmentasi penuh akan menghasilkan:
https://medium.com/media/2b0d1ce1a118d6ce330b219d1d965485/href
Perbandingan kualitatif akan menghasilkan:
Gambar oleh penulis
Perbandingan Kuantitatif
Sekarang dimungkinkan untuk membandingkan sudut kemiringan, yang berasal dari segmentasi, dengan yang berasal dari data sensor. Ini memberikan kecocokan yang bagus:
Gambar oleh penulis
Kesalahan mutlak antara sensor dan nilai interpolasi video adalah:
Gambar oleh penulis
Kita dapat melihat bahwa rotasi yang lebih cepat menghasilkan kesalahan yang lebih tinggi di antara kedua metode. Itu juga terlihat pada plot rata-rata bergulir dari kecepatan rotasi sebelumnya 0,5 detik versus kesalahan:
Gambar oleh penulis
PS: Saya ingin berterima kasih kepada istri saya Katya dan Vladyslav Rosov karena telah membantu posting ini.
Segmentasi gambar iPhone berputar dengan scikit-image awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI