数字图像处理基础(函数篇)

1.imfilter函数

 

imfilter函数是一种计算机函数,也叫做实现线性空间滤波函数,功能是对任意类型数组或多维图像进行滤波,函数形式是B = imfilter(A,H)。

用法:B = imfilter(A,H)

B = imfilter(A,H,option1,option2,...)

或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)其中,f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用"相关"还是"卷积"。boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。具体参数选项见下表:

选项

描述

filtering_mode

'corr'

通过使用相关来完成,该值为默认。

'conv'

通过使用卷积来完成

boundary_options

'X'

输入图像的边界通过用值X(无引号)来填充扩展

其默认值为0

'replicate'

图像大小通过复制外边界的值来扩展

'symmetric'

图像大小通过镜像反射其边界来扩展

'circular'

图像大小通过将图像看成是一个二维周期函数的一个周期来扩展

size_options

'full'

输出图像的大小与被扩展图像的大小相同

'same'

输出图像的大小与输入图像的大小相同。这可通过将滤波掩模的中心点的偏移限制到原图像中包含的点来实现,该值为默认值。

举例:

originalRGB = imread('peppers.png');

imshow(originalRGB)

h = fspecial('motion', 50, 45);%创建一个滤波器

filteredRGB = imfilter(originalRGB, h);

figure, imshow(filteredRGB)

 2.zero padding

零填充的动机:图像边缘信息的丢失——保护

在CNN中,通常会使用过滤器(卷积核)来实现图像的卷积,从而实现图像的降维,即图像缩小了,重点来了:图像边缘的信息卷积后会出现什么情况呢?

图像边缘的信息卷积后会出现什么情况呢?对比分析下图不难看出,图像的缩小了,同时图像原本红色靠图像边缘区域的内容被忽略了一部分,试想,这还是因为主要内容在图像中间,如果重点内容在图像边缘,那就很容易丢失大量信息!!!!

零填充实际上是什么细节:

零填充是一种允许保留原始输入大小的技术。可以在每卷积层的基础上指定。对于每个卷积层,就像定义过滤器和过滤器的大小一样,可以指定是否使用填充。

 

 3. .shape()函数

shape并不是和长度相关的,我理解的shape就是这个对象的形状。

import numpy as np

arr = [1, 2, 3, 4, 5]
matrix = [[1, 1, 1],
          [2, 2, 2],
          [3, 3, 3]]

print(np.shape(arr))
print(np.shape(matrix))

# 也可转化为numpy的数据然后调用 .shape
# arr = np.array(arr)
# matrix = np.array(matrix)

# print(arr.shape)
# print(matrix.shape)

img = cv2.imread("C:/Users/pc/Desktop/code3-4/image/girl.jpg")
print(img.shape)

输出结果:

# 数量为5的向量
(5,)
# 三行三列
(3, 3)
# img.shape为(1080, 1920, 3),即维度为(1080,1920,3)的numpy数组
# 每张图片是由1080*1920像素构成的,而每个像素点由(R,G,B)三原色构成的,所以还有三个维度
(1080, 1920, 3)

4.np.expand_dims()

np.expand_dims:用于扩展数组的形状

expand_dims(a, axis)中,a为numpy数组,axis为需添加维度的轴,a.shape将在该轴显示为1,通过索引调用a中元素时,该轴对应的索引一直为0。废话少说,实操为证:

本人使用jupyter notebook软件编程

1.一维数组:即向量

如上图所示,axis=0对应的shape为6,axis=1对应的shape为空。如下图,在axis=0添加维度,即shape中用1替代6的位置,并将6后移。索引y[0][1]中0即为添加的维度,一直为0不可更改。

如下图,在axis=1添加维度,即shape中把1放在axis=1的位置,即在6后面。索引y[1][0]中0即为添加的维度,一直为0不可更改。

 

同理对于二维,三维数组一样。

2.二维数组:

 

shape中2处于axis=0的位置,3处于axis=1的位置,若在axis=1的位置添加变量,则需在shape中axis=1的位置写1,同时3后移,shape变为(2,1,3)。调用索引时axis=1的位置一直为0

3.三维数组:

 

 axis = -1 也就是相当于在最后插入

5.np.zeros()

np.zeros函数的作用
返回来一个给定形状和类型的用0填充的数组;
zeros(shape, dtype=float, order=‘C’)
shape:形状
dtype:数据类型,可选参数,默认numpy.float64
order:可选参数,c代表与c语言类似,行优先;F代表列优先

import numpy as np

print(np.zeros((2,5)))

结果为一个2行5列的矩阵
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]

print(np.zeros((2,5),dtype= np.int))

结果为
[[0 0 0 0 0]
[0 0 0 0 0]]
 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值