会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
bluedream1000
博客园
首页
新随笔
联系
管理
订阅
随笔 - 28 文章 - 2 评论 - 0 阅读 -
29038
我的标签
排序:
自定义
|
博文数⬇
|
标签名
leetcode
(12)
图像处理
(2)
优化
(1)
ml
(1)
机器学习
(2)
github
(2)
python
(1)
公告
用numpy.pad()对图像进行填充及简单的图像处理 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang454592297/article/details/80854996 一、用numpy.pad()对图像进行填 我们都知道在css的盒子模型中,有padding(内边距)这一属性。同css中的padding类似,在numpy中,numpy.pad()可以跟矩阵添加内边距,这一方法在CNN中的卷积层可以用到,可以影响到卷积后矩阵的维度,其用法如下: numpy.pad(array, pad_width, mode, **kwargs)[source] 其中array是需要添加内边距的矩阵。pad_width对应矩阵每个维度填充的宽度,其格式是这样的:,表示第n维之前和时候填充的宽度。mode表示填充矩阵的值的模式,对应有:”constant“——表示用一个常量填充矩阵,“minimum”——用某个维度上的最小值填充矩阵,等其他模式。具体可参照官方APInumpy.pad。下面看一个用numpy.pad填充图像的例子,代码如下: import pylab import numpy as np from scipy import ndimage import matplotlib.pyplot as plt dir = "./testImgs/" filename = dir + "la_defense.jpg" ori_image = np.array(ndimage.imread(filename, flatten=False)) dim1_pad = np.pad(ori_image, ((50, 50), (0, 0), (0, 0)), 'constant', constant_values=0) dim2_pad = np.pad(ori_image, ((0, 0), (50, 50), (0, 0)), 'maximum') dim3_pad = np.pad(ori_image, ((50, 50), (50, 50), (0, 0)), 'constant', constant_values=200) print("origin shape:" + str(ori_image.shape)) print("vertical pad:" + str(dim1_pad.shape)) print("horizontal pad:" + str(dim2_pad.shape)) print("all pad:" + str(dim3_pad.shape)) fig, axarr = plt.subplots(2, 2) axarr[0, 0].imshow(ori_image) axarr[0, 1].imshow(dim1_pad[:, :, 0]) axarr[1, 0].imshow(dim2_pad[:, :, 1]) axarr[1, 1].imshow(dim3_pad[:, :, 2]) pylab.show() 显示的结果如下: 这里写图片描述 以上代码中用到了scipy.ndimage.imread读取图片,可以结合我的另一篇博客二、使用scipy读图片并改变图片大小进行理解。读到的图片是一个(1181,1181,3)的3维矩阵,第三维表示RGB三个通道。我分别在R、B、G三个通道上进行了填充,第二张图是在R通道的第一维(上下)分别填充50的像素的宽度,第三张图是在G通道的第二维(左右)分别填充50的像素的宽度(模式为minimum),第四张图是在B通道的第一、二维分别分别填充50的像素的宽度。可以看出,这四张图都是不一样的(尽管第三、四张图差别不大),填充后矩阵的维度如下: 这里写图片描述 二、简单的图像处理 在利用CNN进行图片分类的时候,有时候会缺少样本,我们可以通过用已有的样本来自己创建新的样本,如图像的旋转,裁剪,图像颜色的改变等。下面是通过改变图像的颜色来创建新的图片,代码如下: import pylab import numpy as np from scipy import ndimage import matplotlib.pyplot as plt def new_pic_arr(dim0, dim1, dim2, dim0_plus, dim1_plus,dim2_plus): pic = np.zeros((1181, 1181, 3), dtype=np.uint8) pic[:, :, 0] = dim0 + dim0_plus pic[:, :, 1] = dim1 + dim1_plus pic[:, :, 2] = dim2 + dim2_plus return pic dir = "./testImgs/" filename = dir + "la_defense.jpg" ori_image = np.array(ndimage.imread(filename, flatten=False)) dim0 = ori_image[:, :, 0] dim1 = ori_image[:, :, 1] dim2 = ori_image[:, :, 2] pic1 = new_pic_arr(dim0, dim1, dim2, 30, 0, 30) pic2 = new_pic_arr(dim0, dim1, dim2, 40, 40, 0) pic3 = new_pic_arr(dim0, dim1, dim2, 0, 40, 40) fig, axarr = plt.subplots(2, 2) axarr[0, 0].imshow(ori_image) axarr[0, 1].imshow(pic1) axarr[1, 0].imshow(pic2) axarr[1, 1].imshow(pic3) pylab.show() 最后的结果如下: 这里写图片描述 上述中的四副图中,图一是原始的图,图二是在原图的R、B通道上每个像素的值增加30后的结果,图三是在原图的R、G通道上每个像素的值增加40后的结果,图四是在原图的G、B通道上每个像素的值增加40后的结果。可以看出每张图的颜色都不同,我们可以利用这些新的样本来训练神经网路了。
昵称:
bluedream1000
园龄:
9年7个月
粉丝:
0
关注:
10
+加关注
<
2025年3月
>
日
一
二
三
四
五
六
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
搜索
我的标签
leetcode
(12)
github
(2)
图像处理
(2)
机器学习
(2)
python
(1)
ml
(1)
优化
(1)
随笔分类
leetcode(12)
数据集(1)
随笔档案
2022年5月(3)
2022年4月(2)
2021年12月(2)
2021年11月(1)
2020年9月(4)
2020年5月(1)
2020年4月(1)
2019年10月(1)
2019年3月(1)
2019年2月(11)
2017年9月(1)
阅读排行榜
1. 烟雾/火焰检测数据集整理(11131)
2. 遥感影像中变化检测数据集【转】(3455)
3. pycharm下安装numpy等ml库(2839)
4. 用numpy.pad()对图像进行填充及简单的图像处理(2654)
5. docker中安装python3.8(2582)
推荐排行榜
1. 烟雾/火焰检测数据集整理(1)
点击右上角即可分享