Я работаю над изображениями компьютерной томографии и хочу извлечь небольшой участок, например, из места сканирования на раке (16,40,40) (z, y, x), иногда местоположение находится по углам и не может получитьразмер, который решил раньше, для решения этой проблемы пытался сделать отступы со всех сторон, вот мой код:
M,N,P=(16,40,40)
temp_img = np.ndarray([16,40,40],dtype=np.float32)
center = np.array([node_z, node_y, node_x]) # nodule center
v_center = np.rint((center-origin)/spacing) # nodule center in voxel space (still x,y,z ordering)
temp_imgtemp_img[:,:,:] = img_array[int(v_center[0]-(M/2)):int(v_center[0]+(M/2)),\
int(v_center[1]-(N/2)):int(v_center[1]+(N/2)),\
int(v_center[2]-(P/2)):int(v_center[2]+(P/2))]
m,n,p=temp_img.shape
a1,a2,b1,b2,c1,c2=0,0,0,0,0,0
if (m,n,p) != (M,N,P):
if m != M:
a=M-m
a1=a/2
a2=a-a1
if n != N:
b=N-n
b1=b/2
b2=b-b1
if p != P:
c=P-p
c1=c/2
c2=c-c1
transform=((a1,a2),(b1,b2),(c1,c2))
temp_img = np.pad(temp_img,transform,'linear_ramp')
plt.imshow(temp_img[5], cmap='gray')
plt.title('image')
plt.grid(which='major', linewidth='0.8', color='red')
plt.show()
, но я получаю ошибку:
TypeError: `pad_width` must be of integral type.
путем изменения *От 1007 * до a1=a//2
, как предлагается в одном из ответов ниже, проблема решена, но я получаю новую ошибку:
could not broadcast input array from shape (20,50,50) into shape (25,50,50)
, которая означает, что моя реальная проблема не решена, потому что, когда попробовал это решениезначение округляется, и форма становится меньше или больше, чем указанная форма.