图像处理尝试
import torch
import torch.nn.functional as F
from PIL import Image
import torchvision.transforms as T
img_path = r'/mnt/e/something/pooltst.jpg'
img = Image.open(img_path).convert('RGB')
x = T.ToTensor()(img).unsqueeze(0)
def same_conv(x, kernel, padding=0):
kH, kW = kernel.shape
kernel = kernel.view(1,1,kH,kW).repeat(x.size(1),1,1,1)
return F.conv2d(x, kernel, stride=1, padding=padding, groups=x.size(1))
def rescale_01(t):
t_min, t_max = t.min(), t.max()
delta = t_max - t_min
if delta < 1e-7:
return t - t_min
return (t - t_min) / delta
w = torch.tensor([[ 0.0, -1.0, 0.0],
[ -1.0, 1.0, -1.0],
[ 0.0, -1.0, 0.0]])
blur = same_conv(x, w, padding=1)
edge = blur.abs()
edge = edge * 5
edge = edge.clamp(0.0, 1.0)
gamma = 0.4
edge = torch.pow(edge, gamma)
edge = rescale_01(edge)
border = 15
mask = torch.ones_like(edge)
mask[..., :border, :] *= torch.linspace(0, 1, border).view(1, 1, -1, 1)
mask[..., -border:, :] *= torch.linspace(1, 0, border).view(1, 1, -1, 1)
mask[..., :, :border] *= torch.linspace(0, 1, border).view(1, 1, 1, -1)
mask[..., :, -border:] *= torch.linspace(1, 0, border).view(1, 1, 1, -1)
edge = edge * mask
out = edge
out_path = r'/mnt/e/something/filter_change.jpg'
T.ToPILImage()(out[0]).save(out_path)
print(f'Done! The photo is saved at {out_path}')