作业1
编程实现
-
图1使用卷积核(-1 +1),输出特征图
-
图1使用卷积核(-1,+1)T,输出特征图
-
图2使用卷积核(-1 +1),输出特征图
-
图2使用卷积核(-1,+1)T,输出特征图
-
图3使用卷积核(-1,+1)T,(-1 +1),
输出特征图
代码
import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
from PIL import Image
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 #有中文出现的情况,需要u'内容
# https://blog.csdn.net/weixin_40123108/article/details/83510592
file_path = 'deer.jpg'
im = np.array([[0,0,0,255,255,255],
[0,0,0,255,255,255],
[0,0,0,255,255,255],
[0,0,0,255,255,255],
[0,0,0,255,255,255],
[0,0,0,255,255,255],
[0,0,0,255,255,255]], dtype='float32') # 将其转换为一个矩阵
print(im.shape[0], im.shape[1])
plt.imshow(im.astype('uint8'), cmap='gray') # 可视化图片
plt.title('原图')
plt.show()
im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
conv1 = nn.Conv2d(1, 1, (1,2), bias=False) # 定义卷积
sobel_kernel = np.array([[-1,1]], dtype='float32') # 定义轮廓检测算子
sobel_kernel = sobel_kernel.reshape((1, 1, 1, 2)) # 适配卷积的输入输出
conv1.weight.data = torch.from_numpy(sobel_kernel) # 给卷积的 kernel 赋值
edge1 = conv1(Variable(im)) # 作用在图片上
x = edge1.data.squeeze().numpy()
print(x.shape) # 输出大小
plt.imshow(x, cmap='gray')
plt.show()
2.
3.
4.
5.
(-1 +1):
(-1 +1)T:
:
作业2
一、概念
以下仅仅是我个人为了方便理解的认识,不一定对。
卷积:
通过函数提取一部分数据获得信息的操作。
卷积核:
卷积操作使用的函数。
特征图:
一个图像经过卷积操作后得到的具有图像特征的图。
特征选择:
百度:特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化,是从原始特征中选择出一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是模式识别中关键的数据预处理步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。
我的理解就是将特征中自己需要的特征突出出来。
步长:
每过几个像素点进行一次卷积,步长就是确定像素点的个数。
填充:
卷积后图像会比之前小,填充就是把小了的地方填充,使卷积后和卷积前的图像大小相同。
感受野:
在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域。
二、探究不同卷积核的作用
参考:Image Kernels explained visually (setosa.io)
模糊核不再强调相邻像素值的差异。
sobel 核用于仅显示特定方向上相邻像素值的差异。
浮雕核(类似于sobel核,有时被称为相同的意思)通过强调给定方向上像素的差异来产生深度的错觉。在本例中,沿从左上角到右下角的一条线的方向行驶。
缩进内核使映像保持不变。
sobel 核用于仅显示特定方向上相邻像素值的差异。
轮廓核(也称为“边缘”核)用于突出显示像素值的巨大差异。在新图像中,强度接近的相邻像素旁边的像素将显示为黑色,而相邻像素旁边的像素将显示为白色。
sobel 核用于仅显示特定方向上相邻像素值的差异。
锐化内核强调相邻像素值的差异。这使得图像看起来更生动。
sobel 核用于仅显示特定方向上相邻像素值的差异。
三、编程实现
以下用的图片是网上下载的。(好看,所以用一下)
1.实现灰度图的边缘检测、锐化、模糊。(必做)
模糊:
锐化:
边缘检测
2.调整卷积核参数,测试并总结。(必做)
这里用锐化
步长为3:
步长为5:
步长为10:
步长越长,图像越模糊,图像的特征可能有损失。
3.使用不同尺寸图片,测试并总结。(必做)
尺寸变小:
模糊
锐化
边缘检测
总结:
图像像素越低,效果越明显。
4.探索更多类型卷积核。
总结
这次作业更深入的了解了卷积的概念和特点,了解到不同的卷积核对图像的影响和作用。