回答編集履歴
1
refine
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を理解している前提での説明:ガンマ補正やヒストグラム補正といった全体的なピクセル値操作
|
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
|
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`ではこの処理を **全く適用して
|
47
|
+
オリジナルのpHash実装では、2次元DCT係数の **第1行目および第1列目をすべて除去** しているようです。一方、Python imagehashの`phash`ではこの処理を **全く適用しておらず**、DC係数も含めてハッシュ計算を行なっています。本来のアルゴリズム意図からすれば、imagehash実装が誤っているようにも思えます。
|