I am still exploring the solution. will keep this post updated with new experiment results and algorithms or methods later.
Anyway, here is my initial idea: