문제

한 응용 프로그램(웹 페이지일 수 있음)의 스크린샷을 이전에 찍은 스크린샷과 비교하여 응용 프로그램이 올바르게 표시되는지 확인하고 싶습니다.측면이 약간 다를 수 있기 때문에 정확한 일치 비교를 원하지 않습니다(웹 앱의 경우 브라우저에 따라 일부 요소가 약간 다른 위치에 있을 수 있음).스크린샷이 얼마나 유사한지 측정할 수 있어야 합니다.

이미 그렇게 하는 라이브러리/도구가 있나요?어떻게 구현하시겠습니까?

도움이 되었습니까?

해결책

알고리즘이 얼마나 똑똑하길 원하는지에 따라 다릅니다.

예를 들어 다음은 몇 가지 문제입니다.

  • 잘린 이미지와 잘리지 않은 이미지
  • 텍스트가 추가 된 이미지와없는 이미지
  • 미러링 된 이미지

    내가 본 가장 쉽고 간단한 알고리즘 은 각 이미지에 대해 다음 단계를 수행하는 것입니다.

    1. 64x64 또는 32x32와 같이 작은 크기로 조정하고 가로 세로 비율을 무시하고 가장 가까운 픽셀 대신 결합 크기 조정 알고리즘을 사용합니다.
    2. 가장 어두운 부분이 검은 색이고 가장 밝은 부분이 흰색이되도록 색상 범위를 조정합니다.
    3. 가장 밝은 색상이 왼쪽 상단이되고 오른쪽 상단이 다음 어두워지고 왼쪽 하단이 다음 어두워 지도록 이미지를 회전하고 뒤집습니다 (물론 가능한 한)

      편집 결합 배율 알고리즘 은 10 픽셀을 1로 축소 할 때 모든 10 픽셀의 색상을 가져와 결합하는 함수를 사용하여 수행하는 알고리즘입니다. 하나로. 평균화, 평균값과 같은 알고리즘 또는 쌍 입방 스플라인과 같은 더 복잡한 알고리즘으로 수행 할 수 있습니다.

      그런 다음 두 이미지 간의 평균 거리를 픽셀 단위로 계산합니다.

      데이터베이스에서 가능한 일치 항목을 찾으려면 픽셀 색상을 데이터베이스의 개별 열로 저장하고 여러 개의 열을 색인화하고 (매우 작은 이미지를 사용하지 않는 한 전부는 아님) 다음을 사용하는 쿼리를 수행하십시오. 각 픽셀 값에 대한 범위, 즉. 작은 이미지의 픽셀이 조회하려는 이미지의 -5에서 +5 사이 인 모든 이미지

      이는 구현하기 쉽고 실행이 상당히 빠르지 만 물론 대부분의 고급 차이점을 처리하지는 않습니다. 이를 위해서는 훨씬 더 고급 알고리즘이 필요합니다.

다른 팁

이를 측정하는 '고전적인'방법은 이미지를 몇 개의 표준 섹션 수 (예 : 10x10 그리드)로 분할 한 다음 각 셀 내부의 RGB 값의 히스토그램을 계산하고 해당 히스토그램을 비교하는 것입니다.이러한 유형의 알고리즘은 단순성과 확장 및 (작은!) 번역에 불변하기 때문에 선호됩니다.

정규화 된 컬러 히스토그램을 사용합니다. ( 여기 에서 애플리케이션에 대한 섹션을 읽으십시오), 이들은 일반적으로 이미지 검색 / 일치 시스템에서 사용되며 매우 신뢰할 수 있고 상대적으로 빠르고 구현하기 쉬운 이미지를 일치시키는 표준 방법입니다.

본질적으로 색상 히스토그램은 이미지의 색상 분포를 캡처합니다. 그런 다음 다른 이미지와 비교하여 색상 분포가 일치하는지 확인할 수 있습니다.

이 유형의 일치는 크기 조정 (히스토그램이 정규화되면) 및 회전 / 이동 / 이동 등에 매우 유연합니다.

이미지가 약간 회전 / 이동되는 것처럼 픽셀 단위 비교를 피하면보고되는 큰 차이로 이어질 수 있습니다.

히스토그램은 직접 생성하는 것이 쉽지만 (픽셀 값에 액세스 할 수 있다고 가정), 마음에 들지 않으면 OpenCV 라이브러리는 이런 종류의 작업을 수행 할 수있는 훌륭한 리소스입니다. 여기 는 다음을 사용하여 히스토그램을 만드는 방법을 보여주는 파워 포인트 프레젠테이션입니다. OpenCV.

MPEG와 같은 비디오 인코딩 알고리즘은 델타 만 인코딩 할 수 있도록 비디오의 각 프레임 간의 차이를 계산하지 않습니까?비디오 인코딩 알고리즘이 이러한 프레임 차이를 계산하는 방법을 살펴볼 수 있습니다.

이 오픈 소스 이미지 검색 애플리케이션을 살펴보십시오. http://www.semanticmetadata.net/lire/.MPEG-7 표준 인 ScalableColor, ColorLayout, EdgeHistogram 및 Auto Color Correlogram의 몇 가지 이미지 유사성 알고리즘을 설명합니다.

다음과 같은 순수한 수학적 접근 방식을 사용할 수 있습니다. O(n^2), 그러나 오프셋이나 이와 유사한 것이 없다고 확신하는 경우에만 유용할 것입니다.(동질적인 색상을 가진 개체가 몇 개 있는 경우에도 여전히 잘 작동합니다.)

어쨌든, 아이디어는 두 행렬의 정규화된 내적을 계산하는 것입니다.C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2)).

이 공식은 실제로 행렬 사이 각도의 "코사인"입니다(이상함).유사성이 클수록(예를 들어 Pij=Qij), C는 1이 될 것이며, 완전히 다르다면 i,j Qij = 1 (0분할 방지), Pij = 255, 다음으로 크기 nxn, 더 큰 것 n 0에 가까울수록 우리는 얻게 될 것입니다.(대략적인 계산으로: C=1/n^2).

이를 위해서는 패턴 인식 이 필요합니다.두 이미지 간의 작은 차이를 확인하기 위해 Hopfield net 이 상당히 잘 작동하고 구현하기가 매우 쉽습니다.그래도 사용 가능한 구현이 없습니다.

루비 솔루션은 여기 에서 찾을 수 있습니다.

Readme에서 :

Phashion은 중복 및 거의 중복 된 멀티미디어 파일을 감지하는 pHash 라이브러리 "지각 해시"를 둘러싼 Ruby 래퍼입니다.

두 이미지 간의 유사성을 측정하는 방법은 측정하려는 항목 (예 : 대비, 밝기, 양식, 노이즈 ...)에 따라 전적으로 달라진 다음 가장 적합한 유사성 측정을 선택합니다.밝기 측정에 적합한 MAD (평균 절대 차이), MSD (평균 제곱 차이) 중에서 선택할 수 있습니다. CR (상관 계수)는 두 이미지 간의 상관 관계를 나타내는 데 좋습니다.또한 SDH (차이 이미지 히스토그램의 표준 편차)와 같은 히스토그램 기반 유사성 측정이나 MI (상호 정보) 또는 NMI (정규화 된 상호 정보).

이 유사성 측정은 시간이 많이 걸리기 때문에 이러한 측정을 적용하기 전에 이미지를 축소하는 것이 좋습니다.

한 이미지에서 다른 이미지를 빼고 결과 이미지를 gif의 jpeg로 압축하고유사성의 척도로 파일 크기.

두 개의 동일한 이미지가있는 경우 흰색 상자가 표시되어 매우 잘 압축됩니다.이미지가 다를수록 표현이 더 복잡해 지므로 압축률이 낮아집니다.

아마 이상적인 테스트는 아니고 필요한 것보다 훨씬 느리지 만 빠르고 더러운 구현으로 작동 할 수 있습니다.

오픈 소스 도구 findimagedupes 에 대한 코드가 표시되지만 볼 수 있습니다.Perl로 작성 되었기 때문에 파싱이 얼마나 쉬운 지 말할 수 없습니다 ...

좋아했던 findimagedupes 페이지를 읽으면서 C ++ 구현이동일한 알고리즘 .아마도 이것은 이해하기 더 쉬울 것입니다.

또한 gqview 를 사용할 수도 있습니다.

글쎄요, 질문에 직접 답하기는 아니지만 이런 일이 발생하는 것을 보았습니다.Microsoft는 최근에 PhotoSynth 라는 도구를 출시했습니다.가로 세로 비율이 다를 수 있습니다.

블로그에 사용 가능한 라이브러리 나 코드 스 니펫이 있는지 궁금합니다.

Vaibhav의 메모를 확장하기 위해 hugin 은 약간의 통찰력이 있어야하는 오픈 소스 'autostitcher'입니다.문제에 대해.

콘텐츠 기반 이미지 검색을위한 소프트웨어가있어 필요한 작업을 (부분적으로) 수행합니다.모든 참조 및 설명은 프로젝트 사이트에서 링크되며 짧은 교과서 (Kindle)도 있습니다. LIRE

실제로 기본 수준의 방법을 사용하면 모든 픽셀 색상을 살펴보고 두 번째 이미지의 해당 픽셀 색상과 비교할 수 있습니다.하지만 이는 아마도 매우 매우 느린 솔루션 일 것입니다. p>

이 작업이 가끔씩 수행되고 자동화가 필요하지 않은 경우 Photoshop 또는 Paint Shop Pro와 같은 레이어를 지원하는 이미지 편집기에서 수행 할 수 있습니다 (아마도 김프 또는 Paint.Net,그러나 나는 그것에 대해 잘 모르겠습니다).두 스크린 샷을 모두 열고 하나를 다른 하나 위에 레이어로 놓습니다.레이어 혼합 모드를 차이로 변경하면 둘 사이에 동일한 모든 것이 검은 색이됩니다.정렬 차이를 최소화하기 위해 상단 레이어를 이동할 수 있습니다.

Siamese Network를 사용하여 자습서 .이 자습서에서는 유사한 이미지를 클러스터링하지만 L2 거리를 사용하여 두 이미지의 유사성을 측정 할 수 있습니다.

비욘드 비교 는 이미지를 픽셀 단위로 비교합니다. 예 :

여기에 이미지 설명 입력

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