图片相似度的判断解决方法

图片相似度的判断小弟做一个视频处理软件,使用摄像头采集视频图像,定时截取视频画面,前后两次对比图像,判

图片相似度的判断
小弟做一个视频处理软件,使用摄像头采集视频图像,定时截取视频画面,前后两次对比图像,判断是否有变化。具体的做法是:
1、编写视频采集程序,实现视频图像采集,这点我已实现。
2、定时截取视频画面,我使用BitBlt实现了
3、对比两副图片的变化,现在没有好的办法,所以特请各位高手门帮帮忙,拜谢!!!


简单的说就是如何判断两副图片是否一样,简单高效些的。

[解决办法]
相似度是人工智能的问题
价值不菲
[解决办法]
我也曾做类似的问题,当时也是采用的自定义阀值 然后二值化图片,进行判断。后来发现,直接两幅图片进行比较,很容易,但是如果是视频截图的话,就会麻烦:一般情况下,你的视频截图都会有雪花点(噪点)出现,这个是不固定的,也就是说,两幅图片即使一模一样,但是由于噪点的影响,用上边我说的方法也可能会误判。高深的方法的话,肯定是要牵扯到人工智能、模糊判断方面的东西。估计一般情况下难实现。目前我还没有什么好的办法。
[解决办法]

探讨颜色偏差不大,我就认为OK,问题就在于怎么比较颜色相似?

[解决办法]
这个很难比较,如从哪个点开始相象时比较,确实需要更好的算法.下面给个理想状态下的比较供参考
Picture1和Picture2分别加载图象供比较
VB code
    Dim n As Long, k As Single, b As Long    b = 100 '不必每个点都比较,跳着选取    For y = 0 To Picture1.ScaleHeight - 1        For x = 0 To Picture1.ScaleWidth - 1 Step b            '颜色接近,误差正负5            If Abs(Picture1.Point(x, y) - Picture2.Point(x, y)) < 5 then                  n = n + 1                k = Round(n / (Picture1.ScaleHeight * Picture1.ScaleWidth), 4)                If k >= 0.1 / b Then                    Label1.Caption = "颜色相似度:" & Round(k * 100 * b, 2) & "%"                    DoEvents                End If            End If                    Next x    Next y    MsgBox "比较完成,颜色相似度:" & Round(k * 100 * b, 2) & "%"
[解决办法]
VB code
Private Sub tmrP_Timer()    Dim lngP As Long    Dim bytOneRed As Integer    Dim bytOneGreen As Integer    Dim bytOneBlue As Integer    Dim bytTwoRed As Integer    Dim bytTwoGreen As Integer    Dim bytTwoBlue As Integer    Dim bolP As Boolean    dim lngW as long     dim lngH as long On Error GoTo errSub    'picS:源图像    'picOne:第一副截图     'picTwo:第二副截图     lngW=picS.Width    lngH=picS.Height    lngP = BitBlt(picTwo.hdc, 0, 0, lngW, lngH, picOne.hdc, 0, 0, SRCCOPY)    lngP = BitBlt(picOne.hdc, 0, 0, lngW, lngH, picS.hdc, 0, 0, SRCCOPY)    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            lngP = GetPixel(picOne.hdc, 50, 50)    txtColorOne.Text = lngP    bytOneRed = lngP Mod &H100    bytOneGreen = (lngP \ &H100) Mod &H100    bytOneBlue = lngP \ &H10000    lngP = GetPixel(picTwo.hdc, 50, 50)    txtColorTwo.Text = lngP    bytTwoRed = lngP Mod &H100    bytTwoGreen = (lngP \ &H100) Mod &H100    bytTwoBlue = lngP \ &H10000    txtRed.Text = Abs(bytOneRed - bytTwoRed)    txtGreen.Text = Abs(bytOneGreen - bytTwoGreen)    txtBlue.Text = Abs(bytOneRed - bytTwoRed)    If Abs(bytOneRed - bytTwoRed) < 10 And Abs(bytOneGreen - bytTwoGreen) < 10 And Abs(bytOneBlue - bytTwoBlue) < 10 Then         Me.Caption = "图像相似"    else         Me.Caption = "图像不相似"    End If    Exit SuberrSub:End Sub