블러(흐릿)를 감지하기 위해 정도를 다르게 한 블러 이미지를 생성했다.
# Load our input image
image = cv2.imread('./images/liberty.jpeg')
imshow("Original Image", image)
blur_1 = cv2.GaussianBlur(image, (5,5), 0)
imshow('Blurred Image 1', blur_1)
blur_2 = cv2.GaussianBlur(image, (9,9), 0)
imshow('Blurred Image 2', blur_2)
blur_3 = cv2.GaussianBlur(image, (13,13), 0)
imshow('Blurred Image 3', blur_3)
def getBlurScore(image):
if len(image.shape) == 3:
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return cv2.Laplacian(image, cv2.CV_64F).var()
입력 이미지 확인 및 그레이스케일 변환
이미지가 컬러(BGR) 이미지인 경우(image.shape의 길이가 3인 경우),
cv2.cvtColor를 사용하여 그레이스케일로 변환
라플라시안 변환 및 분산 계산
cv2.Laplacian을 사용하여 이미지의 2차 미분(라플라시안)을 계산합니다. 이는 이미지에서 급격한 밝기 변화(에지)를 강조
.var()를 사용하여 라플라시안 이미지의 분산(variance)을 계산합니다. 이 값이 블러 점수가 된다.
print("Blur Score = {}".format(getBlurScore(image)))
print("Blur Score = {}".format(getBlurScore(blur_1)))
print("Blur Score = {}".format(getBlurScore(blur_2)))
print("Blur Score = {}".format(getBlurScore(blur_3)))
Blur Score = 894.1643803618214
Blur Score = 64.20102699531715
Blur Score = 15.320655906666655
Blur Score = 6.565761708892717
원본 이미지 일 수록(깨끗한 이미지) 블러 점수가 낮았다.
블러 점수 해석을 하자면,
높은 블러 점수: 이미지가 초점이 맞고 날카로울 가능성이 크다.
낮은 블러 점수: 이미지가 흐릿하고 블러가 많이 적용되었을 가능성이 크다.