सबसे पहले, के माध्यम से
from scipy.misc import imread
im = imread("thefile.png")
यह तीसरा आयाम रंग चैनल (RGB + अल्फ़ा) होने के साथ एक 3 डी numpy सरणी देता छवि पढ़ें। वक्र नीले चैनल में है, लेकिन ग्रिड भी है। लेकिन लाल चैनल में, आपके पास ग्रिड है और वक्र नहीं है। तो हम
a = im[:,:,2] - im[:,:,0]
अब, हम प्रत्येक कॉलम के साथ अधिकतम की स्थिति चाहते हैं। एक पिक्सेल परिशुद्धता के साथ, यह द्वारा
y0 = np.argmax(a, axis=0)
दिया जाता है इसी का परिणाम शून्य है जब वहाँ स्तंभ है, यानी फ्रेम के बाहर में कोई नीले वक्र है।
xmin, xmax = np.where(y0>0)[0][[0,-1]
द्वारा फ्रेम की सीमाएं प्राप्त कर सकते हैं, इसके साथ आप एक्स अक्ष को पुन: सहेजने में सक्षम हो सकते हैं।
फिर, आप सबपिक्सेल रिज़ॉल्यूशन चाहते हैं। हमें एक एकल स्तंभ
f=a[:,x]
पर ध्यान केंद्रित हम न्यूटन विधि की एक एकल पुनरावृत्ति का उपयोग एक एक्सट्रीमा की स्थिति
y1 = y0 - f'[y]/f''[y]
ध्यान दें कि हम विचारशील नमूने की वजह से आगे पुनरावृति नहीं कर सकते परिष्कृत करने के लिए करते हैं। फिर भी, हम डेरिवेटिव्स का अच्छा अनुमान चाहते हैं, इसलिए हम दोनों के लिए 5-पॉइंट योजना का उपयोग करेंगे।
coefprime = np.array([1,-8, 0, 8, -1], float)
coefsec = np.array([-1, 16, -30, 16, -1], float)
y1 = y0 - np.dot(f[y0-2:y0+3], coefprime)/np.dot(f[y0-2:y0+3], coefsec)
पीएस : Thorsten Kranz मुझसे अधिक तेज़ था (कम से कम यहां), लेकिन मेरे जवाब में उप-पिक्सेल परिशुद्धता है और नीली वक्र निकालने का मेरा तरीका शायद अधिक समझ में आता है।
दिलचस्प सवाल, मैं समाधान पर काम कर रहा हूं, लेकिन उप-पिक्सेल परिशुद्धता असंभव है। –
केवल अर्द्ध स्वचालित लेकिन अभी भी प्रश्न के लिए प्रासंगिक है, यह वेब ऐप चमत्कार कर सकता है: http://arohatgi.info/WebPlotDigitizer/ –