Homogeneous And Heterogeneous Face Recognition: Enhancing, Encoding And Matching For Practical Applications