文件名:【Pytorch神经网络实战案例】09 使用卷积提取图片的轮廓信息(手动模拟Sobel算子),lg gt540
【Pytorch神经网络实战案例】09 使用卷积提取图片的轮廓信息(手动模拟Sobel算子)
1 载入图片并显示 import matplotlib.pyplot as pltimport matplotlib.image as mpimgimport torchimport torchvision.transforms as transformsimport osos.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()