Сначала создается сетка пустых точек с точкой на пиксель.
x, y = N.meshgrid(N.arange(img.shape[1]), N.arange(img.shape[0]))
Фактические пиксели изображения помещаются в переменную pts
, которая понадобится позже.
pts = N.column_stack((x.ravel(), y.ravel()))
После этого он создает сетку с одной точкой на пиксель для увеличенного изображения; если исходное изображение было 200x400, для colscale установлено значение 4, а для rowscale установлено значение 2, то сетка будет иметь (200 * 4) x (400 * 2) или 800x800 точек.
xx, yy = N.mgrid[0.:float(img.shape[1]):1/float(colscale),
0.:float(img.shape[0]):1/float(rowscale)]
Используя scipy, точки в переменной pts
интерполируются в большую сетку. Интерполяция - это способ, которым недостающие точки заполняются или оцениваются обычно при переходе от меньшего набора точек к большему набору точек.
large = scipy.interpolate.griddata(pts, img.flatten(), (xx, yy), method).T
Я не уверен на 100%, что делают последние две строки, не возвращаясь и не смотря на то, что возвращает метод griddata. Кажется, он выбрасывает некоторые дополнительные данные, которые не нужны для изображения, или выполняет перевод.
large[-1,:] = large[-2,:]
large[:,-1] = large[:,-2]
return large