从图像/阵列生成面片并保存坐标的最快方法

2024-05-16 00:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Keras训练了一个CNN来分割特定的模式。它真的很好用,但现在我必须开始“制作阶段”,所以我的CNN必须分割数以千计的图像。在

因此,对于CNN必须分割的给定图像,对于这个图像中的每个像素,我必须在像素周围切割一个补丁,并将所有补丁提供给CNN。到目前为止,我使用的解决方案是:

WindowSize = 23 #patch size
ws2 = WindowSize / 2
image_data = ndimage.imread(image_file).astype(float)
dimensions = image_data.shape
SizeX = dimensions[1]
SizeY = dimensions[0]
imtest = np.ndarray(shape=(SizeX-2*ws2, 1, WindowSize, WindowSize), dtype=np.float32)
for y in range(ws2,SizeY-ws2):
    for x in range(ws2,SizeX-ws2):
        imtest[x-ws2,0] = image_data[y-ws2:y+ws2+1, x-ws2:x+ws2+1]

所以我一行一行地工作,就像这样我不会丢失补丁的坐标。但是这个解决方案很慢。有没有更快的方法?

我也听说过Keras中的Generator,但是用fit_Generator函数训练生成器似乎很有用,但不是在图像上测试然后分割它,因为它不保留面片坐标。在


Tags: 图像imagedatanp像素解决方案cnnkeras
1条回答
网友
1楼 · 发布于 2024-05-16 00:25:37

Here is a way to generate images with keras, hope it helps:

datagen = ImageDataGenerator(
    rotation_range=.06,
    width_shift_range=0.02,
    height_shift_range=0.02,
    shear_range=0.0002,
    zoom_range=0.0002,
    horizontal_flip=True,
    fill_mode='nearest',
    rescale = 1/255.
    )

for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9):
  for i in range(0, 9):
    pyplot.subplot(330 + 1 + i)
    pyplot.imshow(X_batch[i].reshape(128, 128, 3),    
    cmap=pyplot.get_cmap('gray'))
  pyplot.show()
  break

相关问题 更多 >