Computer Vision, перекрывающиеся блоки, чтобы решить непрерывность в конечном изображении - PullRequest
0 голосов
/ 25 марта 2020

Итак, я беру изображение и превращаю его в трехмерный массив:

Original

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()

Это дает мне вывод, который похож на блок, потому что данные не перекрываются:

output

Я пытаюсь найти способ сделать сюжет более непрерывным; Я знаю, что мне нужно пересекаться, но мне трудно обдумывать, как это сделать. Я думал о возможном использовании numpy функции почтового индекса. Любая помощь будет принята с благодарностью. Я могу включить любую необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...