두 이미지가 같은지 어떻게 알 수 있습니까? [닫은]


20

JPEG, PNG, GIF와 같은 다른 형식으로 약 2000 개가 넘는 10000 개 이상의 이미지가 있습니다. 이 숫자는 매일 증가하고 있습니다. 나는 그 사본을 삭제해야하며 먼저 그것을 찾는 방법을 알아야합니다.

내 첫 번째 생각은 이미지 픽셀을 확인하고 동일한 좌표에서 동일한 색상의 픽셀을 가진 다른 그림을 찾는 것입니다. 그러나이 옵션이 항상 작동하는 것은 아닙니다. 중복을 검색한다고 가정 해 봅시다. 검색 가능한 객체는 8 비트 PNG 파일을 선택합니다. 해당 이미지의 모든 복제본을 찾을 수 있지만 8 비트 PNG, 때로는 8 비트 GIF 및 JPEG는 거의 없습니다 (이미지가 알고리즘이기 때문에)?

내 두 번째 생각은 모든 이미지를 복제하고 엄격한 두 색상 팔레트 (흑백이라고 가정 함)에서 다시 칠하고 위에서 언급 한 것과 동일한 스캔을 수행하는 것이 었습니다. 다시 JPEG 이미지는 PNG 또는 GIF 형식과 100 % 유사하지 않습니다 (위와 같은 이유입니까?).

세 번째 생각은 이미지가 얼마나 익숙해야하는지에 대한 비율 을 줄이고 색상 얼마나 변할 수 있는지 증가 시켜 원하지 않는 이미지를 제거하는 것이 었습니다 ...

이견있는 사람?



압축 손실이있는 형식은 손실없는 버전과 100 % 동일하지 않은 이미지로 이어집니다. 명령 줄 유틸리티가 있거나 GUI 프로그램을 실행하여 제안한 다음> 90 % 유사한 픽셀 (평균 편차 계산)이있는 이미지를 표시 할 수 있습니까? (물론 픽셀 크기는 모든 형식에서 동일해야 함)
Thorsten Müller


1
파일 이름은 같지만 확장자가 다른 사람은 몇 명입니까?
JeffO

4
몇 주 동안 코딩 할 필요가없는 유용한 답변 : stackoverflow.com/questions/596262/…
mac

답변:


17

지각 해시가 답이 될 수 있습니다.

http://www.phash.org/

지각 해시는 콘텐츠의 다양한 기능에서 파생 된 멀티미디어 파일의 지문입니다. 출력의 급격한 변화로 이어지는 입력의 작은 변화의 눈사태 효과에 의존하는 암호화 해시 함수와 달리, 지각 해시는 기능이 유사하면 서로 "가까이"있습니다.


9
  1. 치수를 확인하십시오. 다른 => 이미지가 동일하지 않은 경우.
  2. 형식을 확인하십시오. 같은 경우 => 픽셀 단위로 정확한 비교를 수행합니다.
  3. 다른 형식으로 수행하는 경우 :

RGB (빨강, 녹색, 파랑)를 비교하지 마십시오. 밝기를 무게의 절반으로 비교하고 색상 / 색조를 다른 절반 (또는 2/3 및 1/3)과 비교하십시오. 값의 차이를 계산하고 '허용 오차'값에 따라 동일하거나 그렇지 않습니다.

JPEG는 색상 정보를 크게 압축하지만 휘도 값을 망치지 않습니다.


6

몇 년 전에 듀피에 대한 많은 이미지를 스크리닝 할 때 모든 것을 8x8 썸네일로 줄이고 그런 다음 썸네일 사이의 거리의 제곱 (세 가지 색상을 별도로 처리)을 기반으로 유사성 점수를 계산하는 것이 꽤 효과적이라는 것을 알았습니다. 메모리에 8x8 썸네일을 많이 보유 할 수 있습니다 .

사실상 모든 듀 피는 비 듀피보다 낮은 점수를 받았는데, 실제 내용이 다양하더라도 (각각의 배경은 해변 모래였습니다.) 콘트라스트가 매우 낮고 전체적으로 유사한 일부 이미지 만 문제였습니다.

또한 누군가 파일 크기를 줄이기 위해 해상도 나 품질을 떨어 뜨린 것을 제외하고는 속임수 인 이미지를 포착하는 데 효과적이었습니다.


1
일반적으로 YUV는 RGB보다 우수하며 약간의 색상 균형 변화에 덜 민감합니다.
Martin Beckett

잠재적 일치 항목을 사전 선택하는이 썸네일 기법은 유효하며 YUV는 좋은 터치이며 동일한 이유로 순수한 휘도 맵으로 바뀌는 것을 보았습니다.
패트릭 휴즈

@Martin Beckett : RGB 차이의 제곱의 합은 내가 시도한 첫 번째 것이며, 개선하지 않으려 고 충분히 잘 작동했습니다. dupe의 엄격한 정의를 사용하면 자동 삭제하도록 할 정도로 충분했습니다.
Loren Pechtel

@Loren, 작동해야하는 동일한 이미지의 작은 픽셀 편집인 경우. jpeg와 같은 것들이 RGB를 YUV 색상 공간 이상으로 혼란스럽게 만듭니다. 그냥 팁 ;-)
Martin Beckett

본질적으로 매우 어두운 그림은 전혀 유사하지 않더라도 차이의 제곱합이 더 낮은 경향이 있습니다. 임계 값은 영상의 평균 광도로 조정될 수 있습니다. 이 평균 광도를 사전 필터로 사용하여 O (n ^ 2) 이미지 비교를 피하므로 이미 있습니다.
가브리엘

1

이미지의 유사성을 스캔하는 코드를 작성해야 할 수도 있습니다. 모든 사진을 ARGB 형식으로 변환하고 비교할 수 있습니다. (메모리에)

가능한 방법은 다음과 같습니다. 영역에서 그림을 나눕니다. 영역의 평균 색상 및 / 또는 밝기를 스캔하여 두 사진의 유사성을 비교합니다.

영역의 90 % 이상이 일치하는 경우 하나를 선택하여 삭제 후보 목록으로 이동하십시오. 이 방법으로 후보 목록을 얻을 수 있습니다. 사진의 가로 세로 비율을 사용하여 사진을 가로 및 세로 사진으로 분류하여 비교 속도를 높일 수 있습니다. 이 방법으로 픽셀별로 올바른 색상을 재현하지 않는 손실 알고리즘을 보완 할 수 있습니다. 밤새 프로그램을 실행하고 아침에는 .Net에서 :) GDI + lib를 사용하여 쉽게 수행 할 수 있습니다.

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