Pytorch神经网络实战学习笔记_16 使用卷积提取图片的轮廓信息(手动模拟Sobel算子)

1 载入图片并显示

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import torch
import torchvision.transforms as transforms
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
### 1 载入图片并显示
myimg = mpimg.imread('img.jpg')
plt.imshow(myimg)
plt.axis('off')
plt.show()
print(myimg.shape)
# 输出 (497, 687, 3)

2 图片数据转化为张量

### 2 图片数据转化为张量
plt2tensor = transforms.ToTensor() # 实例化ToTensor()
rgb_image = plt2tensor(myimg) # 进行图片转换
print(rgb_image[0][0]) # 输出图片的部分数据
print(rgb_image.shape) # 输出图片的形状
# torch.Size([3, 497, 687])

3 定义Sobel卷积核

### 3 定义Sobel卷积核
sobelfilter = torch.tensor([
    [-1.0,0.0,1.0],
    [-2.0,0.0,2.0],
    [-1.0,0.0,1.0]]*3).reshape([1,3,3,3]) # 定义Sobel卷积核
print(sobelfilter)

4 卷积操作

### 4 卷积操作
op = torch.nn.functional.conv2d(rgb_image.unsqueeze(0),sobelfilter,stride=3,padding=1) # 3个输入通道,生成1哥特征图

ret = (op - op.min()).div(op.max() - op.min()) # 卷积结果进行处理
ret = ret.clamp(0.0,1.0).mul(255).int() # 将卷积结果转化图片
print(ret)
### 灰度图
plt.imshow(ret.squeeze(),cmap='Greys_r') # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()

猜你喜欢

转载自blog.csdn.net/qq_39237205/article/details/123445156
今日推荐