人工智能基础作业4


一, 简单描述卷积、卷积核、多通道、特征图、特征选择概念。

1,卷积:是通过两个函数,f和g生成第三个函数的一种数学运算,其本质是一种特殊的积分变换,表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分,针对像素点的空间依赖性来对图像进行处理的一种技术。
2, 卷积核:是一个二维矩阵,矩阵中的数值为对图像中与卷积核同样大小的子块像素点进行卷积计算时所采用的权重,包含高度(height)、宽度(width))、深度(depth)三个维度,并包含一个参数(维度):通道数(channels),其中深度这一维度只有在三维卷积时才有实际意义。
3, 多通道:多通道卷积时,卷积核各通道同步滑动,卷积核的各通道与输入特征图的对应通道同步卷积,例如三通道就是RGB三原色的,一幅完整的图像,是由红绿蓝三个通道组成的,他们共同作用产生了完整的图像。
4,特征图:由图像提取出的特征值组成的方图。
5,特征选择:从已经有的特征中选择若干有效的特征使图片最优。

二,探究不同卷积核的作用,研究背后的原理。

1,边缘检测:标识数字图像中亮度变化明显的点,这些点往往是轮廓或边缘。

卷积核:
在这里插入图片描述
效果:
在这里插入图片描述

2,锐化:快速聚焦模糊边缘,提高图像中某一部位的清晰度或者焦距程度,使图像特定区域的色彩更加鲜明。

卷积核:
在这里插入图片描述
效果:在这里插入图片描述

3,模糊:处理图中与周围亮度差异过大的点,使其和周围点相似,以此消除或模糊轮廓。

卷积核:在这里插入图片描述
效果:在这里插入图片描述

三、编程实现:

1,经典卷积核,实现灰度图的边缘检测、锐化、模糊。

代码:

import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
import torch.nn.functional as F
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 = '321.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([[0, -1, 0],
                         [-1, 5, -1],
                         [0, -1, 0]], 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()

原图:
在这里插入图片描述

①,边缘检测

sobel_kernel = np.array([[-1, -1, -1],
                         [-1, 8, -1],
                         [-1, -1, -1]], dtype='float32')  # 定义轮廓检测算子

在这里插入图片描述

②,锐化

sobel_kernel = np.array([[0, -1, 0],
                         [-1, 5, -1],
                         [0, -1,0]], dtype='float32')  # 定义轮廓检测算子

在这里插入图片描述

③,模糊

sobel_kernel = np.array([[0.0625, 0.125, 0.0625],
                         [0.125, 0.25, 0.125],
                         [0.0625, 0.125,0.0625]], dtype='float32')  # 定义轮廓检测算子

在这里插入图片描述

2,调整经典卷积核参数,测试并总结。

①,边缘检测增加中心权重边缘更加清晰

sobel_kernel = np.array([[-1,-1, -1],
                         [-1, 12, -1],
                         [-1, -1,-1]], dtype='float32') 

在这里插入图片描述

②,锐化提升周围权重,锐化度增加

sobel_kernel = np.array([[0,5, 0],
                         [5, 5, 5],
                         [0, 5,0]], dtype='float32')

在这里插入图片描述

③,模糊卷积核增大周围权重,模糊度增加

sobel_kernel = np.array([[3, 5, 3],
                         [5, 0.25, 5],
                         [3, 5,3]], dtype='float32') 

在这里插入图片描述

3,使用不同尺寸图片,测试并总结。

在这里插入图片描述

4,探索更多类型卷积核。

①,emboss

卷积核:在这里插入图片描述
效果:在这里插入图片描述

②,bottom sobel

卷积核:在这里插入图片描述
效果:在这里插入图片描述

③,left sobel

卷积核:在这里插入图片描述
效果:在这里插入图片描述

5,尝试彩色图片边缘检测。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值