回答編集履歴

1

refine

2017/08/29 04:42

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -6,13 +6,11 @@
6
6
 
7
7
 
8
8
 
9
-
10
-
11
9
  一方の[`phash`](https://github.com/JohannesBuchner/imagehash/blob/master/imagehash/__init__.py#L157)では、離散コサイン変換(DCT)によって得られる係数値の中央値(`median`)を基準値として用います。
12
10
 
13
11
 
14
12
 
15
- DCTを理解している前提での説明:ガンマ補正やヒストグラム補正といった全体的なピクセル値操作では、画像データが持つ空間的な構造/情報は維持されるため、DCT係数の大部分を占めるAC係数の分布はあまり変化しません。(※:詳細後述しますが、このPython実装には問題があるように思えます)
13
+ DCTを理解している前提での説明:ガンマ補正やヒストグラム補正といった全体的なピクセル値操作をおこなっても、画像データが持つ空間的な構造/情報は維持されるため、DCT係数の大部分を占めるAC係数の分布はあまり変化しません。(※:詳細後述しますが、このPython実装には問題があるように思えます)
16
14
 
17
15
 
18
16
 
@@ -28,7 +26,7 @@
28
26
 
29
27
 
30
28
 
31
- ドキュメントの誤読です。DCT処理にとって好都合というわけではなく、32x32DCT係数のうち8x8だけを拾ってくると、画像の低周波情報=おおまかな空間構造をバランスよく捉えられると言っています。なおDCTの計算都合だけでいえば、2のベキ乗ならばOKです。
29
+ ドキュメントの誤読です。DCT処理にとって好都合というわけではなく、32x32DCT係数のうち低周波数側8x8個の係数だけを拾ってくると、画像の低周波情報=おおまかな空間構造をバランスよく捉えられると言っています。なおDCTの計算都合だけでいえば、2のベキ乗ならばOKです。
32
30
 
33
31
 
34
32
 
@@ -46,4 +44,4 @@
46
44
 
47
45
 
48
46
 
49
- オリジナルのpHash実装では、2次元DCT係数の **第1行目および第1列目をすべて除去** しているようです。一方、Python imagehashの`phash`ではこの処理を **全く適用して** おらず、DC係数む係数を用いてハッシュ計算を行なっています。本来のアルゴリズム意図からすれば、imagehash実装が誤っているようにも思えます。
47
+ オリジナルのpHash実装では、2次元DCT係数の **第1行目および第1列目をすべて除去** しているようです。一方、Python imagehashの`phash`ではこの処理を **全く適用しておらず**、DC係数てハッシュ計算を行なっています。本来のアルゴリズム意図からすれば、imagehash実装が誤っているようにも思えます。