回答編集履歴

3

fix

2016/10/27 00:54

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  n = img.astype(np.float_)
14
14
 
15
- # 各画素値に p = log(p + 1) * 256 / log(256) を適用
15
+ # 各画素値に p = log(p + 1) * 255/log(256) を適用
16
16
 
17
17
  n = np.log(n + 1.) * (255. / math.log(256))
18
18
 

2

fix

2016/10/27 00:54

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- グレイスケール画像に対して`np.log`を適用したタイミングで、結果`n`はfloat型データに自動変換されます。ただし定義上log(0)=‐∞となってしまうため、入力画素値0~255は+1して値域1~256に変換しておいた方がよいでしょう。このとき元のuint8型データのまま+1すると255は0になってしまうため、事前にfloat型に明示変換する必要があります。また対数をとると値域が小さく(log(1)〜log(256) つまり 0〜5.545...)なってしまうため、256/log(256)でスケーリングする必要があります。
5
+ グレイスケール画像に対して`np.log`を適用したタイミングで、結果`n`はfloat型データに自動変換されます。ただし定義上log(0)=‐∞となってしまうため、入力画素値0~255は+1して値域1~256に変換しておいた方がよいでしょう。このとき元のuint8型データのまま+1すると255は0になってしまうため、事前にfloat型に明示変換する必要があります。また対数をとると値域が小さく(log(1)〜log(256) つまり 0〜5.545...)なってしまうため、255/log(256)でスケーリングする必要があります。
6
6
 
7
7
 
8
8
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  # 各画素値に p = log(p + 1) * 256 / log(256) を適用
16
16
 
17
- n = np.log(n + 1.) * (256. / math.log(256))
17
+ n = np.log(n + 1.) * (255. / math.log(256))
18
18
 
19
19
  # OpenCVで扱える画像データ型(uint8)に変換
20
20
 

1

fix

2016/10/27 00:53

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -2,15 +2,19 @@
2
2
 
3
3
 
4
4
 
5
- グレイスケール画像に対して`np.log`を適用したタイミングで、結果`n`はfloat型データに変換されています。また対数をとると値域が小さく(log(1)〜log(256) つまり 0〜2.408...)なってしまうため、256/log(256)でスケーリングする必要があります。
5
+ グレイスケール画像に対して`np.log`を適用したタイミングで、結果`n`はfloat型データに自動変換されます。ただし定義上log(0)=‐∞となっしまうため、入力画素値0~255は+1して値域1~256に変換しておた方がよいでしょう。このとき元のuint8型データのま+1ると255は0になってしまうため、事前にfloat型に明示変換する必要があります。また対数をとると値域が小さく(log(1)〜log(256) つまり 0〜5.545...)なってしまうため、256/log(256)でスケーリングする必要があります。
6
6
 
7
7
 
8
8
 
9
9
  ```Python
10
10
 
11
+ # 明示的にfloat型に変換
12
+
13
+ n = img.astype(np.float_)
14
+
11
15
  # 各画素値に p = log(p + 1) * 256 / log(256) を適用
12
16
 
13
- n = np.log(img + 1) * (256. / math.log(256))
17
+ n = np.log(n + 1.) * (256. / math.log(256))
14
18
 
15
19
  # OpenCVで扱える画像データ型(uint8)に変換
16
20