Gambar sampel yang Anda posting memiliki perspektif yang relatif kuat (tidak dicitrakan langsung dari arah permukaan normal) yang dapat menyebabkan masalah dengan teknik pencocokan templat menggunakan pemrosesan blok. Saya berasumsi bahwa Anda harus mengambil gambar dengan perspektif yang kuat sehingga hal pertama yang ingin kami lakukan adalah memperkirakan transformasi gambar yang akan menghapus proyeksi perspektif dan akan menghasilkan gambar yang diperbaiki ("gambar lurus").
Memperbaiki proyeksi perspektif saat bentuk diketahui
Tujuan akhir dari preprocessing adalah untuk menemukan sudut-sudut dari persegi panjang abu-abu yang merupakan latar belakang bagan warna. Saya mulai dengan hanya melakukan thresholding dengan nilai konstan. Sastra / web memiliki banyak informasi tentang cara melakukan thresholding ketika gambar memiliki pencahayaan yang tidak merata, tetapi jika Anda bisa, cobalah untuk memperbaiki pengaturan pencitraan sehingga pencahayaannya relatif merata.
Saya berasumsi bahwa bagan warna mengambil porsi layar yang cukup besar, sehingga ini mungkin merupakan wilayah kontinu terbesar dari gambar. Ada banyak fungsi pelabelan hitam dan putih (MATLAB bwlabel, IPP LabelMarkers, OpenCV memiliki cvblob perpustakaan eksternal) yang akan memberikan masing-masing wilayah terhubung indeks masing-masing. Setelah pelabelan, Anda dapat menghitung area komponen yang terhubung menggunakan histogram dan kemudian memilih komponen dengan area terbesar.
Biasanya ide yang baik untuk mengisi komponen sehingga komponen tidak memiliki lubang, ini mengurangi jumlah piksel tepi.
Sekarang kita dapat menggunakan operator pencarian tepi (saya menggunakan metode berbasis gradien, tetapi Anda juga dapat melacak tepi dengan mengikuti piksel putih yang terhubung ke piksel hitam) untuk mendapatkan piksel milik boarder.
Karena objek yang kami minati adalah persegi panjang, saya memasang empat garis ke tepi piksel menggunakan fitting garis kuat (RANSAC). Setelah menemukan garis baru, saya menghapus semua titik yang dekat dengan garis yang ditemukan, ini memaksa operasi pemasangan berikutnya untuk mengembalikan tepi objek lainnya. Akhirnya ketika semua tepi ditemukan, saya menghitung semua persimpangan yang mungkin antara himpunan garis. Dari himpunan poin yang dihasilkan saya menghapus semua poin di luar gambar.
Sekarang kita memiliki sudut-sudut bagan warna dan seperti yang kita ketahui dimensi dari bagan, kita dapat menghitung matriks transformasi (homografi, proyeksi antara dua pesawat. Gunakan transformasi linear langsung (DLT) untuk menyelesaikan ) antara koordinat milimeter dan koordinat piksel.HH
x=HX
Matriks transformasi ini kemudian dapat digunakan untuk mengubah gambar asli sedemikian rupa sehingga bagan warna dicitrakan langsung dari arah permukaan normal.
Seperti dapat dilihat hanya distorsi radial yang tersisa. Ketika kami menggunakan transformasi untuk transformasi gambar (interpolasi 2D), kami memilih koordinat interpolasi sedemikian rupa, sehingga kita tahu resolusi yang tepat dari gambar, yang berarti bahwa kita sekarang tahu misalnya ukuran huruf.H
Jika kami masih ingin melakukan beberapa pencocokan templat, kami dapat menggunakan metode pencocokan templat yang layak. Metode ini tidak harus rotasi / skala invarian karena gambar sudah diperbaiki.