두 이미지 간의 차이를 수량화하려면 어떻게 해야 합니까?
제가 하고 싶은 일은 다음과 같습니다.
저는 웹캠으로 정기적으로 사진을 찍고 있어요.일종의 시간 경과 같은 거죠다만, 실제로 아무것도 변하지 않은 경우, 즉, 화상이 거의 같은 경우는, 최신의 스냅샷을 보존하고 싶지 않습니다.
차이를 수치화하는 방법이 있을 것 같아서경험적으로 역치를 정해야 할 것 같아요
저는 완벽함보다는 단순함을 원합니다.나는 비단뱀을 쓴다.
일반적인 생각
옵션 1: 양쪽 이미지를 어레이로 로드합니다(scipy.misc.imread
를 사용하여 요소별(소수별) 차이를 계산합니다.차이의 규범을 계산합니다.
옵션 2: 두 이미지를 모두 로드합니다.각 특징 벡터를 계산합니다(예: 히스토그램).영상이 아닌 형상 벡터 간의 거리를 계산합니다.
하지만 먼저 결정해야 할 것들이 있다.
문의사항
먼저 다음 질문에 답해야 합니다.
이미지는 모양과 치수가 같습니까?
그렇지 않으면 크기를 조정하거나 잘라내야 할 수 있습니다.PIL 라이브러리는 Python에서 이를 수행할 수 있도록 지원합니다.
같은 설정이나 디바이스로 취득하는 경우는, 같은 것이 됩니다.
이미지가 잘 정렬되어 있습니까?
그렇지 않으면 먼저 교차 상관을 실행하여 최적의 선형을 찾을 수 있습니다.SciPy는 그것을 할 수 있는 기능이 있다.
카메라와 씬(scene)이 정지해 있는 경우는, 화상이 잘 정렬되어 있을 가능성이 있습니다.
이미지의 노출은 항상 같습니까?(휘도/콘트라스트는 동일합니까?)
그렇지 않으면 이미지를 정규화할 수 있습니다.
하지만 경우에 따라서는 이것이 득보다 실이 많을 수 있으니 주의하세요.예를 들어 어두운 배경에 밝은 픽셀 하나가 있으면 정규화된 이미지가 크게 달라집니다.
색상 정보가 중요합니까?
색상 변화를 확인하려면 그레이스케일 이미지에서처럼 스칼라 값이 아닌 점당 색상 값의 벡터가 필요합니다.이러한 코드를 작성할 때는, 한층 더 주의가 필요합니다.
이미지에 뚜렷한 가장자리가 있습니까?그들은 움직일 것 같습니까?
예인 경우 에지 감지 알고리즘을 먼저 적용한 다음(예: Sobel 또는 Prewitt 변환을 사용하여 그라데이션 계산, 일부 임계값 적용) 첫 번째 영상의 모서리를 두 번째 영상의 모서리와 비교할 수 있습니다.
이미지에 노이즈가 있습니까?
모든 센서는 어느 정도의 노이즈로 이미지를 오염시킵니다.저비용 센서일수록 노이즈가 커집니다.이미지를 비교하기 전에 노이즈 감소를 적용할 수 있습니다.여기서 가장 간단한 접근법(최선은 아님)은 블러입니다.
어떤 변화가 필요합니까?
이는 이미지 간의 차이에 사용할 규범 선택에 영향을 미칠 수 있습니다.
맨해튼 노름(절대값의 합계) 또는 제로 노름(0과 같지 않은 요소의 수)을 사용하여 이미지의 변화 정도를 측정합니다.전자는 화상의 소등 정도를 나타내고 후자는 화소의 차이만을 나타냅니다.
예
당신의 이미지는 잘 정렬되어 있고, 크기와 모양이 같고, 노출이 다를 수 있습니다.간단하게 하기 위해서, 칼라(RGB) 이미지라도 그레이 스케일로 변환합니다.
다음의 Import가 필요합니다.
import sys
from scipy.misc import imread
from scipy.linalg import norm
from scipy import sum, average
주 기능, 두 이미지 읽기, 그레이스케일로 변환, 결과 비교 및 인쇄:
def main():
file1, file2 = sys.argv[1:1+2]
# read images as 2D arrays (convert to grayscale for simplicity)
img1 = to_grayscale(imread(file1).astype(float))
img2 = to_grayscale(imread(file2).astype(float))
# compare
n_m, n_0 = compare_images(img1, img2)
print "Manhattan norm:", n_m, "/ per pixel:", n_m/img1.size
print "Zero norm:", n_0, "/ per pixel:", n_0*1.0/img1.size
비교하는 법 img1
★★★★★★★★★★★★★★★★★」img2
는 다음과 같습니다 2D SciPy 어레이는 다음과 같습니다.
def compare_images(img1, img2):
# normalize to compensate for exposure difference, this may be unnecessary
# consider disabling it
img1 = normalize(img1)
img2 = normalize(img2)
# calculate the difference and its norms
diff = img1 - img2 # elementwise for scipy arrays
m_norm = sum(abs(diff)) # Manhattan norm
z_norm = norm(diff.ravel(), 0) # Zero norm
return (m_norm, z_norm)
이미지일 " " " 입니다.imread
3D 배열, 평균 RGB 채널(마지막 배열 축)을 반환하여 강도를 구합니다. 이미지 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」.pgm
def to_grayscale(arr):
"If arr is a color image (3D array), convert it to grayscale (2D array)."
if len(arr.shape) == 3:
return average(arr, -1) # average over the last axis (color channels)
else:
return arr
정규화는 간단하므로 [0,255]가 아닌 [0,1]로 정규화할 수 있습니다. arr
로 이루어집니다.SciPy 는 SciPy 입니다.
def normalize(arr):
rng = arr.max()-arr.min()
amin = arr.min()
return (arr-amin)*255/rng
'실행하다'를 실행해 보세요.main
★★★★
if __name__ == "__main__":
main()
이제 이 모든 것을 스크립트에 넣고 두 개의 이미지에 대해 실행할 수 있습니다.이미지를 그 자체와 비교해도 차이가 없습니다.
$ python compare.py one.jpg one.jpg
Manhattan norm: 0.0 / per pixel: 0.0
Zero norm: 0 / per pixel: 0.0
이미지를 흐리게 하고 원본과 비교하면 다음과 같은 차이가 있습니다.
$ python compare.py one.jpg one-blurred.jpg
Manhattan norm: 92605183.67 / per pixel: 13.4210411116
Zero norm: 6900000 / per pixel: 1.0
추신: compare.py 스크립트 전체
업데이트: 관련 기술
비디오 시퀀스에 관한 질문으로 프레임이 거의 비슷할 가능성이 높으며, 특이한 것을 찾고 있는 경우, 관련성이 있을 수 있는 다른 접근법에 대해 몇 가지 언급하고 싶습니다.
- 백그라운드 감산 및 분할(전경 객체 감지)
- 희박한 광학적 흐름(모션 검출용)
- 이미지 대신 히스토그램 또는 기타 통계 비교
"Learning OpenCV" 책, 9장(이미지 부분 및 분할) 및 10장(추적 및 모션)을 볼 것을 강력히 권장합니다.전자는 백그라운드 감산법을 사용하는 방법을 가르치고 후자는 광학적 흐름법에 대한 정보를 제공합니다.OpenCV를 이용하다 OpenCV2 .、 Python ≥ 2 . 3 을 사용하는 것이 좋습니다.cv2
Python 듈 python
가장 간단한 배경 감산 버전은 다음과 같습니다.
- 배경의 모든 픽셀에 대한 평균값 μ와 표준편차 θ를 학습한다.
- 현재 픽셀 값을 (μ-2µ, μ+2µ) 또는 (μ-μ, μ+μ)의 범위와 비교합니다.
보다 고도의 버전에서는, 픽셀 마다 시계열을 고려해, 정적인 씬(움직이는 나무나 풀등)을 처리합니다.
광학 흐름의 개념은 두 개 이상의 프레임을 가져다가 속도 벡터를 모든 픽셀(밀도 광학 흐름) 또는 일부 픽셀(소량 광학 흐름)에 할당하는 것입니다.희박한 광플로우를 추정하려면 Lucas-Kanade 방식을 사용할 수 있습니다(OpenCV에도 구현되어 있습니다).확실히 플로우가 많은 경우(속도 필드의 최대값보다 평균이 높음) 프레임 내에서 무언가가 움직이고 있으며 이후의 이미지는 더 다릅니다.
히스토그램을 비교하면 연속된 프레임 간의 갑작스러운 변화를 감지하는 데 도움이 될 수 있습니다.이 접근방식은 Courbon et al, 2010에서 사용되었다.
연속된 프레임의 유사성.연속된 2개의 프레임 사이의 거리가 측정됩니다.너무 높으면 두 번째 프레임이 손상되어 이미지가 제거되었음을 의미합니다.두 프레임의 히스토그램 상에서의 Kullback-Leibler 거리 또는 상호 엔트로피:
여기서 p와 q는 사용되는 프레임의 히스토그램입니다.임계값은 0.2로 고정되어 있습니다.
심플한 솔루션:
이미지를 jpeg로 인코딩하여 파일 크기가 크게 변경되었는지 확인합니다.
비디오 썸네일과 같은 것을 실장해, 많은 성공과 확장성을 실현했습니다.
PIL의 기능을 사용하여 두 영상을 비교할 수 있습니다.
import Image
import ImageChops
im1 = Image.open("splash.png")
im2 = Image.open("splash2.png")
diff = ImageChops.difference(im2, im1)
이 첫 이미지에서 두 내의 을 뺀 입니다.다른 이미지를 사용하여 여러 가지를 할 수 있습니다.은 '일부러'입니다.diff.getbbox()
두 이미지 간의 모든 변경이 포함된 최소 직사각형이 표시됩니다.
PIL의 함수를 사용하여 여기에 언급된 다른 항목의 근사치를 구현할 수도 있습니다.
두 가지 인기 있고 비교적 간단한 방법은 (a) 이미 제안된 유클리드 거리 또는 (b) 정규화된 교차 상관 관계이다.정규화된 교차 상관 관계는 단순한 교차 상관 관계보다 조명 변화에 현저하게 더 강한 경향이 있습니다.위키피디아는 정규화된 상호 상관 관계에 대한 공식을 제공한다.더 정교한 방법도 있지만, 꽤 많은 작업이 필요합니다.
numpy와 같은 구문을 사용하여
dist_size = sqrt(sum(i1 - i2)^2) / i1.size dist_size = sum(abs(i1 - i2)) / i1.size dist_ncc = sum ( ( i1 - 평균(i1)) * (i2 - 평균(i2) ) / ((i1.size - 1) * stdev(i1) * stdev(i2) )
라고 i1
★★★★★★★★★★★★★★★★★」i2
2D ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」
간단한 시도:
양쪽 이미지를 작은 썸네일(예: 64 x 64)로 다시 샘플링하고 썸네일을 픽셀 단위로 특정 임계값과 비교합니다.원본 이미지가 거의 같으면 다시 샘플링된 썸네일은 매우 비슷하거나 심지어 완전히 동일합니다.이 방법은 특히 조도가 낮은 장면에서 발생할 수 있는 노이즈를 처리합니다.그레이스케일로 하면 더 좋을지도 몰라요.
두 이미지 간의 유사성을 측정하는 또 다른 간단한 방법은 다음과 같습니다.
import sys
from skimage.measure import compare_ssim
from skimage.transform import resize
from scipy.ndimage import imread
# get two images - resize both to 1024 x 1024
img_a = resize(imread(sys.argv[1]), (2**10, 2**10))
img_b = resize(imread(sys.argv[2]), (2**10, 2**10))
# score: {-1:1} measure of the structural similarity between the images
score, diff = compare_ssim(img_a, img_b, full=True)
print(score)
만약 다른 사람들이 더 강력한 이미지 유사성 비교 방법에 관심이 있다면, 저는 Tensorflow를 사용하여 유사한 이미지를 측정하고 시각화하는 튜토리얼과 웹 앱을 준비했습니다.
업무에서도 비슷한 문제가 있었습니다.이미지 변환 엔드포인트를 다시 쓰고 있었는데, 새 버전이 이전 버전과 같거나 거의 같은 출력을 생성하는지 확인하고 싶었습니다.그래서 이렇게 썼어요.
https://github.com/nicolashahn/diffimg
같은 크기의 화상에서, 픽셀 단위로 동작하는 각 채널의 값 차이를 측정하고, R, G, B(, A)의 평균 차이를 취하여 모든 픽셀의 차이를 평균한 후 비율을 반환합니다.
예를 들어, 흰색 픽셀의 10x10 이미지, 같은 이미지이지만 하나의 픽셀이 빨간색으로 변경된 경우 해당 픽셀의 차이는 1/3 또는 0.33...(RGB 0,0,0 vs 255,0,0)이고 다른 모든 픽셀은 0입니다.총 100픽셀의 경우 0.33.../100 = 이미지 차이가 약 0.33%입니다.
이것은 OP의 프로젝트에서는 완벽하게 기능한다고 생각합니다(이것은 매우 오래된 투고인 것을 알고 있습니다만, 향후의 StackOverflowers도 python의 이미지를 비교하고 싶은 투고입니다).
특히, 「충분히 다른」 경우의 계산 방법에 대한 질문에 임하고 있습니다.픽셀을 하나씩 빼는 방법을 알아낼 수 있을 거예요.
우선, 아무것도 변하지 않는 다수의 이미지를 촬영하고, 캡처의 변화, 이미징 시스템의 노이즈, JPEG 압축 아티팩트, 조명의 순간적인 변화만으로 픽셀이 변화할 수 있는 최대량을 알아냅니다.아무것도 움직이지 않아도 1~2비트의 차이를 예상할 수 있습니다.
그런 다음 "실제" 검정의 경우 다음과 같은 기준이 필요합니다.
- 최대 P픽셀의 차이가 E를 넘지 않는 경우는 동일합니다.
따라서 E = 0.02, P = 1000이면 단일 픽셀이 최대 5단위 이상 변화하거나(8비트 이미지 참조) 1000개 이상의 픽셀에 오류가 있는 경우 (대략적으로) "다르다"
이는 주로 추가 검사가 필요하지 않을 정도로 충분히 가까운 영상을 빠르게 식별할 수 있는 "트라이징" 기법입니다.「실패」하는 이미지는, 예를 들면, 카메라가 비트를 흔들거나, 조명 변경에 강한 경우, false positive를 가지지 않는, 보다 정교한/비용의 테크닉이 될 가능성이 있습니다.
오픈 소스 프로젝트인 Open Image를 실행하고 있습니다.I/O: 차이를 다음과 같은 임계값과 비교하는 "idiff"라는 유틸리티가 포함되어 있습니다(실제로 더 정교합니다).이 소프트웨어를 사용하고 싶지 않은 경우에도 출처를 보고 어떻게 했는지 확인해 보십시오.이 기술은 상업적으로 많이 사용되고 있으며, 이 임계값화 기술은 렌더링 및 이미지 처리 소프트웨어 테스트 스위트, 플랫폼 간 또는 알고리즘에 약간의 차이가 있을 수 있는 "참조 이미지"를 사용할 수 있도록 개발되었기 때문에 "허용 범위 내에서 일치" 연산을 원했습니다.
대부분의 답변은 조명 수준을 다루지 않습니다.
비교하기 전에 먼저 이미지를 표준 광도로 정규화합니다.
유사한 이미지를 찾는 알고리즘 질문을 본 적이 있습니까?제안사항을 확인하세요.
프레임의 웨이브 렛 변환을 제안합니다(Haar 변환을 사용한 웨이브 렛 인자의 확장자 C를 작성했습니다).그러면 두 그림 사이의 최대(비례) 웨이브 렛 인자의 인덱스를 비교하면 수치 유사도 근사치를 얻을 수 있습니다.
같은 문제가 있어 필로우의 ImageChops를 사용하여 동일한 크기의 두 이미지를 비교하여 흑백의 다른 이미지를 생성하고 히스토그램 값을 집계하는 간단한 파이썬 모듈을 작성했습니다.
이 점수는 직접 얻을 수도 있고 완전한 검정과 흰색의 차이와 비교하여 백분율 값을 얻을 수도 있습니다.
또한 단순한 is_equal 함수를 포함하고 있으며, 이 함수는 이미지가 동등하게 전달되는(및 포함) 아래에 퍼지 임계값을 제공할 수 있습니다.
이 접근법은 그다지 정교하지는 않지만, 아마도 같은 문제로 어려움을 겪고 있는 다른 사람들에게 유용할 것이다.
https://pypi.python.org/pypi/imgcompare/
답장이 늦었다면 죄송합니다만, 비슷한 일을 해왔기 때문에 어떻게든 공헌할 수 있다고 생각했습니다.
OpenCV를 사용하면 템플릿 매칭을 사용할 수 있습니다.다음과 같이 웹캠을 사용하고 있다고 가정합니다.
- 이미지 심플화(임계값 유지 가능)
- 템플릿 조회를 적용하고 minMaxLoc에서 max_val을 확인합니다.
힌트: max_val(또는 사용하는 방법에 따라서는 min_val)은 큰 숫자를 제공합니다.백분율 차이를 얻으려면 동일한 이미지의 템플릿 매칭을 사용하십시오. 그러면 결과가 100%가 됩니다.
예시할 유사 코드:
previous_screenshot = ...
current_screenshot = ...
# simplify both images somehow
# get the 100% corresponding value
res = matchTemplate(previous_screenshot, previous_screenshot, TM_CCOEFF)
_, hundred_p_val, _, _ = minMaxLoc(res)
# hundred_p_val is now the 100%
res = matchTemplate(previous_screenshot, current_screenshot, TM_CCOEFF)
_, max_val, _, _ = minMaxLoc(res)
difference_percentage = max_val / hundred_p_val
# the tolerance is now up to you
도움이 됐으면 좋겠다.
import os
from PIL import Image
from PIL import ImageFile
import imagehash
#just use to the size diferent picture
def compare_image(img_file1, img_file2):
if img_file1 == img_file2:
return True
fp1 = open(img_file1, 'rb')
fp2 = open(img_file2, 'rb')
img1 = Image.open(fp1)
img2 = Image.open(fp2)
ImageFile.LOAD_TRUNCATED_IMAGES = True
b = img1 == img2
fp1.close()
fp2.close()
return b
#through picturu hash to compare
def get_hash_dict(dir):
hash_dict = {}
image_quantity = 0
for _, _, files in os.walk(dir):
for i, fileName in enumerate(files):
with open(dir + fileName, 'rb') as fp:
hash_dict[dir + fileName] = imagehash.average_hash(Image.open(fp))
image_quantity += 1
return hash_dict, image_quantity
def compare_image_with_hash(image_file_name_1, image_file_name_2, max_dif=0):
"""
max_dif: The maximum hash difference is allowed, the smaller and more accurate, the minimum is 0.
recommend to use
"""
ImageFile.LOAD_TRUNCATED_IMAGES = True
hash_1 = None
hash_2 = None
with open(image_file_name_1, 'rb') as fp:
hash_1 = imagehash.average_hash(Image.open(fp))
with open(image_file_name_2, 'rb') as fp:
hash_2 = imagehash.average_hash(Image.open(fp))
dif = hash_1 - hash_2
if dif < 0:
dif = -dif
if dif <= max_dif:
return True
else:
return False
def compare_image_dir_with_hash(dir_1, dir_2, max_dif=0):
"""
max_dif: The maximum hash difference is allowed, the smaller and more accurate, the minimum is 0.
"""
ImageFile.LOAD_TRUNCATED_IMAGES = True
hash_dict_1, image_quantity_1 = get_hash_dict(dir_1)
hash_dict_2, image_quantity_2 = get_hash_dict(dir_2)
if image_quantity_1 > image_quantity_2:
tmp = image_quantity_1
image_quantity_1 = image_quantity_2
image_quantity_2 = tmp
tmp = hash_dict_1
hash_dict_1 = hash_dict_2
hash_dict_2 = tmp
result_dict = {}
for k in hash_dict_1.keys():
result_dict[k] = None
for dif_i in range(0, max_dif + 1):
have_none = False
for k_1 in result_dict.keys():
if result_dict.get(k_1) is None:
have_none = True
if not have_none:
return result_dict
for k_1, v_1 in hash_dict_1.items():
for k_2, v_2 in hash_dict_2.items():
sub = (v_1 - v_2)
if sub < 0:
sub = -sub
if sub == dif_i and result_dict.get(k_1) is None:
result_dict[k_1] = k_2
break
return result_dict
def main():
print(compare_image('image1\\815.jpg', 'image2\\5.jpg'))
print(compare_image_with_hash('image1\\815.jpg', 'image2\\5.jpg', 7))
r = compare_image_dir_with_hash('image1\\', 'image2\\', 10)
for k in r.keys():
print(k, r.get(k))
if __name__ == '__main__':
main()
출력:
image2\5.jpg image1\815.jpg
image2\6.jpg image1\819.jpg
jpg image2\7.jpg image1\900.jpg
image2\8.jpg image1\998.jpg
image2\9.jpg image1\1012.jpg
그림 예:
지구 이동자의 거리가 정확히 필요한 거리일 수 있습니다.그러나 실시간으로 구현하기에는 다소 부담이 될 수 있습니다.
두 이미지의 맨해튼 거리를 계산하는 것은 어떨까요?n*n 값을 얻을 수 있습니다.그런 다음 행 평균을 n개의 값으로 줄이고 함수를 사용하여 단일 값을 얻을 수 있습니다.
두 이미지의 히스토그램을 계산하고 Bhattacharya 계수를 계산할 수 있습니다. 이것은 매우 빠른 알고리즘이며 나는 그것을 크리켓 비디오의 샷 변화를 감지하기 위해 사용했습니다(C에서 오픈을 사용하여).CV)
Isk-daemon에서 Haar Wavelet을 구현하는 방법을 확인하십시오.imgdb C++ 코드를 사용하여 즉시 이미지 간의 차이를 계산할 수 있습니다.
isk-database는 콘텐츠 기반(시각적) 이미지 검색을 이미지 관련 웹 사이트 또는 소프트웨어에 추가할 수 있는 오픈소스 데이터베이스 서버입니다.
이 기술을 통해 이미지 관련 웹사이트나 소프트웨어 사용자는 자신이 찾고자 하는 이미지를 위젯에 스케치하고 웹사이트에서 가장 유사한 이미지를 회신하거나 각 이미지 상세 페이지에서 더 유사한 사진을 요구할 수 있습니다.
좀 더 원칙적인 접근법은 GIST나 CENTERIST와 같은 글로벌 디스크립터를 사용하여 이미지를 비교하는 것입니다.여기서 설명하는 해시함수도 같은 솔루션을 제공합니다.
평균 제곱 오차를 계산하여 numpy를 사용하는 간단하고 빠른 솔루션이 있습니다.
before = np.array(get_picture())
while True:
now = np.array(get_picture())
MSE = np.mean((now - before)**2)
if MSE > threshold:
break
before = now
제가 쓴 함수는 2개의 이미지(파일 패스)를 인수로 하여 두 이미지의 픽셀 성분 간의 평균 차이를 반환하는 것입니다.으로 「동일한「동일한」이미지)를 판별하는 데 꽤 가 있었습니다.==
□□□□□□□□★
(이미지가 본질적으로 동일한지 여부를 판단하기 위해서는 8이 좋은 한계라는 것을 알게 되었습니다.
(전처리를 추가하지 않을 경우 이미지의 치수는 같아야 합니다.)
from PIL import Image
def imagesDifference( imageA, imageB ):
A = list(Image.open(imageA, r'r').convert(r'RGB').getdata())
B = list(Image.open(imageB, r'r').convert(r'RGB').getdata())
if (len(A) != len(B)): return -1
diff = []
for i in range(0, len(A)):
diff += [abs(A[i][0] - B[i][0]), abs(A[i][1] - B[i][1]), abs(A[i][2] - B[i][2])]
return (sum(diff) / len(diff))
삼각대에서 같은 카메라로 촬영한 jpg 이미지는 (1) 각 jpg 어레이를 (폭 3000픽셀에서 폭 100픽셀 이하로) 단일 벡터(3)로 평탄화함으로써 (4)상관계수를 구하는 간단한 상관 알고리즘으로 연속화상을 쌍으로 평탄화함으로써 (4)스qua를 얻음으로써 많은 행운이 있었습니다.r-제곱을 얻기 위한 링 상관계수(즉, 다음 이미지의 변동에 의해 설명되는 한 이미지의 변동성 부분) (5) 일반적으로 r-제곱이 0.9 미만일 경우, 나는 두 이미지가 다르며 그 사이에 어떤 일이 일어났다고 말한다.
이것은, 실장에서는 견고하고 고속입니다(Mathematica 7).
모든 이미지를 이 작은 영역으로 잘라내는 것으로, 관심 있는 부분과 초점을 맞추는 것은 가치가 있습니다. 그렇지 않으면 카메라에서 멀리 떨어져 있지만 중요한 변화를 놓치게 됩니다.
Python을 어떻게 사용하는지는 모르지만 상관관계도 있다고 확신하나요?
단순히 두 이미지의 휘도 사이의 유클리드 거리(즉, sqrt(차이의 제곱합, 픽셀 단위))를 계산하고, 이것이 경험적 임계값에 해당하는 경우 동등하다고 간주할 수 있다고 생각한다.그리고 C 함수를 감싸서 하는 것이 좋습니다.
두 이미지가 얼마나 닮았는지/얼마나 닮았는지를 평가하기 위한 지표가 많이 있습니다.
여기서는 어떤 코드도 다루지 않겠습니다. 왜냐하면 기술적인 문제 말고는 과학적인 문제여야 한다고 생각하기 때문입니다.
일반적으로 이 질문은 이미지에 대한 인간의 인식과 관련이 있기 때문에 각 알고리즘은 인간의 시각 시스템 특성에 대한 지원을 가지고 있습니다.
일반적인 접근법은 다음과 같습니다.
가시적인 차이 예측 변수: 이미지 충실도 평가를 위한 알고리즘(https://www.spiedigitallibrary.org/conference-proceedings-of-spie/1666/0000/Visible-differences-predictor--an-algorithm-for-the-assessment-of/10.1117/12.135952.short?SSO=1)
이미지 품질 평가: 에러 표시에서 구조 유사성까지 (http://www.cns.nyu.edu/pub/lcv/wang03-reprint.pdf)
FSIM: 이미지 품질 평가를 위한 기능 유사도 지수(https://www4.comp.polyu.edu.hk/~cslzhang/IQA/TIP_IQA_FSIM.pdf)
그 중 SSIM(이미지 품질 평가: 오류 가시성에서 구조적 유사성)은 계산이 가장 쉽고 오버헤드도 작습니다.다른 논문 "구배 유사성에 근거한 이미지 품질 평가" ( ) 。https://www.semanticscholar.org/paper/Image-Quality-Assessment-Based-on-Gradient-Liu-Lin/2b819bef80c02d5d4cb56f27b202535e119df988) 를 참조해 주세요.
그 밖에도 많은 접근법이 있습니다.Google Scholar에서 "시각적 차이", "이미지 품질 평가" 등을 검색하십시오. 만약 당신이 예술에 관심이 있거나 정말로 관심이 있다면.
SSIM을 사용하여 두 영상 사이의 Structure Similarity Index Measure(구조 유사도 지수 측정)를 측정합니다.
언급URL : https://stackoverflow.com/questions/189943/how-can-i-quantify-difference-between-two-images
'programing' 카테고리의 다른 글
하나의 값에 대해 여러 열 확인 (0) | 2022.12.26 |
---|---|
판다 수술 진행 상황 표시기 (0) | 2022.12.26 |
vue-material: 알 수 없는 커스텀 컴포넌트 md-md-content (0) | 2022.12.26 |
설치된 모듈을 가져올 수 없습니다. (0) | 2022.12.26 |
Java 서블릿의 POST 요청에서 요청 페이로드 가져오기 (0) | 2022.12.26 |