NumPy:画像処理で使う【0パディング】の例
サマリ
- np.pad
- 元のndarray(NumPy配列)を広げる
- 広げる時にある数字で満たすことをパディング(padding)と言う
- ※ここでは画像処理で利用する0パディングに限定
前提
- np.random.randint
サンプルコード
np.pad(1次元の場合)
元のndarrayの確認
import numpy as np
a = np.random.randint(1,30,5)
print(a)
print(a.shape)
[18 15 28 14 1] (5,)
- 1次元のndarray(NumPy配列)を作成
padding実行
b = np.pad(a,1)
c = np.pad(a,2)
print(b)
print(b.shape)
print(c)
print(c.shape)
[ 0 18 15 28 14 1 0] (7,) [ 0 0 18 15 28 14 1 0 0] (9,)
- 左右に0が付く
- padding=1の場合
- 5+(1×2)=7になる
- padding=2の場合
- 5+(2×2)=9になる
- 単純な計算だけど、左右分の2倍されることに注意(よく忘れる)
np.pad(2次元の場合)
元のndarrayの確認
import numpy as np
a = np.random.randint(10,100, 6).reshape(2,3)
print(a)
print(a.shape)
[[18 34 77] [97 89 58]] (2, 3)
- 表示が見やすくなるように2桁の数字に限定
- 形状(2,3)のndarray(NumPy配列)を作成
- 縦方向が2(2行)
- 横方向が3(3列)
padding=1実行
b = np.pad(a,1)
print(b)
print(b.shape)
[[ 0 0 0 0 0] [ 0 18 34 77 0] [ 0 97 89 58 0] [ 0 0 0 0 0]] (4, 5)
- 周囲に0が付く(見た目にはとても分かりやすい)
- 行方向
- 2+(1×2)=4になる
- 列方向
- 3+(1×2)=5になる
- それぞれの計算方法は1次元の時と同じことに注意
padding=2実行
c = np.pad(a,2)
print(c)
print(c.shape)
[[ 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0] [ 0 0 18 34 77 0 0] [ 0 0 97 89 58 0 0] [ 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0]] (6, 7)
- 周囲に0が2つずつ付く
- 行方向
- 2+(2×2)=6になる
- 列方向
- 3+(2×2)=7になる
- やっぱり、左右分(上下分)の2倍されることに注意(よく忘れる)
タプル指定するとどうなるか?
d = np.pad(a,((1,2),(3,2)))
print(d)
print(d.shape)
[[ 0 0 0 0 0 0 0 0] [ 0 0 0 18 34 77 0 0] [ 0 0 0 97 89 58 0 0] [ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]] (5, 8)
- (1,2)
- 行方向に伸びる
- 上に1行
- 下に2行
- (3,2)
- 列方向に伸びる
- 左に3行
- 右に2行
