在阅读了本网站上有关图像比较主题的许多相关帖子后,我想我会尝试在每个图像上实现 PCA,以查看图像是否“相似”,但我不确定如何从我的图像中获取数据 - 是否有一个 VB 函数可以用来将图像转换为字节数组或其他内容以便比较图像?或者比较两个图像的更简单的方法(应该是黑白的,但它们会被扫描,v.小图像)

非常感谢,贝基

有帮助吗?

解决方案

此外,这里是一个有用的文章:这个人采取了两个图像,相它们,然后创建的图形表示两者之间的差的第三图像。这似乎是一个很好的视觉描绘similiarity方式。

其他提示

要看看他们是否相同与否是很容易使用ROYGBIV的答案。要看到他们是多么相似相当复杂。如果这些扫描的文档他们真的永远不会是相同的。这可能是值得投资的第三方选项。我们使用的产品在我们的扫描过程中从 Accusoft 和的的TiS

这就是说,有几个潜在重复 问题

您可以使用的东西:

Public Class MyClass
    Shared  Sub Main(ByVal args() As String)
       Byte() mydata = File.ReadAllBytes("C:\MyFile.jpg")
    End Sub
End Class

所以,这就是我想出了。而不是单独的像素比较,我用从该文件的内容馈送的哈希算法。然后,它返回的哈希值的单个字节进行比较。在我的测试,它回来快两倍的各个像素的灰度位图图像进行比较1152 X 720和101KB大。

下面的代码:

(编辑,因为我第一次发布的代码一切都显得陌生。删除评论)

Public Shared Function CompareTwoImageHashes(ByVal pathToFirstImage As String, ByVal pathToSecondImage As String) As Boolean

    Dim firstImage As FileInfo = New FileInfo(pathToFirstImage)
    Dim secondImage As FileInfo = New FileInfo(pathToSecondImage)

    If Not firstImage.Exists Then
        Throw New ArgumentNullException("pathToFirstImage", "The file referenced by the path does not exist!")
    End If

    If Not secondImage.Exists Then
        Throw New ArgumentNullException("pathToSecondImage", "The file referenced by the path does not exist!")
    End If

    Dim hashingTool As SHA256Managed
    Dim imagesMatch As Boolean = True

    Try

        Using firstImageStream As New FileStream(firstImage.FullName, FileMode.Open)
            Using secondImageStream As New FileStream(secondImage.FullName, FileMode.Open)

                hashingTool = SHA256Managed.Create()

                Dim imageOneHash As Byte() = hashingTool.ComputeHash(firstImageStream)
                Dim imageTwoHash As Byte() = hashingTool.ComputeHash(secondImageStream)

                hashingTool.Clear()

                If (imageOneHash.Length = imageTwoHash.Length) Then

                    For length As Integer = 0 To (imageOneHash.Length - 1)

                        If imageOneHash(length) <> imageTwoHash(length) Then
                            imagesMatch = False

                            Exit For
                        End If

                    Next

                    CompareTwoImageHashes = imagesMatch
                Else
                    CompareTwoImageHashes = False
                End If

            End Using
        End Using

    Catch ex As Exception

        Console.WriteLine("Error during compare: {0}", ex.Message)

    End Try

End Function

用于检索图像的像素数据;你可以使用 位图.GetPixel 或者 位图.LockBits, ,这会给你一个 BitmapData(链接有示例代码) 类作为回报。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top