Frage

Nach vielen verwandten Beiträgen auf dieser Website zum Thema Bildvergleich zu lesen Ich denke, ich werde versuchen, auf jedes Bild einen PCA Implementierung, um zu sehen, ob ein Bild ‚ähnlich‘ ist oder nicht, aber ich bin nicht sicher, wie die Daten aus meinen Bildern zu erhalten - ist es eine VB-Funktion, die ich verwenden kann, um das Bild in ein Array von Bytes oder etwas, um Bilder zu vergleichen, um zu konvertieren? Oder ein einfacher Weg, um zwei Bilder zu vergleichen (sollte schwarz und weiß sein, aber sie werden gescannt werden, v. Kleine Bilder)

Vielen Dank, Becky

War es hilfreich?

Lösung

Auch hier ist ein nützlicher Artikel : dieser Kerl nahm zwei Bilder, verglichen sie erstellt dann ein drittes Bild, das graphisch die Differenz zwischen den beiden repräsentiert. Es scheint eine nette visuelle Art und Weise zu sein similiarity darzustellen.

Andere Tipps

Um zu sehen, ob sie sind identisch oder nicht ganz einfach ist, roygbiv Antwort verwenden. Um zu sehen, wie ähnlich sie sind, ist ziemlich kompliziert . Wenn diese Dokumente gescannt werden sie wirklich nie identisch sein werden. Es kann sich lohnen, in einem Dritten Option zu investieren. Wir verwenden Produkte in unserem Scan-Prozess von Accusoft und TiS .

Das heißt, es gibt ein paar potenzielle doppelte Fragen .

Sie können etwas verwenden:

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

Also, das ist, was ich kam mit. Anstatt die Pixel einzeln zu vergleichen, habe ich einen Hashing-Algorithmus aus dem Inhalt der Datei eingespeist. Es vergleicht dann die einzelnen Bytes des zurück Hash. In meinen Tests kam es doppelt so schnell zurück, um die einzelnen Pixel als Vergleich für eine Grauskala-Bitmap-Bild 1152 X 720 und 101KB groß.

Hier ist der Code:

(Bearbeitung, da das erste Mal, dass ich den Code alles geschrieben sah seltsam aus. Entfernt Kommentare.)

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

Für die Pixeldaten eines Bildes abrufen; Sie können entweder Bitmap.GetPixel oder Bitmap.LockBits , die Sie geben ein BitmapData- (Link hat Beispielcode) Klasse zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top