문제

이미지 비교 주제에 대해이 사이트의 많은 관련 게시물을 읽은 후 이미지가 '유사한'것인지 아닌지 확인하기 위해 각 이미지에서 PCA를 구현 해 보겠습니다. 내 이미지에서 데이터를 가져 오십시오 - 이미지를 이미지를 비교하기 위해 이미지를 바이트 등으로 변환하는 데 사용할 수있는 VB 기능이 있습니까? 또는 두 개의 이미지를 비교하는 간단한 방법 (검은 색과 흰색이어야하지만 스캔해야합니다. v. 작은 이미지).

대단히 감사합니다, 베키

도움이 되었습니까?

해결책

또한, 다음은 유용한 기사입니다:이 사람은 두 개의 이미지를 가져 와서 비교 한 다음 두 이미지를 만들었습니다. 그것은 좋은 것 같습니다 동시성을 묘사하는 시각적 방법.

다른 팁

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 Big의 개별 픽셀을 비교하는 것보다 두 배 빠르게 돌아 왔습니다.

코드는 다음과 같습니다.

(코드를 처음 게시했을 때 모든 것이 이상하게 보였기 때문에 편집. 주석을 제거했습니다.)

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

이미지의 픽셀 데이터를 검색하기 위해; 당신은 사용할 수 있습니다 bitmap.getPixel 또는 bitmap.lockbits, 당신에게 줄 것입니다 BitMapData (링크 예제 코드가 있습니다) 대가로 수업.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top