Comment detail

モノクロ画像の類似検索 (Nested Flatten)
BitArrayを使ってます。それゆえ、全く同じ形式・ファイルサイズの場合のみ動き、
ヘッダ情報は一緒ということにしてファイル全部をXORしてます。
XOR後、立っているビットを数えている部分が非常にスマートではないね……。

「類似度を判定するコード」の方が良かったと結論でているので言うのもなんですが、
「一番その画像に似ている画像を見つけるコード」の場合、
探索の最初に似ている画像が見つかれば、それ以降の探索時間を短くできるので、
検証に使用する画像がないと時間の比較しようがないですね。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Function GetMostSimilarImage(ByVal source As String, ByVal target() As String) As String

    Dim ba1 As New BitArray(System.IO.File.ReadAllBytes(source))

    Dim min As Integer = Integer.MaxValue
    Dim diff As Integer
    Dim mostSimilar As String = ""

    Dim i, j As Integer

    For i = 0 To target.Length - 1

        Dim ba2 As New BitArray(System.IO.File.ReadAllBytes(target(i)))
        ba2.Xor(ba1)

        diff = 0
        For j = 0 To ba2.Length - 1
            If Not ba2(j) Then
                Continue For
            End If

            diff += 1
            If diff > min Then
                Exit For
            End If
        Next

        If diff < min Then
            min = diff
            mostSimilar = target(i)
        End If

    Next

    Return mostSimilar

End Function

Index

Feed

Other

Link

Pathtraq

loading...