エッジは明るさが急に変わる場所
エッジとは、画像の中で、明るさが急に変わる場所です。エッジを見つけると、物の輪郭や、道路の白線のような形を取り出せます。
車の車線を読むカメラは、暗い路面から白線へ変わる所を探します。その変わり方の大きさを、数で測るのが勾配です。
このレッスンのゴール
メモ
隣のピクセルとの差からエッジの強さを求め、エッジを数えられる。
キーワード
| ことば | いみ |
|---|---|
| エッジ | 明るさが急に変わる場所 |
| 勾配 | 隣のピクセルとの、明るさの差 |
| エッジの強さ | 左右の差と上下の差を合わせた大きさ |
| 輪郭 | 物の形を囲む、エッジのつながり |
| エッジマップ | エッジが 1、それ以外が 0 の格子 |
| キャニー法 | ぼかしてからエッジを細く取り出す方法 |
学生が入力するセルは、このプレビューでは空白です。
右と左の差が横の変化を表す
あるピクセルの、右の値から左の値を引くと、横の変化が分かります。下の値から上の値を引くと、縦の変化が分かります。
エッジの強さは、この2つの差の、絶対値を足した数です。絶対値は、マイナスを取った大きさです。
例: 角にあるピクセルの強さ
| 方向 | 引く値 | 計算 | 差 |
|---|---|---|---|
| 横 | 右 200、左 10 | 200 - 10 | 190 |
| 縦 | 下 10、上 200 | 10 - 200 | -190 |
| 強さ | 絶対値の和 | 190 + 190 | 380 |
学生が入力するセルは、このプレビューでは空白です。
表の強さを求める
docker exec jupyter python3 -c "print(abs(200 - 10) + abs(10 - 200))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
強さがしきい値以上なら、エッジとする
強さをしきい値と比べると、エッジの格子ができます。しきい値以上なら 1、それより小さければ 0 にします。
その格子が、エッジマップです。1 の数を数えれば、エッジのピクセルがいくつあるかが分かります。
例: 強さの格子をしきい値 100 で分ける
| 行 | 強さ | エッジマップ |
|---|---|---|
| 1行目 | 0 190 190 0 | 0 1 1 0 |
| 2行目 | 0 190 380 190 | 0 1 1 1 |
| 3行目 | 0 0 190 190 | 0 0 1 1 |
学生が入力するセルは、このプレビューでは空白です。
ラボの本物の道具でエッジを数える
ここまでの計算は、仕組みを学ぶための簡単な方法です。ラボでは scikit-image の canny を使います。先にぼかし、強さを求め、細い線だけを残します。
出力は英語です。picture pixels は画像のピクセルの数、edge pixels はエッジのピクセルの数です。
図形の画像のエッジを数える
docker exec jupyter python3 steps/edges.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
エッジは画像のほんの一部
図形の画像は 60000 ピクセルで、エッジは 1326 ピクセルです。次のコマンドで、割合を求めます。
スクリプトは、shapes_edges.png も保存します。JupyterLab で開くと、図形の輪郭だけが白い線で残っています。
エッジの割合を求める
docker exec jupyter python3 -c "print(round(1326 / 60000 * 100, 1))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
1つのピクセルの強さを求める
picture = [[10, 10, 200, 200], [10, 10, 200, 200], [10, 10, 200, 200]]
row = 1
column = 1
across = picture[row][column + 1] - picture[row][column - 1]
down = picture[row + 1][column] - picture[row - 1][column]
print("左右の差:", across)
print("上下の差:", down)
print("エッジの強さ:", abs(across) + abs(down))
# picture の 1 行目の2つ目の 10 を 200 に変えて、もう一度実行します。
# 上下の差と、エッジの強さは、どうなりますか。
よくある間違い
注意
ノイズの多い画像でも、そのままエッジを探せると考えがちです。小さな点も明るさが急に変わるので、エッジに数えられます。先にぼかしてから探します。