Una forma de llegar a su resultado deseado es adaptar el detector de bordes de Canny 2D como sigue (código en Mathematica):
En primer lugar, calcular la derivada espacial utilizando un filtro derivado de Gauss, estableciendo el valor de sigma con respecto a la escala de los bordes que quiere detectar Toma el valor absoluto del resultado.
d = [email protected][data, {{10, 5}}, 1];
Entonces, determinar un umbral automáticamente a agruparse los valores derivados anteriores en dos grupos (aquí utilizando el método de Otsu).
thrd = FindThreshold[d];
Luego, detecte los pasos de los valores derivados (transiciones hacia/desde la "banda muerta").
steps = [email protected]`StepDetect[d, thrd]["NonzeroPositions"];
En este punto usted tiene los extremos de los bordes:
ListLinePlot[data, Epilog -> {Red, PointSize[Large], Map[Point[{#, data[[#]]}] &, steps]}]

Opcionalmente - parece que es lo que desea - a mantener sólo los extremos más bajos de la bordes. Agrupar los puntos de datos en los extremos de los bordes funciona en este caso, pero no estoy seguro de cuán robusto es.
t = [email protected][[steps]];
steps2 = Select[steps, data[[#]] <= t &];
ListLinePlot[data, Epilog -> {Red, PointSize[Large], Map[Point[{#, data[[#]]}] &, steps2]}]

Gracias a todos por las respuestas. Por favor, si encuentras más ideas nuevas (1 detecciones de bordes dimensionales), comparte eso también aquí. –