人工智能作业4
概念解释:
卷积:卷积类似一种混合信息的手段,是一种混合两种信息的流程,有助于简化更复杂的表达式。
卷积核:图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核
多通道:多通道图像是指多个摄像机拍摄的同一个场景的图像或者一个摄像机在不同时刻拍摄的同一场景的图像。
特征图:是一种在一个空间中获取特征向量,然后在另一空间中将其转换为特征向量的函数。例如,给定特征向量[体积,重量,高度,宽度],它可以返回[1,体积/重量,高度宽度]或[高度宽度],甚至仅返回[体积]
特征选择:寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。
卷积核
正常情况:
图像锐利:
锐化滤波器实际上就是计算当前点和周围点的差别,然后将这个差别加到原来的位置上
边缘检测:
矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的
浮雕:
浮雕滤波器可以给图像一种3D阴影的效果。
编程演示
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
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 = 'C:\\Users\\a1502\\Pictures\\00.jpeg'
im = Image.open(file_path).convert('L') # 读入一张灰度图的图片
im = np.array(im, 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, 3, bias=False) # 定义卷积
sobel_kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]], dtype='float32') # 定义轮廓检测算子
sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3)) # 适配卷积的输入输出
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()
平滑均值滤波:
高斯平滑:
图像锐化:
水平梯度:
垂直梯度:
边缘检测
水平梯度:
垂直梯度:
本次收获:熟悉卷积核在图像处理的使用,以及解决OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
意思是要初始化一个libiomp5md.dll文件,但是发现这个文件已被初始化了,做法就是在本项目的环境目录下搜索libiomp5md.dll
解决方法:
//添加到包的最前面
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"