質問

このサイトの画像比較に関する多くの関連記事を読んだ後、画像が「似ている」かどうかを確認するために各画像に PCA を実装してみようと考えていますが、その方法がわかりません。画像からデータを取得します - 画像を比較するために画像をバイトの配列などに変換するために使用できる VB 関数はありますか?または、2 つの画像を比較する簡単な方法 (白黒である必要がありますが、スキャンされます。v.小さい画像)

どうもありがとう、ベッキー

役に立ちましたか?

解決

また、ここで有用な製品である:この男は2枚の画像を取ったが、比較それらは、その後、グラフィカル両者の差を表した第三の画像を作成しました。 similiarityを描写するために素敵なの視覚的な方法であることが表示されます。

他のヒント

roygbivの回答を使用すると、それらが同一であるかどうかを確認するのは非常に簡単です。どれくらい似ているかを見るには かなり複雑. 。これらがスキャンされた文書である場合、実際には同一になることはありません。サードパーティのオプションに投資する価値があるかもしれません。スキャンプロセスでは以下の製品を使用しています。 アキュソフト そして TiS.

そうは言っても、いくつかの可能性があります 重複 質問.

あなたは何かを使用することができます:

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

ですから、これは私が思い付いたものです。個々のピクセルを比較するのではなく、私は、ファイルの内容から供給されたハッシュアルゴリズムを使用します。その後、返されたハッシュの個々のバイトを比較します。私のテストでは、グレースケールビットマップ画像のための個々のピクセルを比較するの2倍の速さで戻ってきた1152 X 720および101キロバイトビッグます。

ここでは、コードです。

タグ(編集私は、コードのすべてが奇妙に見えました。削除されたコメントを。はじめてため)
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 または ビットマップ.ロックビット, 、これにより、 BitmapData (リンクにはコード例があります) お返しのクラス。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top