首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tensorflow从图像列表中提取补丁

使用tensorflow从图像列表中提取补丁
EN

Stack Overflow用户
提问于 2021-12-27 10:26:33
回答 1查看 368关注 0票数 4

如果我们有一个图像列表,我们如何提取补丁。

示例:

代码语言:javascript
复制
def get_train_images():
    image_list = glob(FLAGS.train_path + '/*.jpg')
    #extract_patch

想做这样的事情:例如,我只做了一个图像,但是我想对100个图像执行相同的任务。

样本图像:

样本图像输出图像:

我有一个图像列表,并希望从图像中提取补丁并将它们保存在另一个列表中。这份名单可以被改写。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-05 09:57:21

下面是一个列表中两个图像的示例。针对每幅图像提取图像块,最终结果为每幅图像4块的数组,从而得到形状(2, 4, 4, 3) of patched_images,其中2为样本数,4为每幅图像的斑块数,(4, 4, 3)为每幅图像的形状。

代码语言:javascript
复制
import tensorflow as tf
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

images = [tf.random.normal((16, 16, 3)), tf.random.normal((16, 16, 3))]

patched_images = []
for img in images:
  image = tf.expand_dims(np.array(img), 0)
  patches = tf.image.extract_patches(images=image,
                          sizes=[1, 4, 4, 1],
                          strides=[1, 4, 4, 1],
                          rates=[1, 1, 1, 1],
                          padding='VALID')
  patches = [tf.reshape(patches[0, i, i], (4, 4, 3)) for i in range(4)]
  patched_images.append(np.asarray(patches))

patched_images = np.asarray(patched_images)
print(patched_images.shape)

axes=[]
fig=plt.figure()
patched_image = patched_images[0] # plot patches of first image
for i in range(4):
    axes.append( fig.add_subplot(2, 2, i + 1) )
    subplot_title=("Patch "+str(i + 1))
    axes[-1].set_title(subplot_title)  
    plt.imshow(patched_image[i, :, :, :])
fig.tight_layout()    
plt.show()
代码语言:javascript
复制
(2, 4, 4, 4, 3)

如果您有不同的图像大小,并且仍然希望提取4x4补丁,而不管图像大小,请尝试如下:

代码语言:javascript
复制
import tensorflow as tf
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

images = [tf.random.normal((16, 16, 3)), tf.random.normal((24, 24, 3)), tf.random.normal((180, 180, 3))]

patched_images = []
for img in images:
  image = tf.expand_dims(np.array(img), 0)
  patches = tf.image.extract_patches(images=image,
                          sizes=[1, 4, 4, 1],
                          strides=[1, 4, 4, 1],
                          rates=[1, 1, 1, 1],
                          padding='VALID')
  patches = [tf.reshape(patches[0, i, i], (4, 4, 3)) for i in range(4)]
  patched_images.append(np.asarray(patches))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70494275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档