jz5 #1933(2007/08/06 12:02 GMT) [ VB.net ] Rating0/0=0.00
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
Rating0/0=0.00-0+
[ reply ]
jz5
#1933()
[
VB.net
]
Rating0/0=0.00
Rating0/0=0.00-0+
[ reply ]