MATLAB corr2() 함수
이 튜토리얼에서는 MATLAB의 corr2()
함수를 사용하여 두 이미지 간의 상관 관계를 찾는 방법에 대해 설명합니다.
MATLAB corr2()
함수
MATLAB의 corr2()
함수는 두 이미지 또는 배열 간의 상관 관계를 찾는 데 사용됩니다. 상관 관계는 두 이미지 간의 유사성에 대한 정보를 제공합니다.
상관 관계가 1이면 두 이미지가 동일하고 값이 0보다 작거나 같으면 두 이미지가 반대입니다. 대부분 corr2()
함수는 0에서 1 사이의 부동 소수점 값을 반환하며 이 값은 두 이미지 간의 유사성을 보여줍니다.
corr2()
함수가 0.5를 반환하면 두 이미지의 유사성은 50%입니다.
corr2()
함수의 기본 구문은 다음과 같습니다.
correlation_value = corr2(Image_1, Image_2)
위의 구문은 두 입력 이미지 또는 배열 간의 상관 관계를 보여주는 숫자 값 또는 상관 계수를 반환합니다. corr2()
함수의 입력은 2D 배열 또는 행렬이어야 하며 크기가 동일해야 합니다.
예를 들어 MATLAB의 corr2()
함수를 사용하여 두 이미지 간의 상관 관계를 찾아보겠습니다. 아래 코드를 참조하십시오.
clc
clear
Image = imread('pout.tif');
Filtered_image = medfilt2(Image);
Correlation = corr2(Image,Filtered_image)
출력:
Correlation =
0.9959
위의 코드에서 imread()
함수를 사용하여 이미지를 읽은 다음 medfilt2()
함수를 사용하여 이미지에 중앙값 필터를 적용했습니다. corr2()
함수를 사용하여 입력 이미지와 필터링된 버전 간의 상관 관계를 찾았고 결과가 출력에 표시됩니다.
위의 코드는 두 이미지가 99% 유사함을 보여줍니다. 두 개의 동일한 이미지 사이의 상관 관계를 찾으면 corr2()
함수는 1을 반환합니다. 이는 두 이미지가 100% 유사함을 의미합니다.
이제 두 이미지 간의 상관 관계를 찾는 데 사용되는 알고리즘에 대해 이야기해 보겠습니다. 알고리즘은 두 이미지에 있는 픽셀의 강도를 비교하여 상관 관계를 찾습니다.
알고리즘은 두 이미지의 첫 번째 픽셀에서 시작하여 최종 픽셀까지 계속해서 차이점을 찾습니다. 그런 다음 상관 관계를 찾기 위해 픽셀 강도의 모든 차이의 평균을 취합니다.
비교되는 픽셀은 이미지에서 동일한 위치에 있습니다. 즉, 첫 번째 이미지의 첫 번째 픽셀은 두 번째 이미지의 첫 번째 픽셀과만 비교되는 식입니다.
아래 이미지는 두 이미지 간의 상관 관계를 찾는 데 사용되는 공식을 보여줍니다.
위의 공식에서 m
과 n
은 행과 열을 나타냅니다. 이미지는 2D 행렬과 같기 때문에 행과 열을 사용하여 각 픽셀을 가져와야 합니다. 막대가 있는 문자는 이미지 행렬의 평균을 나타냅니다.
MATLAB에서 sum()
및 mean2()
함수를 사용하여 이 공식을 작성할 수 있습니다. 아래 코드를 참조하십시오.
Image_a = Image_a - mean2(Image_a);
Image_b = Image_b - mean2(Image_b);
correlation = sum(sum(Image_a.*Image_b))/sqrt(sum(sum(Image_a.*Image_a))*sum(sum(Image_b.*Image_b)))
mean2()
함수는 열과 행과 함께 전체 이미지 행렬의 평균을 찾는 데 사용됩니다. mean2()
함수는 mean()
함수와 같습니다.
단일 mean()
함수를 사용하면 각 열의 평균을 찾고 행렬에 있는 각 열의 평균 값을 포함하는 벡터를 반환합니다. 따라서 전체 이미지 행렬에 대한 단일 평균 값을 찾기 위해 mean()
함수를 다시 사용해야 합니다.
sum()
함수는 합계를 찾는 데 사용됩니다. 단일 sum()
함수가 각 열의 합계만 계산하기 때문에 두 번 사용되지만 전체 행렬의 합계를 찾고 싶습니다.
sqrt()
함수는 주어진 값의 제곱근을 찾는 데 사용됩니다.
corr2()
함수 대신 위의 공식을 사용하여 두 이미지 또는 배열 간의 상관 관계를 찾을 수도 있습니다. 예를 들어 위의 공식을 사용하여 두 이미지 간의 상관 관계를 알아보겠습니다.
아래 코드를 참조하십시오.
clc
clear
Image_a = imread('pout.tif');
Image_b = medfilt2(Image_a);
Image_a = Image_a - mean2(Image_a);
Image_b = Image_b - mean2(Image_b);
correlation = sum(sum(Image_a.*Image_b))/sqrt(sum(sum(Image_a.*Image_a))*sum(sum(Image_b.*Image_b)))
출력:
correlation =
0.9983
출력에서 상관 관계가 corr2()
함수에서 반환된 상관 관계와 거의 같다는 것을 알 수 있습니다. corr2()
함수는 입력 파일 형식, 크기 및 기타 오류를 확인하기 때문에 사용해야 합니다.
하나의 이미지가 회전되거나 번역되면 회전된 이미지의 픽셀 위치가 변경되기 때문에 corr2()
함수를 사용하여 두 이미지를 비교할 수 없습니다. 위에서 논의한 바와 같이 corr2()
함수는 두 이미지의 동일한 위치에 있는 픽셀을 비교합니다. 픽셀 위치가 변경된 두 이미지 간의 상관 관계를 찾는 데 사용할 수 없습니다.
예를 들어 corr2()
함수를 사용하여 이미지와 회전된 버전 간의 상관 관계를 알아보겠습니다. 아래 코드를 참조하십시오.
clc
clear
Image = imread('pout.tif');
flipped_image = flip(Image);
Correlation = corr2(Image,flipped_image)
출력:
Correlation =
-0.1047
위의 코드에서 flip()
함수를 사용하여 주어진 이미지를 뒤집었습니다. 위의 출력에서 상관 관계가 두 입력 이미지에 유사점이 없음을 보여줍니다. 그래도 우리는 두 이미지가 동일하다는 것을 알고 있습니다. 유일한 차이점은 두 번째 이미지가 뒤집혀 있다는 것입니다.
따라서 corr2()
함수는 픽셀 위치가 변경된 두 이미지를 비교하는 데 사용할 수 없습니다. 이 경우 인공 지능을 사용하는 것과 같이 두 이미지를 비교하는 다른 방법이 있습니다.
corr2()
함수에 대한 자세한 내용은 이 링크를 확인하십시오.