Open4
画像の同一判定を色々試す
cv::img_hash
の色々で試す
ahash とか phash とか。
試した感じ、32×32pxとかに縮小してハッシュ化する関係からか、細かい差異は無視されているっぽい。
適当にドットとか線を書き加えても同一ハッシュになる。
試してないけど、連写したものとかも同一判定されそう。
それだとちょっと困る。
普通にハッシュを利用する
適当にハッシュ化する。
ハッシュが衝突すると同一判定に支障が出るとは言え、MD5でも衝突せんでしょ…知らんけど。
SHA-256、SHA-512とかならもっと衝突しなさそう。
適当にハッシュ化するにも2パターンほど考えられる。
- 画像ファイルのバイナリを丸ごとハッシュ化
- rust で試してみたが、ファイル名、作成日などのメタデータが違っても同一と見なされた
- 考えることがないので楽
- 拡張子違いには対応できない
- 画像ファイルを読み込んで、画素値をハッシュ化
- メタデータが違っても大丈夫そう(たぶん)
- 拡張子(ファイルタイプ)が違っても画素値を見てるので対応できるはず
- とは言え、ファイルタイプが異なってたら途中で圧縮とか挟まって画素値も変わってそう
普通にハッシュ化することの最大のデメリットはハッシュアルゴリズムの雪崩効果。
これにより類似画像の判定はほぼできない。
同一判定だけなら普通にハッシュを使うのが良さそうか。
類似判定なら……xhashも厳しそうだしNNとか使ったほうがいいんじゃないでしょうか……
xhashは処理の中で画像に縮小かけてるけど、元画像が縮小サイズよりも小さい場合はどうするんだろうか。