¿Cómo aplicar una 'curva' de ajuste a una image usando una r, g, b, una matriz?

Esto se utilizará en última instancia en el iPhone, pero es una pregunta general que puede responderse de una manera independiente del lenguaje.

¿Cómo aplicaría una curva de ajuste (como en Photoshop) a una image para saturación, contraste, etc.?

Después de revisar algunas librerías de c, java y actionscript, descubrí cómo implementar contraste, saturación, ajustes de brillo de forma lineal utilizando una matriz de 5×5:

1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 

Donde hago un ciclo sobre cada píxel y modifico el r, g, b, un valor de ese píxel basado en la matriz anterior, pero cómo traduciría una curva de bezier de 5 puntos de, digamos, una interfaz de curvas de Photoshop a r, g, b, a para contraste, saturación, etc. Parece que tal vez algo a lo largo de las líneas de:

 valueWithCGAffineTransform 

¿puede ser usado?

EDITAR: Tras una mayor reflexión, la idea es, dada una curva de bezier de 5 puntos en un eje 0-255, ¿cómo se puede calcular el valor X para cualquier valor Y dado en la ruta? A continuación, puede usar esta información para transformar r, g, b, los valores de una image.

Y la respuesta es:

Interpolación spline bicúbica

Resultó que no tenía nada que ver con las matrices, pero las curvas más bonitas estaban cerca.