Spaces:
Running
on
Zero
Running
on
Zero
from PIL import Image | |
import torch | |
import torch.nn.functional as F | |
import numpy as np | |
def feifeisharpened(image,num_strength): | |
# 将PIL图像转换为NumPy数组 | |
image_np = np.array(image) | |
# 将NumPy数组转换为PyTorch张量 | |
image_tensor = (torch.tensor(image_np).permute( | |
2, 0, 1).unsqueeze(0).float().to("cuda")) | |
# 定义锐化滤镜,并调整中心值 | |
strength = num_strength | |
sharpen_kernel = (torch.tensor( | |
[ | |
[0, -1 * strength, 0], | |
[-1 * strength, 1 + 4 * strength, -1 * strength], | |
[0, -1 * strength, 0], | |
], | |
dtype=torch.float32, | |
).unsqueeze(0).unsqueeze(0).to("cuda")) | |
# 分别对每个通道应用卷积核 | |
sharpened_channels = [] | |
for i in range(3): | |
channel_tensor = image_tensor[:, i:i + 1, :, :] | |
sharpened_channel = F.conv2d(channel_tensor, | |
sharpen_kernel, | |
padding=1) | |
sharpened_channels.append(sharpened_channel) | |
# 合并通道 | |
sharpened_image_tensor = torch.cat(sharpened_channels, dim=1) | |
# 将增强后的图像转换回PIL格式 | |
sharpened_image_np = (sharpened_image_tensor.squeeze(0).permute( | |
1, 2, 0).cpu().numpy()) | |
sharpened_image_np = np.clip(sharpened_image_np, 0, | |
255).astype(np.uint8) | |
image = Image.fromarray(sharpened_image_np) | |
return image |