如果已經有給定的曲線,如何使用代碼來還原接近數據。
設置已知數據的數量以及數據的最大值和最小值
它似乎具有一些人工智能功能。
謝謝專家!

我不得不承認,我對這個問題的理解不夠,無法開始提出答案。 如果曲線是位圖繪製(.png文件),那麼我無法想像JMP也適合嘗試讀取它。 您是否正在尋找某種光學掃描和識別軟件?
曲線的格式是什麼? 您是要閱讀紅色曲線還是要閱讀圖片底部的數字文本?
也許通過斷言JMP無法做到這一點,我將學習一些我不知道的有關JMP的功能。
順便說一句,我應該提到,如果您不關心平均像素(圖中的線在每一列中都是幾個像素粗),而只是在尋找一個近似值,則處理(在此特定示例中)可以更快,更輕鬆地處理數據表。 正如您將看到的,您得到的圖形基本相同。
</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能恢復曲線的值嗎?</LINGO-SUB><LINGO-BODY id="lingo-body-382962" slang="en-US"><P>這並不總是那麼容易,但可能可以完成,具體取決於圖表。 這是對您提供的圖表執行此操作的一種方法。 可能有更有效的方法,因為我沒有圖像處理的背景 - 抱歉。</P>
<P> </P>
<P>這個想法是獲取圖像的像素值,並關注背景和圖形之間的差異。 在這種情況下,圖形顏色在任何像素列中都是最小值。 在其他情況下,您可能需要派生某種帶通濾波器等。 對於多色背景,如果圖形的顏色與背景中的一種顏色相同,即使這種方法也可能不起作用。 無論如何,試試這個。</P>
<P> </P>
<P>這是一種粗略的方法,但應該為您提供一個起點。 事後清理/平滑數據並不難。 我相信其他人也會找到許多方法來改進方法和性能。</P>
<P> </P>
<P>注意:我沒有重新調整 x 和 y。 同樣,一旦您將矩陣分解為圖形數據,這並不難做到。</P>
<P> </P>
<P>我附上了我使用的 .png 文件,以便您可以使用我所做的相同文件。</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>乾杯,</P>
<P>布雷迪</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>