学习笔记-卷积

一、图像

1.读取原始图像

  • 什么是图像?
    • 在计算机中,图像就是一个数据体,通常由RGB三通道构成
      • RGB:[H,W,C]
        • H: height - row 行数
        • W:width - column 列数
        • C:channel - 层数
""""

    如何读取图像

"""
from matplotlib import pyplot as plt 

"""
plt.imread
	Docstring:
    	Read an image from a file into an array.
    	从一个文件中读取一幅图片到数组中

或者通过PIL的方式读取图像
	from PIL import Image
	img1 = Image.open(fp="./imgs/liebao.jpg")
"""
img = plt.imread(fname="./liebao.jpg")

# 显示图像
plt.imshow(img)

2.读取不同分量图像


"""
    读取R通道图像

"""
img_r = img[:, :, 0]

"""

    将R通道图像的伪彩色图像通过灰度图的形式显示出来

"""
plt.imshow(X=img_r, cmap="gray")

3.截取不同大小图像

"""

    取图像下半部分

"""
H, W, C = img.shape

H, W, C = img.shape # 解构赋值
img_low = img[H // 2:, :, :]


二、OpenCv图像处理

import cv2
import numpy as np

cv2.__version__ # 查看版本

# 读取图像
img2 = cv2.imread(filename="./liebao1.jpg")

# cv2多为BGR模式
plt.imshow(img2[:,:,1]) 
# cv2.imshow(winname = "test", mat = img2)

# 由BGR转换成RGB模式
img3 = cv2.cvtColor(src=img2, code = cv2.COLOR_BGR2RGB)

# numpy互换层数
img4 = img2[:, :, ::-1]  # 分量全取,但是反着来

"""
    numpy层数互换
        分量全取,但是反着来

"""
img4 = img2[:, :, ::-1]  
"""
	举例

"""

ls = ["1", "hello", "abd", 2.67]
ls[::-1]# -是反着来,1是步长
# output:[2.67, 'abd', 'hello', '1']

三、滤波(卷积)处理

  • 卷积(Convolution)
  • 不同的卷积核,会提取不同的特征
  • 当前卷积的通用设置:
    • kernel:3
    • padding:1
    • stride:1

为什么要做卷积?

  • 核不同时,可以提取特征不同,

那么卷积核应该是什么样的呢?

  • 核数值的取值变成了可学习的参数,通过深度学习的方法使其优化

什么图像可以卷积?

  • 不仅仅是可见光图像,只要有区域特征的就可以拿卷积卷

不可解释性:卷积核每次优化都不可解释

为什么每层都单独卷积核,增加参数量

import cv2
from matplotlib import pyplot as plt
from PIL import Image

img = plt.imread(fname="./liebao1.jpg")

# 定义卷积核
kernel = np.array([[-1,0,1],[-2, 0, 2], [-1, 0, 1]])

# ddepth=-1就是三层用同一个卷积核卷积,输出和原来输入一样
img2 = cv2.filter2D(src = img,ddepth=-1,kernel=kernel)

# 卷积核取反
-kernel
# 卷积核取转置
kernel.T

# 定义模糊卷积核
kernel = np.ones(shape=(50, 50)) / 50 / 50

# 将两个卷积结果相加使得特征更加突出
plt.imshow(X=img+img6)


"""
    pytoch习惯
        In the simplest case, the output value of the layer with input size
        :math:`(N, C_{\text{in}}, H, W)` and output :math:`(N, C_{\text{out}}, H_{\text{out}}, W_{\text{out}})`
        can be precisely described as:

    这里N(批量个数,总共有多少图像)在最前面,C(通道数(层))在第二,H, W高宽,而不是习惯中的最后面
    注意不管是处理图像还是合成图像都要按照维度计算和卷积

"""
X = torch.randn(32, 3, 512, 512)

conv2d = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, padding=1)

conv2d(X).shape # 只有层数改变
# output:torch.Size([32, 32, 512, 512])

conv2 = nn.Conv2d(in_channels=3,out_channels=2,kernel_size=3,padding=1,stride=2)

imgs= torch.randn(32,3,5,5)

conv2(imgs).shape
output:torch.Size([32, 2, 3, 3])

# 查看 w,b
w = conv2.state_dict()["weight"]
b = conv2.state_dict()["bias"]

w.shape # 2组,每组3个,大小3x3
# torch.Size([2, 3, 3, 3])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>