Итак, я беру изображение и превращаю его в трехмерный массив:
import conversion
from matplotlib import pyplot as plt
import xarray as xr
import numpy as np
import os
def normalize(arr, out_range=(-1, 1)):
domain = np.min(arr), np.max(arr)
y = (arr - (domain[1] + domain[0]) / 2) / (domain[1] - domain[0])
return y * (out_range[1] - out_range[0]) + (out_range[1] + out_range[0]) / 2
def blockshaped(arr, nrows, ncols):
""" Return an array of shape (n, nrows, ncols) where
n * nrows * ncols = arr.size """
h, w = arr.shape
return (arr.reshape(h//nrows, nrows, -1, ncols)
.swapaxes(1, 2)
.reshape(-1, nrows, ncols))
#Load and convert from sxm to np array (Code from R. Banerjea)
filename_sxm = '20180321-LaVO3_021_135K_down_-70.sxm'
filedata, header, channels, ydim, xdim = conversion.read_SXM(filename_sxm)
data1 = xr.DataArray(filedata)
Data = np.array(data1.isel(dim_0=0, dim_1=0)) #dim_0 refers to Z,current, etc and dim_1 id fwd/bkwd
# Split array into smaller subarrays of size (subSize x subSize) and write to file
subSize = int(input('Please enter desired image split size (in pixels): '))
predictArray = blockshaped(Data, subSize, subSize)
normPred = normalize(predictArray)
np.save(os.path.join('..\\Pred\\','predSub'), normPred)
print(np.min(normPred), ',', np.max(normPred))
Отсюда я запускаю его через нейронную сеть для определения определенных характеристик изображения и извлечь волновую картину. Оттуда я беру «предсказанные изображения» и строю их, используя это:
import os
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import math
pred_plot=[]
predictOuput=[]
xctr=16
yctr=16
y=(np.repeat(np.arange(0,32,1),32,axis=0).reshape(32,32))
x=np.transpose(y)
predictOuput=np.load(os.path.join('.\\Pred\\prediction.npy'))
items = 256 #Needs to be changed based on number of elementes in array dimnesion
#Create while loop to iterate through the arrays
n=0
while n < items:
w = predictOuput[0,n,0]
t = predictOuput[1,n,0]
p = predictOuput[2,n,0]
kx=float((6.28318/w)*(math.cos(t)))
ky=float((6.28318/w)*(math.sin(t)))
pred_plot.append(np.cos((kx * (x-xctr))+(ky * (y-yctr)) + p))
n+=1
nrow = 15
ncol = 15
fig = plt.figure(figsize=(ncol-4.8, nrow+1))
gs = gridspec.GridSpec(nrow, ncol)
gs.update(hspace=0.0, wspace=0.0)
for i in range(nrow):
for j in range(ncol):
im = pred_plot[(i*16)+j]
ax = plt.subplot(gs[i,j])
ax.imshow(im, cmap='gray')
ax.set_xticks([])
ax.set_yticks([])
ax.set_aspect('equal')
plt.show()
Это дает мне вывод, который похож на блок, потому что данные не перекрываются:
Я пытаюсь найти способ сделать сюжет более непрерывным; Я знаю, что мне нужно пересекаться, но мне трудно обдумывать, как это сделать. Я думал о возможном использовании numpy функции почтового индекса. Любая помощь будет принята с благодарностью. Я могу включить любую необходимую информацию.