SWIM: A Semi-Analytical Ocean Color Inversion Algorithm for Optically Shallow Waters