plt.countourの境界線と見た目の色の境界線がずれている

python

1import matplotlib.pyplot as plt 2import numpy as np 3from skimage.io import imread 4from scipy.signal import correlate 5 6path1 = r'.\B005_1.tif'7path2 = r'.\B005_2.tif'8 9a = imread(path1)10b = imread(path2)11 12win_size = 3213 14def vel_field(curr_frame, next_frame, win_size):15 ys = np.arange(0, curr_frame.shape[0], win_size)16 xs = np.arange(0, curr_frame.shape[1], win_size)17 dys = np.zeros((len(ys), len(xs)))18 dxs = np.zeros((len(ys), len(xs)))19 20 for iy, y in enumerate(ys):21 for ix, x in enumerate(xs):22 int_win = curr_frame[y : y + win_size, x : x + win_size]23 search_win = next_frame[y : y + win_size, x : x + win_size]24 cross_corr = correlate(25 search_win - search_win.mean(), int_win - int_win.mean(), method="fft"26 )27 dys[iy, ix], dxs[iy, ix] = ( 28 np.unravel_index(np.argmax(cross_corr), cross_corr.shape)29 - np.array([win_size, win_size])30 + 1 31 )32 33 ys = ys + win_size / 234 xs = xs + win_size / 235 36 return xs, ys, dxs, dys 37 38xs, ys, dxs, dys = vel_field(a, b, win_size)39 40########################41x = xs 42y = ys[::-1]43x, y = np.meshgrid(x, y)44 45z = dxs 46ax1 = plt.contour(x,y,z,colors='black',linestyles='solid') 47ax1.levels = np.linspace(-10,10,11)48contour_levels = ax1.levels 49area_levels = np.linspace(-10,10,11)50ax1 = plt.contourf(x,y,z,cmap='jet',levels=area_levels)51ax1.set_clim(vmin=min(area_levels), vmax=max(area_levels))52ax1 = plt.colorbar(label="x-direction displacement",ticks=contour_levels) 53plt.savefig('test_x.png')54plt.show()55 56z = dys 57ax2 = plt.contour(x,y,z,colors='black', linestyles='solid')58ax2.levels = np.linspace(-10,10,11)59contour_levels = ax2.levels 60area_levels = np.linspace(-10,10,11)61ax2 = plt.contourf(x,y,z,cmap='jet',levels=area_levels)62ax2.set_clim(vmin=min(area_levels), vmax=max(area_levels))63ax2 = plt.colorbar(label="y-direction displacement",ticks=contour_levels) 64plt.savefig('test_y.png')65plt.show()

コメントを投稿

0 コメント