이미지의 변화를 감지하는 매우 간단한 방법은 무엇입니까?

이미지의 변화를 감지하는 매우 간단한 방법은 무엇입니까?

나는 이미지의 "충분한" 변화를 감지하는 가장 간단한 방법을 찾으려고 노력하고 있습니다. 나는 이것이 끔찍한 제한이라는 것을 알고 있으므로 이 문제를 해결하기 위해 이를 두 가지 다른 한정자로 나누었습니다. 즉, 실질적인 변경(픽셀의 80%가 변경됨)과 모션 변경(픽셀의 10%가 변경됨)입니다. 이 이미지는 timelapseRaspberry Pi 카메라의 모드를 통해 캡처되었지만 질문의 목적에 따라이러한 파일은 기본적으로 정적 보기에서 가져올 수 있습니다..

나는 파일 크기를 사용하여 많은 변경 사항을 관찰할 수 있다는 것을 발견했습니다.

user@host-bb:/tmp$ ls -la investigating/
total 134604
drwxr-xr-x 2 user group    4096 Oct 20 00:05 .
drwxr-xr-x 5 user group    4096 Oct 20 00:04 ..
-rw-r--r-- 1 user group 4580181 Oct 20 00:05 image1018223300.jpg
-rw-r--r-- 1 user group 4573449 Oct 20 00:05 image1018223301.jpg
-rw-r--r-- 1 user group 4573024 Oct 20 00:05 image1018223304.jpg
...snip...
-rw-r--r-- 1 user group 4455867 Oct 20 00:05 image1018223320.jpg
-rw-r--r-- 1 user group 4447607 Oct 20 00:05 image1018223321.jpg
-rw-r--r-- 1 user group 4434839 Oct 20 00:05 image1018223323.jpg
-rw-r--r-- 1 user group 4416942 Oct 20 00:05 image1018223324.jpg
-rw-r--r-- 1 user group 1769008 Oct 20 00:05 image1018223325.jpg
-rw-r--r-- 1 user group 1702851 Oct 20 00:05 image1018223326.jpg
-rw-r--r-- 1 user group 1639306 Oct 20 00:05 image1018223327.jpg
-rw-r--r-- 1 user group 1788435 Oct 20 00:05 image1018223328.jpg
-rw-r--r-- 1 user group 1908061 Oct 20 00:05 image1018223329.jpg
-rw-r--r-- 1 user group 1981029 Oct 20 00:05 image1018223330.jpg
-rw-r--r-- 1 user group 2102390 Oct 20 00:05 image1018223331.jpg
-rw-r--r-- 1 user group 2167734 Oct 20 00:05 image1018223333.jpg
-rw-r--r-- 1 user group 2243082 Oct 20 00:05 image1018223334.jpg
...snip...
-rw-r--r-- 1 user group 2640732 Oct 20 00:05 image1018223342.jpg
-rw-r--r-- 1 user group 2730206 Oct 20 00:05 image1018223343.jpg
-rw-r--r-- 1 user group 2751966 Oct 20 00:05 image1018223344.jpg
-rw-r--r-- 1 user group  315875 Oct 20 00:05 image1018223345.jpg
-rw-r--r-- 1 user group  302476 Oct 20 00:05 image1018223352.jpg
...snip...
-rw-r--r-- 1 user group  285965 Oct 20 00:05 image1018223358.jpg
-rw-r--r-- 1 user group  289271 Oct 20 00:05 image1018223359.jpg
user@host-bb:/tmp$ 

조명의 중요하지 않은 변화(예: *28.jpg이미지와 이미지 사이에 발생하는 변화 *29.jpg)도 파일 크기에 차이를 일으킬 수 있습니다.
나는 이것이 기본적으로 비닝이라는 것을 알고 있으며 이것이 내가 찾고 있는 해결책일 수 있습니다.
이는 "상당한 변경"(픽셀의 80%가 변경됨)을 처리합니다.

그러나 문제는 여전히 남아 있습니다. Imagemagick, Python 스크립트 또는 기타 이미지 처리 소프트웨어가 부족한 경우 이미지에서 10% 픽셀 변화에 접근하는 변경 사항을 감지할 수 있는 간단한 방법이 있습니까? 이미지 처리 소프트웨어 이외의 옵션이 없다면 가장 가벼운 옵션은 무엇입니까? 저수준 언어로 나만의 처리를 작성하시나요? 파이썬 스크립트? 저는 Python 배경에서 왔으며 변경 사항이 있으면 이벤트(파일 업로드)를 트리거할 수 있도록 라즈베리 파이 제로에서 간단한 변경 감지를 수행하려고 합니다. 모든 이미지를 전송하기에는 대역폭이 너무 작으며, 파이 제로 w는 처리 능력 측면에서 중요한 요소가 아닙니다.

답변1

1) 매우 기본적이지만 매우 가볍습니다. cmp를 사용하고 파일을 바이트 단위로 비교합니다("binary diff"). 고유 바이트 수를 제공합니다. 방금 제로를 시도했는데 작동합니다.

cmp -l 1.jpg 2.jpg 2>/dev/null | wc -l

다만, 이미지보다는 파일과 관련된 문제인데...

따라서 컴퓨터에서 Python에 액세스할 수 있는 경우(죄송합니다. rpi 0에 동일한 배포판이 없으므로 테스트할 수 없습니다...):

2) SSIM-PIL Python 패키지, 구조적 유사성을 기반으로 함. (https://pypi.org/project/SSIM-PIL/). 이미지 지향적이므로 솔루션 1보다 "오류 차이"가 적어야 합니다. 즉, 결과가 인간의 눈으로 보는 것과 더 유사하다는 의미입니다.https://fr.wikipedia.org/wiki/Structural_Similarity

관련 정보