में कई पिक्सेल स्थानों के रैखिक इंटरपोलेशन को तेज करना मैंने अपने कार्यक्रमों में से एक में मुख्य बाधा को दोहराने की कोशिश की है।NumPy
मैं कई गैर-पूर्णांक पिक्सेल मानों के साथ-साथ linearly (or rather bilinearly) interpolated मान प्राप्त करना चाहता हूं। यह है कि प्रत्येक पिक्सेल समन्वय उसी तरह से परेशान है। नीचे टिप्पणियों के साथ एक पूर्ण/न्यूनतम लिपि है जो समस्या का प्रदर्शन करती है। मैं result
की गणना कैसे बढ़ा सकता हूं?
import numpy as np
import time
im = np.random.rand(640,480,3) # my "image"
xx, yy = np.meshgrid(np.arange(im.shape[1]), np.arange(im.shape[0]))
print "Check these are the right indices:",np.sum(im - im[yy,xx,:])
# perturb the indices slightly
# I want to calculate the interpolated
# values of "im" at these locations
xx = xx + np.random.normal(size=im.shape[:2])
yy = yy + np.random.normal(size=im.shape[:2])
# integer value/pixel locations
x_0 = np.int_(np.modf(xx)[1])
y_0 = np.int_(np.modf(yy)[1])
x_1, y_1 = x_0 + 1, y_0 + 1
# the real-valued offsets/coefficients pixels
a = np.modf(xx)[0][:,:,np.newaxis]
b = np.modf(yy)[0][:,:,np.newaxis]
# make sure we don't go out of bounds at edge pixels
np.clip(x_0,0,im.shape[1]-1,out=x_0)
np.clip(x_1,0,im.shape[1]-1,out=x_1)
np.clip(y_0,0,im.shape[0]-1,out=y_0)
np.clip(y_1,0,im.shape[0]-1,out=y_1)
# now perform linear interpolation: THIS IS THE BOTTLENECK!
tic = time.time()
result = ((1-a) * (1-b) * im[y_0, x_0, :] +
a * (1-b) * im[y_1, x_0, :] +
(1-a) * b * im[y_0, x_1, :] +
a * b * im[y_1, x_1, :])
toc = time.time()
print "interpolation time:",toc-tic
किसी भी कारण तुम क्यों 'अनदेखा कर रहे हैं scipy.ndimage.map_coordinates' यह सबसे तेजी से संस्करण है? (उदा। Scipy.ndimage पर निर्भरता से बचने के लिए चाहते हैं?) यदि नहीं, तो यह वह कार्य है जिसे आप चाहते हैं। –
@ जोकिंगटन मुझे इस बारे में पता नहीं था - मुझे देखने दो कि क्या मैं इस फ़ंक्शन का उपयोग कर सकता हूं और यदि यह तेज़ है। धन्यवाद। – YXD