畳み込みフィルタで、フィルタの重みによって、画像がどう変わるかを見比べられる形でまとめました。参考になれば幸いです。
背景
- NNを自前で実装できる程度に理解しようとしています。
- Convolution NNについて理解を深めていくにあたり、フィルタの重みを変えると、変換後の画像がどう変わるのか、見比べれる形でまとめたいと思ってました。
元画像
- 下表は 3x3 フィルタの重み値を示します。
| 0.00 | 0.00 | 0.00 |
| 0.00 | 1.00 | 0.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:0.0 | ||
![]() |
明るさ変換
明るく。 中心の値を1.0 より大きい値に
| 0.00 | 0.00 | 0.00 |
| 0.00 | 1.50 | 0.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:0.0 |
- 明るくなる。
- 単純に輝度を1.5倍にするので、白飛びが生じている。
暗く: 中心の値を1.0 より小さい値に(0より大きい値で)
| 0.00 | 0.00 | 0.00 |
| 0.00 | 0.75 | 0.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:0.0 |
- 暗くなっている。
重み値合計 1.0
ぼかし効果。 中心と近傍とも正数 合計は1.0
中心と 4近傍で 同値
| 0.00 | 0.20 | 0.00 |
| 0.20 | 0.20 | 0.20 |
| 0.00 | 0.20 | 0.00 |
| Bias:0.0 | ||
![]() |
- 比較用に原画 と フィルタ画像を並べている。 左が原画 右がフィルタ後の画像
- 並べると ぼかしの効果がわかる。
中心と 8近傍で ほぼ同値
| 0.11 | 0.11 | 0.11 |
| 0.11 | 0.12 | 0.11 |
| 0.11 | 0.11 | 0.11 |
| Bias:0.0 | ||
![]() |
- 先の4近傍に比べ、ぼかし効果が強まっているのが判る。(左下の髪のあたりが特に)
4近傍に対し中心値を大きくする
| 0.00 | 0.10 | 0.00 |
| 0.10 | 0.60 | 0.10 |
| 0.00 | 0.10 | 0.00 |
| Bias:0.0 | ||
![]() |
- ノイズ低減に用いるのは このあたりの比率っぽい。
中心値を少し小さく & 4近傍→8近傍
| 0.05 | 0.10 | 0.05 |
| 0.10 | 0.40 | 0.10 |
| 0.05 | 0.10 | 0.05 |
| Bias:0.0 | ||
![]() |
- 中心値と近傍値の比率で、ぼかし加減を調節できるみたい。
エッジ強調。 中心は正数 近傍は負数 合計は1.0
| 0.00 | -0.20 | 0.00 |
| -0.20 | 1.80 | -0.20 |
| 0.00 | -0.20 | 0.00 |
| Bias:0.0 | ||
![]() |
- エッジが強調され、くっきりした印象ある。
値を大きくした場合
| 0.00 | -1.00 | 0.00 |
| -1.00 | 5.00 | -1.00 |
| 0.00 | -1.00 | 0.00 |
| Bias:0.0 | ||
![]() |
- 印刷物っぽい印象に。
さらに倍に
| 0.00 | -2.00 | 0.00 |
| -2.00 | 10.00 | -2.00 |
| 0.00 | -2.00 | 0.00 |
| Bias:0.0 | ||
![]() |
- イラストっぽい印象に。
さらに倍ぷっしゅ
| 0.00 | -4.00 | 0.00 |
| -4.00 | 20.00 | -4.00 |
| 0.00 | -4.00 | 0.00 |
| Bias:0.0 | ||
![]() |
- やりすぎた感ある...。
エンボス効果。 重みに傾きをつける。 合計は1.0
① ↑ 方向
| -1.00 | -2.00 | -1.00 |
| 0.00 | 1.00 | 0.00 |
| 1.00 | 2.00 | 1.00 |
| Bias:0.0 | ||
![]() |
② ↗ 方向
| 0.00 | -1.00 | -2.00 |
| 1.00 | 1.00 | -1.00 |
| 2.00 | 1.00 | 0.00 |
| Bias:0.0 | ||
![]() |
③ → 方向
| 1.00 | 0.00 | -1.00 |
| 2.00 | 1.00 | -2.00 |
| 1.00 | 0.00 | -1.00 |
| Bias:0.0 | ||
![]() |
④ ↘ 方向
| 2.00 | 1.00 | 0.00 |
| 1.00 | 1.00 | -1.00 |
| 0.00 | -1.00 | -2.00 |
| Bias:0.0 | ||
![]() |
⑤ ↓ 方向
| 1.00 | 2.00 | 1.00 |
| 0.00 | 1.00 | 0.00 |
| -1.00 | -2.00 | -1.00 |
| Bias:0.0 | ||
![]() |
⑥ ↙ 方向
| 0.00 | 1.00 | 2.00 |
| -1.00 | 1.00 | 1.00 |
| -2.00 | -1.00 | 0.00 |
| Bias:0.0 | ||
![]() |
⑦ ← 方向
| -1.00 | 0.00 | 1.00 |
| -2.00 | 1.00 | 2.00 |
| -1.00 | 0.00 | 1.00 |
| Bias:0.0 | ||
![]() |
⑧ ↖ 方向
| -2.00 | -1.00 | 0.00 |
| -1.00 | 1.00 | 1.00 |
| 0.00 | 1.00 | 2.00 |
| Bias:0.0 | ||
![]() |
- 向きで画像の印象がだいぶ変わる。
- 絵のタッチが変わったようにも見えなくもない。
- 画調変換ではこのあたりのフィルタが使われてるのかな。
エッジ抽出。 重み合計 0.0
- 重みの合計を 0.0 にすると、エッジ画像となる。
4近傍均等 合計は0.0
| 0.00 | -0.25 | 0.00 |
| -0.25 | 1.00 | -0.25 |
| 0.00 | -0.25 | 0.00 |
| Bias:0.0 | ||
![]() |
値を倍に
| 0.00 | -0.50 | 0.00 |
| -0.50 | 2.00 | -0.50 |
| 0.00 | -0.50 | 0.00 |
| Bias:0.0 | ||
![]() |
さらに倍に
| 0.00 | -1.00 | 0.00 |
| -1.00 | 4.00 | -1.00 |
| 0.00 | -1.00 | 0.00 |
| Bias:0.0 | ||
![]() |
- エッジ部分が明るくなる。
8近傍 合計は0.0
| -0.25 | -0.50 | -0.25 |
| -0.50 | 3.00 | -0.50 |
| -0.25 | -0.50 | -0.25 |
| Bias:0.0 | ||
![]() |
| -0.50 | -1.00 | -0.50 |
| -1.00 | 6.00 | -1.00 |
| -0.50 | -1.00 | -0.50 |
| Bias:0.0 | ||
![]() |
輪郭強調 中心と近傍1つ
① ↑
| 0.00 | -1.00 | 0.00 |
| 0.00 | 1.00 | 0.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:0.0 | ||
![]() |
② →
| 0.00 | 0.00 | 0.00 |
| 0.00 | 1.00 | -1.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:0.0 | ||
![]() |
③ ↓
| 0.00 | 0.00 | 0.00 |
| 0.00 | 1.00 | 0.00 |
| 0.00 | -1.00 | 0.00 |
| Bias:0.0 | ||
![]() |
④ ←
| 0.00 | 0.00 | 0.00 |
| -1.00 | 1.00 | 0.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:0.0 | ||
![]() |
重みに方向を持たせる ↑方向
| -0.20 | -0.20 | -0.20 |
| 0.00 | 0.00 | 0.00 |
| 0.20 | 0.20 | 0.20 |
| Bias:0.0 | ||
![]() |
重みの傾きを増した場合
| -1.00 | -1.00 | -1.00 |
| 0.00 | 0.00 | 0.00 |
| 1.00 | 1.00 | 1.00 |
| Bias:0.0 | ||
![]() |
傾きをさらに増した場合
| -2.00 | -2.00 | -2.00 |
| 0.00 | 0.00 | 0.00 |
| 2.00 | 2.00 | 2.00 |
| Bias:0.0 | ||
![]() |
- 傾きを増すにつれ、エッジの線も明るくなっていく。
傾きの方向を変える →
| 1.00 | 0.00 | -1.00 |
| 1.00 | 0.00 | -1.00 |
| 1.00 | 0.00 | -1.00 |
| Bias:0.0 | ||
![]() |
方向 ↓
| 1.00 | 1.00 | 1.00 |
| 0.00 | 0.00 | 0.00 |
| -1.00 | -1.00 | -1.00 |
| Bias:0.0 | ||
![]() |
方向 ←
| -1.00 | 0.00 | 1.00 |
| -1.00 | 0.00 | 1.00 |
| -1.00 | 0.00 | 1.00 |
| Bias:0.0 | ||
![]() |
ソーベル フィルタ (時計回り)
① ↑ 方向
| -1.00 | -2.00 | -1.00 |
| 0.00 | 0.00 | 0.00 |
| 1.00 | 2.00 | 1.00 |
| Bias:0.0 | ||
![]() |
② ↗ 方向
| 0.00 | -1.00 | -2.00 |
| 1.00 | 0.00 | -1.00 |
| 2.00 | 1.00 | 0.00 |
| Bias:0.0 |
③ → 方向
| 1.00 | 0.00 | -1.00 |
| 2.00 | 0.00 | -2.00 |
| 1.00 | 0.00 | -1.00 |
| Bias:0.0 | ||
![]() |
④ ↘ 方向
| 2.00 | 1.00 | 0.00 |
| 1.00 | 0.00 | -1.00 |
| 0.00 | -1.00 | -2.00 |
| Bias:0.0 | ||
![]() |
⑤ ↓ 方向
| 1.00 | 2.00 | 1.00 |
| 0.00 | 0.00 | 0.00 |
| -1.00 | -2.00 | -1.00 |
| Bias:0.0 | ||
![]() |
⑥ ↙ 方向
| 0.00 | 1.00 | 2.00 |
| -1.00 | 0.00 | 1.00 |
| -2.00 | -1.00 | 0.00 |
| Bias:0.0 | ||
![]() |
⑦ ← 方向
| -1.00 | 0.00 | 1.00 |
| -2.00 | 0.00 | 2.00 |
| -1.00 | 0.00 | 1.00 |
| Bias:0.0 | ||
![]() |
⑧ ↖ 方向
| -2.00 | -1.00 | 0.00 |
| -1.00 | 0.00 | 1.00 |
| 0.00 | 1.00 | 2.00 |
| Bias:0.0 | ||
![]() |
畳み込みフィルタ 重み値合計 -1.0 ネガポジ反転
| 0.00 | 0.00 | 0.00 |
| 0.00 | -1.00 | 0.00 |
| 0.00 | 0.00 | 0.00 |
| Bias:255.0 | ||
![]() |
- Bias を使うとネガポジ反転も可能
感想
- グレースケール画像 + 3x3フィルタ のシンプルな組み合わせでも、フィルタを通しての表現が幅広い事を体感した。
- フィルタを組み合わせ検出器をつくる作業は、機械に任せた方がいいと体感した。










































