Si ya tiene una curva determinada, How puede usar el código para restaurar cerca de los datos.
Establecer el número de datos conocidos y los valores máximo y mínimo de datos
Parece tener alguna función de inteligencia artificial.
¡Gracias Expertos!

Debo admitir que no entiendo lo suficiente sobre la pregunta como para comenzar a proponer una respuesta. Si la curva es una pintura de mapa de bits (archivo .png), entonces no puedo imaginar que JMP también sea el adecuado para intentar leerla. ¿Está buscando algún tipo de software de reconocimiento y escaneo óptico?
¿En qué formato está la curva? ¿Está tratando de leer la curva roja o está tratando de leer el texto numérico en la parte inferior de la imagen?
Tal vez al afirmar que JMP no puede hacerlo, estoy a punto de aprender alguna característica sobre JMP que no conozco.
Por cierto, debo mencionar que si no le importa promediar los píxeles (la línea en el gráfico aquí tiene varios píxeles de grosor en cada columna) y solo está buscando una aproximación, el procesamiento (en este ejemplo en particular) puede ser mucho más rápido y menos abarrotado de tablas de datos. Como verá, el gráfico que obtiene es básicamente el mismo.
</CODE></P>
<PRE><CODE class=" language-jsl">names default to here(1);
New Window( "Example",
pb = Picture Box( Open( "/Users/homer.simpson@jmp.com/Downloads/graphPic.png", png ) )
);
pixMat = (pb << get image) << get pixels;
pixMat = pixMat[20 :: 265, 15 :: N Col( pixMat )];
nc = N Col( pixMat );
x = (1 :: nc)`;
y = J( nc, 1, . );
For( i = 1, i <= nc, i++,
y[i] = Loc Min( pixMat[0, i] )
);
y = nrow( pixMat ) - y; //"flip" y-vals to account for screen coordinate convention.
dt = As Table( x || y, <<COLUMN names=""></COLUMN>
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-382962" slang="en-US">Re: ¿JSL puede restaurar el valor de la curva?</LINGO-SUB><LINGO-BODY id="lingo-body-382962" slang="en-US"><P>Esto no siempre es fácil, pero posiblemente se puede hacer, según el gráfico. Esta es una forma de hacer esto para el gráfico que proporcionó. Puede haber formas más eficientes, ya que no tengo experiencia en procesamiento de imágenes, disculpas.</P>
<P> </P>
<P>La idea es obtener los valores de píxeles de la imagen y centrarse en las diferencias entre el fondo y el gráfico. En este caso, el color del gráfico fue el mínimo en cualquier columna de píxeles. En otros casos, es posible que deba derivar algún tipo de filtro de paso de banda, etc. Para un fondo multicolor, incluso este enfoque podría no funcionar si el color del gráfico fuera el mismo que uno de los colores del fondo. De todos modos, pruebe esto.</P>
<P> </P>
<P>Este es un enfoque burdo, pero debería darle un punto de partida. Limpiar / suavizar los datos no es tan difícil de hacer después del hecho. Estoy seguro de que otros también encontrarán muchas formas de mejorar el enfoque y el rendimiento.</P>
<P> </P>
<P>NOTA: No cambié la escala de x e y. Nuevamente, eso no es difícil de hacer una vez que haya reducido la matriz a los datos del gráfico.</P>
<P> </P>
<P>He adjuntado el .png que usé para que pueda usar el mismo archivo que hice.</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="brady_brady_0-1620328935156.png" style="width: 999px;"><IMG src="https://us.v-cdn.net/6038925/uploads/images/32659i25847C5EFC991944/brady_brady_0-1620328935156.png" role="button" title="brady_brady_0-1620328935156.png" alt="brady_brady_0-1620328935156.png" /></SPAN></P>
<P> </P>
<P> </P>
<P> </P>
<P> </P>
<P>Salud,</P>
<P>Brady</P>
<PRE><CODE class=" language-jsl">
Names Default To Here( 1 );
//need to save image and put the file path in the open() function.
New Window( "Example", pb = Picture Box( Open( "/Users/brady.brady@jmp.com/Downloads/graphPic.png", png ) ) );
img = pb << get image;
pixMat = img << get pixels;
pixMat = 1000*(floor(pixMat/1000)); //smooths values; use whatever factor you like
dt = astable(pixmat);
eval(substitute (
expr(dt << new column("Row", formula( _ROW_ - :row()))), //low rows for pixels are high. This is a fix for that.
expr(_ROW_),
nrow(dt)
));
dt:row << Delete Formula;
dt << move selected columns({"Row"}, to first);
dt << select where (:row() <= 20 | :row() >= 265) << Delete Rows; // top and bottom few rows of this table are not useful
stackCols = (dt << get column names)[14::ncol(dt)];
dtStack = dt << Stack(
columns( stackCols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
"Non-stacked columns"n( Keep( :Row ) )
);
dtStack << select where (:data == col minimum(:data, :label)); //in this case, minimum color is the graph.
dtSub = dtStack << subset(selected rows(1), selected columns (0));
dtSub << new column("x", formula(num(substitute(:label, "Col", ""))));
summarize(dtSub, b = by(:label), yVals = mean(:Row), xVals = mean(:x));
astable(xvals || yvals, <<COLUMN names=""></COLUMN>