vb查找相似图片
有一张图片a,同时有一个图片库B,图片库中图片都只有图片的一部分如何实现从图片库中找出与图片a相似图形?
详情见下图:
http://hiphotos.zhaoxi.net/%CD%E6%C0%E9%B0%CA%B5%C4%C3%A8/pic/item/9994e710e6fd20e4c2ce794c.jpg
自己想的办法是:
先取得图片A所有的颜色点,同时图片库中也转换成颜色点,然后比较,如果可以,应该怎么弄?
答案:具体应该用到模糊判别。是一个比较专业的问题,你在这里提出应该没有人能回答你。
应用图像聚类.我们知道,彩色图像的数据可以看成一M*N*3的数组,但是一方面三维数组的处理速度要低于一维或二维数组,因此,用二维数组来描述要分割的对象不仅意义明显而且有利于计算速度的提高。图像数据在内存中的排列方式是BGRABRGABGRA.......(32位的),这样,通过API函数直接读取的数据一般为一(1 to 4,1 to M*N)数组,
如果想快速判别两个图片是否相同,可用如下方法:
Public Enum CompareResult
ciCompareOk
ciPixelMismatch
ciSizeMismatch
End Enum
Public Shared Function Compare(ByVal bmp1 As Bitmap, ByVal bmp2 As Bitmap) As CompareResult
'首先检查两副图片大小是否完全相等
If Not bmp1.Size.Equals(bmp2.Size) Then
Return CompareResult.ciSizeMismatch
Else
'把每个图片转成一字节数组
Dim ic As New System.Drawing.ImageConverter
Dim btImage1(1) As Byte
btImage1 = CType(ic.ConvertTo(bmp1, btImage1.GetType()), Byte())
Dim btImage2(1) As Byte
btImage2 = CType(ic.ConvertTo(bmp2, btImage2.GetType()), Byte())
Debug.WriteLine(UBound(btImage1))
'计算每个图片的hash值
Dim shaM As New SHA256Managed
Dim hash1 As Byte() = shaM.ComputeHash(btImage1)
Dim hash2 As Byte() = shaM.ComputeHash(btImage2)
'比较hash值
Dim i As Integer
For i = 0 To Math.Min(hash1.Length, hash2.Length) - 1
If hash1(i) <> hash2(i) Then
Return CompareResult.ciPixelMismatch
End If
Next
End If
Return CompareResult.ciCompareOk
End Function
当然这种方法存在缺陷,实际情况下,很多图片都经过JPEG等有损压缩,即使是同一张图片用不同的压缩参数得到的结果hash结果也完全不同。这种办法还是有一定限制的