解决PIL Image 没有padding接口的办法。

PIL的Image 没有找到如何padding的方法,于是进行曲线救国路线:

1、这是0 padding

p = Image.new('RGB', (w, h), (255, 255, 255))
p.paste(image, (0, 0, w, h))

2、右侧padding 10个像素

p = Image.new('RGB', (w+10, h), (255, 255, 255))
p.paste(image, (0, 0, w, h))

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Deep Image Prior是一篇非常著名的论文,提出了一种无监督的图像重建方法。该方法不需要训练数据集,而是利用深度神经网络的模型结构和随机初始化的参数来直接重建图像,具有很高的实用价值。下面我们来详细解析其代码实现。 ## 1. 数据准备 ### 1.1 加载图像 代码中使用了Python的PIL库来加载图像。PIL库可以方便地进行图像读取和处理。代码如下: ```python from PIL import Image # 加载图像 img = Image.open('./data/lena.png') ``` ### 1.2 图像预处理 在进行图像重建之前,需要对图像进行一些预处理。首先,需要将图像转换为张量,以便在神经网络中进行操作。其次,需要对图像进行归一化,使其像素值在[0,1]范围内。代码如下: ```python import torch import torchvision.transforms as transforms # 将图像转换为张量 img_transform = transforms.ToTensor() # 对图像进行归一化 img_tensor = img_transform(img).unsqueeze(0) # unsqueeze(0)增加了一个批次维度 img_tensor = img_tensor.cuda() # 将张量移到GPU上 ``` ## 2. 模型构建 Deep Image Prior使用了一个简单的卷积神经网络来进行图像重建。代码中使用了PyTorch框架来构建模型。具体实现如下: ```python import torch.nn as nn # 定义卷积神经网络 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 64, 3, stride=1, padding=1) self.conv2 = nn.Conv2d(64, 64, 3, stride=1, padding=1) self.conv3 = nn.Conv2d(64, 64, 3, stride=1, padding=1) self.conv4 = nn.Conv2d(64, 64, 3, stride=1, padding=1) self.conv5 = nn.Conv2d(64, 3, 3, stride=1, padding=1) self.relu = nn.ReLU(inplace=True) def forward(self, x): out = self.relu(self.conv1(x)) out = self.relu(self.conv2(out)) out = self.relu(self.conv3(out)) out = self.relu(self.conv4(out)) out = self.conv5(out) return out ``` ## 3. 训练模型 Deep Image Prior没有使用传统的监督学习方法进行训练,而是利用随机初始化的参数进行图像重建。因此,在训练过程中,需要设置优化器和损失函数。具体实现如下: ```python import torch.optim as optim # 定义模型和优化器 net = Net() net.cuda() optimizer = optim.Adam(net.parameters(), lr=1e-2) # 定义损失函数 criterion = nn.MSELoss() # 开始训练 num_epochs = 1000 for epoch in range(num_epochs): optimizer.zero_grad() # 梯度清零 output = net(torch.randn(img_tensor.shape).cuda()) # 随机输入一张图像 loss = criterion(output, img_tensor) # 计算损失函数 loss.backward() # 反向传播 optimizer.step() # 更新参数 if epoch % 100 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) ``` 在训练过程中,我们随机输入一张图像,并将输出和原始图像计算MSE损失函数,然后进行反向传播和参数更新。值得注意的是,我们不需要提前定义任何训练集或测试集,也不需要进行模型的保存和加载。 ## 4. 图像重建 在训练结束后,我们可以使用训练好的模型来进行图像重建。具体实现如下: ```python import torchvision.utils as vutils # 使用模型进行图像重建 with torch.no_grad(): output = net(torch.randn(img_tensor.shape).cuda()) # 随机输入一张图像 output = output.clamp(0, 1) # 将输出图像像素值限制在[0,1]范围内 vutils.save_image(output.data, './output/output.png', normalize=True, scale_each=True, nrow=1) ``` 在这里,我们使用随机噪声作为输入,然后将输出图像保存到指定路径。 以上就是Deep Image Prior的代码实现。需要注意的是,Deep Image Prior的图像重建过程是一个无监督的过程,因此其重建效果可能会受到许多因素的影响,如模型结构、损失函数、优化器等。因此,在实际应用中,需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值