거의 중복 된 이미지 감지 [닫힘]


93

서로 유사성을 기준으로 주어진 이미지 세트를 정렬하는 빠른 방법은 무엇입니까?

현재 두 이미지 간의 히스토그램 분석을 수행하는 시스템이 있지만 이것은 매우 비용이 많이 드는 작업이며 너무 과도하게 보입니다.

최적으로 각 이미지에 점수 (예 : RGB 평균과 같은 정수 점수)를 부여하는 알고리즘을 찾고 있으며 해당 점수로 정렬 할 수 있습니다. 동일한 점수 또는 서로 인접한 점수는 중복 가능성이 있습니다.

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994 

이미지 당 RGB 평균이 좋지 않습니다. 비슷한 것이 있습니까?


5
작성한 내용과 Naaff가 지적한 관련 질문에 대한 답변에 대해 생각하는 핵심 질문으로 "유사성"이 무엇을 의미하는지 더 명확하게 정의 할 수 있습니다. 동일하지만 오프셋이 5 픽셀 인 이미지가 "유사"할까요? 시각적으로 예 ...하지만 알고리즘에 대해서는 ... 아마도 당신이 그것을 생각하고 설명하지 않는 한 아닐 것입니다. 더 자세한 정보를 제공 할 수 있습니까? 중복이 정확합니까, 아니면 "가까운"것입니까? 약간의 각도 측정이 다를 수있는 스캔을보고 있습니까? 강도는 어떻습니까? 여기에 많은 변수가 있습니다 ...
Beska 2009-06-23

'중복'은 어떻게 다릅니 까? 예 : 동일한 위치의 다른 포즈 / 시프트 이미지일까요? 이미지 수와 함께 O (nlog (n))를 원하는 것 같습니다. 이것이 가능한지 아는 사람이 있습니까? 그것은있을 수 있습니다 것처럼 .. 보인다
저스틴 Scheiner에게

@The Unknown : 현재 답변이 만족스럽지 않다면 좀 더 안내해 주시겠습니까? 귀하의 질문에 답하기 위해 최선을 다했지만 피드백이 없으면 더 나은 결과를 얻을 수 없습니다.
Naaff 2009-06-30

이것은 현재 컴퓨터 과학에서 해결되지 않은 큰 문제 중 하나입니다. 행운을 빕니다.
john ktejik

답변:


70

이미지 검색 및 유사성 측정에 대한 많은 연구가있었습니다. 쉬운 문제가 아닙니다. 일반적으로 단일 int이미지로는 이미지가 매우 유사한 지 판단하기에 충분하지 않습니다. 오 탐률이 높아집니다.

그러나 많은 연구가 수행되었으므로 일부를 살펴볼 수 있습니다. 예를 들어, 이 문서 (PDF)는 많은 데이터를 저장하지 않고 빠르게 중복 이미지를 찾는 데 적합한 컴팩트 이미지 핑거 프린팅 알고리즘을 제공합니다. 강력한 것을 원한다면 이것이 올바른 접근 방식 인 것 같습니다 .

더 간단하지만 확실히 더 임시적인 것을 찾고 있다면 이 SO 질문 에는 몇 가지 적절한 아이디어가 있습니다.


2
2004 년 논문인데 이것이 여전히 최선의 답변인지 확실하지 않습니까?
Andrew

50

RGB 히스토그램을 사용하는 것에서 벗어나는 것을 고려하는 것이 좋습니다.

이미지의 2d Haar 웨이블릿을 취하고 (소리보다 훨씬 쉬우 며, 계수에 가중치를 부여하는 데 사용되는 평균과 제곱근이 많음) 가장 큰 k를 유지하면 이미지의 더 나은 다이제스트를 얻을 수 있습니다. 웨이블릿의 가중치 계수를 희소 벡터로 정규화하고 저장하여 크기를 줄입니다. 최소한 사전에 지각 가중치를 사용하여 RG 및 B의 스케일을 조정하거나 YIQ (또는 양자화 노이즈를 피하기 위해 YCoCg)로 전환하여 중요도를 낮추면서 색차 정보를 샘플링 할 수 있도록 권장합니다.

이제 이러한 희소 정규화 된 벡터 중 두 개의 내적을 유사성의 척도로 사용할 수 있습니다. 가장 큰 내적을 가진 이미지 쌍은 구조가 매우 유사 할 것입니다. 이것은 크기 조정, 색조 이동 및 워터 마킹에 약간 저항하고 구현하기 쉽고 컴팩트하다는 이점이 있습니다.

k를 늘리거나 줄여서 저장소와 정확도를 절충 할 수 있습니다.

단일 숫자 점수로 정렬하는 것은 이러한 종류의 분류 문제에 대해 다루기 어려울 것입니다. 생각해 보면 이미지는 한 축을 따라 '변경'할 수 있어야하지만 그렇지 않습니다. 이것이 특징 벡터가 필요한 이유입니다. Haar 잔물결의 경우 이미지에서 가장 날카로운 불연속이 발생하는 대략적인 위치입니다. 이미지 사이의 거리를 쌍으로 계산할 수 있지만, 거리 측정법뿐이므로 선형 순서는 모두 똑같이 멀리있는 3 개의 이미지로 구성된 '삼각형'을 표현할 방법이 없습니다. (즉, 모두 녹색 인 이미지, 모두 빨간색 인 이미지 및 모두 파란색 인 이미지를 생각해보십시오.)

즉, 문제에 대한 실제 솔루션은 보유한 이미지 수에 O (n ^ 2) 연산이 필요합니다. 측정 값을 선형화 할 수 있었다면 O (n log n) 만 필요하거나 측정 값이 기수 정렬에 적합한 경우 O (n) 만 필요할 수 있습니다. 즉, 실제로는 전체 세트를 살펴볼 필요가 없기 때문에 O (n ^ 2)를 소비 할 필요가 없습니다. 일부 임계 값보다 가까운 것을 찾아야합니다. 따라서 희소 벡터 공간을 분할하기 위해 여러 기술 중 하나를 적용하면 모든 이미지를 모든 이미지와 순진하게 비교하는 것보다 '주어진 임계 값보다 더 유사한 이미지의 k 찾기'문제에 대해 훨씬 더 빠른 무증상을 얻을 수 있습니다. 당신은 아마도 당신이 요구 한 것이 정확하지 않다면 필요할 것입니다.

어쨌든 저는 몇 년 전 제가 저장하고있는 서로 다른 텍스처의 수를 최소화하려고 할 때 개인적으로 좋은 효과를 내기 위해 이것을 사용했지만,이 공간에서 그 효능을 보여주는 많은 연구 소음이있었습니다 (이 경우 비교 보다 정교한 형태의 히스토그램 분류) :

http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf

더 나은 탐지 정확도가 필요한 경우 minHash 및 tf-idf 알고리즘을 Haar 웨이블릿 (또는 히스토그램)과 함께 사용하여 편집을보다 강력하게 처리 할 수 ​​있습니다.

http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf

마지막으로 Stanford는 이러한 종류의 접근 방식의 좀 더 이국적인 변형을 기반으로 이미지 검색을 제공합니다. 웨이블릿에서 더 많은 특징 추출을 수행하여 이미지의 회전 또는 크기 조정 된 섹션 등을 찾는 데 기반을 두지 만 이는 아마도 작업량을 넘어 설 것입니다. 하고 싶다.

http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi


잠재적 후보를 찾기 위해 공간을 검색하기 위해 kd- 트리 등을 간접적으로 설명하는 것 같습니다. 이것을 주목할 가치가 있습니다.
Boojum

1
글쎄요, 제가 모호한 암시 이상의 기술을 지정하지 않은 이유는 kd- 트리가 공간에 상대적으로 적은 수의 차원이있을 때 잘 작동하기 때문입니다. 여기에는 드물게 채워진 ~ 128 개 이상의 차원이있을 수 있습니다. 값이 희소하기 때문에 대부분의 값은 0이 될 것이므로 차원을 라운드 로빈하여 kd 스타일로 분할하는 것은 실제로 거의 쓸모가 없습니다. 동일한 토큰으로 R- 트리가 분해되어 가장 좋은 선택 인 X- 트리를 남깁니다. 불행히도, 그들은 또한 그 많은 차원에 직면했을 때 성능의 한계에 가깝습니다.
Edward KMETT

"그리고 웨이블릿에서 가장 큰 가중치 계수 k를 희소 벡터로 유지하십시오."-행당 유지 또는 전체 웨이블릿에 대해 유지 하시겠습니까?
ivan.ukr

"최소한 사전에 지각 가중치를 사용하여 RG와 B의 스케일을 조정해야합니다. 그렇지 않으면 YIQ (또는 양자화 노이즈를 피하기 위해 YCoCg)로 전환하여 중요도를 낮추면서 색차 정보를 샘플링 할 수 있습니다." -그 다음에는? Y에 대해서만 웨이블릿을 수행합니까, 아니면 모든 채널에 대해 수행합니까? 모든 채널에 대해 수행하는 경우-여러 채널에서 이미지의 유사성을 측정하는 방법은 무엇입니까? 각 채널의 내적을 추가하고이를 유사성 측정 값으로 간주하거나 가중치를 추가해야합니까?
ivan.ukr

15

저는 Fast Multiresolution Image Querying 이라는 매우 안정적인 알고리즘을 구현했습니다 . 그것에 대한 나의 (고대, 유지되지 않은) 코드는 여기에 있습니다 .

빠른 다중 해상도 이미지 쿼리가 수행하는 작업은 YIQ 색상 공간을 기반으로 이미지를 3 개로 분할하는 것입니다 (RGB보다 차이를 일치시키는 데 더 적합). 그런 다음 이미지는 각 색상 공간에서 가장 두드러진 특징 만 사용할 수있을 때까지 웨이블릿 알고리즘을 사용하여 기본적으로 압축됩니다. 이러한 포인트는 데이터 구조에 저장됩니다. 쿼리 이미지는 동일한 프로세스를 거치며 쿼리 이미지의 눈에 띄는 특징은 저장된 데이터베이스의 특징과 일치합니다. 더 많이 일치할수록 이미지가 유사 할 가능성이 높습니다.

이 알고리즘은 "스케치 별 쿼리"기능에 자주 사용됩니다. 내 소프트웨어는 URL을 통해서만 쿼리 이미지 입력을 허용했기 때문에 사용자 인터페이스가 없었습니다. 그러나 축소판을 해당 이미지의 큰 버전과 일치시키는 데는 예외적으로 잘 작동한다는 것을 알았습니다.

훨씬 더 인상적 내 소프트웨어보다 retrievr 당신이 소스로 플리커 이미지를 사용하여 FMIQ 알고리즘을 시도 할 수 있습니다. 아주 멋지다! 스케치를 통해 또는 소스 이미지를 사용하여 시도해 보면 얼마나 잘 작동하는지 확인할 수 있습니다.


회전 된 이미지를 여전히 인식 할 수 있습니까?
endolith

나는 그것이 아주 잘 작동 할 것 같지 않다. 적절한 일치를 최대화하기 위해 각 회전에 대한 이미지를 인코딩 할 수 있습니다.
Luke Francl

검색 자에 대한 링크가 다운 된 것 같습니다. 어디에 보관되어 있습니까?
mmigdol 2014

10

사진에는 ​​많은 기능이 있으므로 평균 밝기와 같이 자신을 하나로 좁히지 않는 한 n 차원 문제 공간을 처리하게됩니다.

만약 내가 당신에게 세계의 도시들에 하나의 정수를 할당 해달라고 요청한다면, 어느 것이 가까운 지 알 수있을 것입니다. 결과는 좋지 않을 것입니다. 예를 들어 시간대를 단일 정수로 선택하고 특정 도시에서 좋은 결과를 얻을 수 있습니다. 그러나 북극 근처의 도시와 남극 근처의 다른 도시는 지구 반대편에 있더라도 동일한 시간대에있을 수 있습니다. 두 개의 정수를 사용하면 위도와 경도로 매우 좋은 결과를 얻을 수 있습니다. 이미지 유사성에 대한 문제는 동일합니다.

즉, 유사한 이미지를 함께 클러스터링하는 알고리즘이 있습니다. 이것은 Picasa에서 얼굴 감지를 수행 할 때 발생합니다. 얼굴을 식별하기 전에도 유사한 얼굴을 함께 클러스터링하여 유사한 얼굴 집합을 쉽게 살펴보고 대부분의 얼굴에 같은 이름을 부여하기 쉽습니다.

N 차원 데이터를 더 적은 수의 차원으로 줄일 수있는 Principle Component Analysis라는 기술도 있습니다. 따라서 n 개의 기능이있는 사진은 하나의 기능으로 축소 될 수 있습니다. 그러나 이것은 여전히 ​​이미지를 비교하는 최선의 방법은 아닙니다.


1
논점이지만, 예를 들어 기능 x = 2 및 기능 y = 3 및 기능 z = 5 및 기능 aa = 7 등의 경우 단일 정수를 사용하여 기능의 조합을 나타낼 수 있습니다. 그런 다음 단일 정수의 인수 분해 된 형태로 프라임베이스가 올라간 힘은 해당 특정 이미지에 대한 특성의 값이됩니다. 다시 말하지만, 숫자의 크기가 터무니 없기 때문에 논점입니다. 그 크기를 더 줄일 수는 있지만 ... 우리는 구조화 된 데이터에 대해서만 이야기하고 있습니다.
argyle 2013 년

진실. 그러나 진짜 요점은 비슷한 이미지가 숫자 적으로 가깝도록 숫자를 배열하는 것입니다. 위에서 말 했음에도 불구하고 이것은 가능합니다. 요컨대, 출장 영업 사원 문제를 해결하여 n 차원 공간에서 이미지를 통과하는 최소 (또는 거의 최소) 경로를 찾을 수 있습니다 (여기서 n은 이미지를 비교하는 데 사용할 피처 수). 그러나 그것은 비싸다.
Neil

8

- C 라이브러리 ( "libphash"있다 http://phash.org/ 각 이미지를 비교 할 필요가 없습니다 (해시를 비교하여 비슷한 이미지를 검색 할 이미지의 "지각 해시를"계산하고 수 있습니다) 다른 모든 이미지에 대해 직접))하지만 안타깝게도 시도했을 때 그다지 정확하지 않은 것 같습니다.


5

"유사한"것이 무엇인지 결정해야합니다. 대조? 색조?

그림이 거꾸로되어있는 동일한 그림과 "유사"합니까?

이미지를 4x4 조각으로 나누고 각 그리드 셀에 대한 평균 색상을 구함으로써 많은 "클로즈 콜"을 찾을 수있을 것입니다. 이미지 당 16 개의 점수가 있습니다. 유사성을 판단하기 위해 이미지 간의 차이 제곱의 합계를 계산합니다.

색조, 밝기 또는 대비와 같은 단일 개념에 위배되지 않는 한 단일 해시가 의미가 없다고 생각합니다.

아이디어는 다음과 같습니다.

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994

우선, 저는 이것들이 R * (2 ^ 16) + G * (2 ^ 8) + B 또는 이와 비슷한 십진수라고 가정하겠습니다. 빨간색은 지나치게 가중치를두기 때문에 분명히 좋지 않습니다.

HSV 공간으로 이동하는 것이 더 좋습니다. 당신은 할 수 HSV의 비트를 펼쳐 해시에, 또는 당신은 단지 개별적으로 H 또는 S 또는 V를 해결 수, 또는 당신은 이미지 당 세 개의 해시를 가질 수있다.


하나 더. 가중치 R, G 및 B를 수행하는 경우 가중치는 녹색이 가장 높고 빨간색, 파란색은 인간의 시각적 민감도와 일치합니다.


5

웹 서비스 시대에 http://tineye.com을 시도해 볼 수 있습니다.


3
tineye 뒤에있는 코드는 질문자가 추구하는 것과 정확히 일치하는 것 같지만, 웹 서비스로서 매우 유용하다고 생각하지 않습니다. 두 개의 이미지를 제공하고 "이것들이 동일합니까?"라고 질문 할 수있는 (분명한) 방법이 없기 때문입니다. " - 두 번째 이미지는 웹 페이지에서해야하고, tineye에 의해 색인 것
DBR

1
비즈니스 사용자에게 API를 제공하고 있습니까? 그들은 그것에 대해 연락해야합니다.
zproxy

정확하게 services.tineye.com/MatchEngine 을 제공하는 상용 API가 있습니다 .
Gajus


1

다른 중복 이미지 검색 소프트웨어가 이미지에 대해 FFT를 수행하고 다른 주파수의 값을 벡터로 저장한다고 가정했습니다.

Image1 = (u1, u2, u3, ..., un)
Image2 = (v1, v2, v3, ..., vn)

그런 다음 두 이미지 의 가중치 벡터 간의 거리를 계산하여 두 이미지가 같은지 비교할 수 있습니다.

distance = Sqrt(
     (u1-v1)^2 +
     (u2-v2)^2 +
     (u2-v3)^2 +
     ...
     (un-vn)^2);

2
대부분의 자연스러운 이미지는 매우 유사한 주파수 콘텐츠를 가지고 있으므로 이것이 매우 좋은 측정 기준이 될지 의심됩니다.
Hannes Ovrén

1

한 가지 해결책은 버블 정렬을 수행하는 데 필요한 모든 사진 쌍에 대해 RMS / RSS 비교를 수행하는 것입니다. 둘째, 각 이미지에 대해 FFT 를 수행하고 정렬 기준으로 사용할 인덱스로 사용할 각 이미지에 대해 단일 정수를 검색하기 위해 축 평균화를 수행 할 수 있습니다. 무시하기로 선택한 차이의 크기와 필요한 속도 향상 정도에 따라 원본의 크기가 조정 된 (25 %, 10 %) 버전에서 비교를 고려할 수 있습니다. 이러한 솔루션이 흥미로운 지 알려 주시면 논의하거나 샘플 코드를 제공 할 수 있습니다.


FFT는 색상 정보 만 제공하고 위치에 대한 정보는 제공하지 않습니다. 크기 조정은 결과 이미지에 미치는 영향에 관계없이 지정된 크기 미만의 모든 기능을 무시합니다. 회색 이미지와 바둑판은 해당 측정에서 동일 할 수 있습니다. 웨이블릿 접근법 (Daubechies, Haar 등)은 각 데이터 포인트에서 위치 및 색상 정보의 비율을 상쇄하여 위치 및 색상 정보를 모두 제공하는 이점이 있습니다.
Edward KMETT

2
아니요, 이미지의 FFT에는 원본의 모든 공간 정보가 포함됩니다. FFT에서 원본을 재구성 할 수 있습니다. homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm 그러나 당신이 생각하고 있었던 히스토그램은 그렇지 않습니다.
Paul

1

근접 중복 이미지 감지를 감지하는 대부분의 최신 접근 방식은 흥미로운 지점 감지 및 이러한 지점 주변 영역을 설명하는 설명자를 사용합니다. 종종 SIFT 가 사용됩니다. 그런 다음 설명자를 quatize하고 클러스터를 시각적 단어 어휘로 사용할 수 있습니다.

따라서 두 이미지의 일반적인 시각적 단어와 이러한 이미지의 모든 시각적 단어의 비율을 보면 이미지 간의 유사성을 추정 할 수 있습니다. 흥미로운 기사가 ​​많이 있습니다. 그중 하나는 거의 중복 이미지 감지입니다 : minHash 및 tf-idf 가중치


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.