본문 바로가기

Python and Data

(CV-1)CV 밑바닥(진짜밑바닥은아님)부터 시작하기(색공간과 유사도)

딥러닝 관련 아님. 암튼 아님... 진짜 순수하게 "영상 처리(Computer vision)임

이 카테고리에서 사용하는 모든 이미지는 제작자의 동의를 얻은 바 있음.

(어휴 글쓰기 싫어...)

 

Term

영상 -> 움직이는 동영상 이외에도 사진을 포함한 Digital+Visible한 것이라고 정의한다.

주파수(frequency)  -> 원래 물리에서 주파수=진동수로 에너지와 연관이 있는데... 영상처리에서 주파수는  Δx(즉 변화량)이라고 생각하면 된다. 영상의 사물의 테두리 처럼 색공간 값의 변화가 큰 부분일 수록 큰 주파수 값을 가진다.

 

Concept

 모든 영상에는  각종 블러, 노이즈를 포함한 사물을 인식하거나 있는 그대로 보는 것 또는 비교하는 것에 있어 부정적 영향을 미치는 요소가 존재한다.  CV는 이 요소를 줄이고 영상에 일반적으로 긍정적인 요소를 주입하거나 객관적인 평가지표를 제시하는데 의의가 있다.

 

기존 아날로그 세상은 왼쪽과 같이 연속적이나 빛을 통해 디지털 공간에 담는 즉시 각 픽셀에 담기는 수치가 된다. RGB 필터를 통과한 빛이 각 픽셀에 0~255크기로 각 픽셀에 저장된다. 이 과정에서 필연적으로 정보의 손실이 일어난다(무한대로 키워 볼 수 없다).  이 과정에서 조금 더 명확하게 보는 몇가지 기법을 소개한다. anaolg to digital 과정을 말로 표현하면 나는  카메라 전문가가 될테니 이만 줄인다.


Analog film

Digital image

 

RGB 필터 저거 특허라던데 그럼 카메라 한대 만들때마다 저게 붙어있는데 돈이 얼마야... 나도 저런거 만들고 싶네요...

RGB filter

Color Space 

 

색공간은 RGB filter 이외에도 다양한 선택지가 있다.

RGB - 가장 기본적인 필터로 렌즈 바로뒤에 붙여서 사용할 수도 있다. 

HSV - 사람의 시각적 인지를 감안하여 Hue, Saturation, Value 로 구분

YUV -  사람의 시각적 인지를 최대한 활용하여 완변학 구면 좌표계로 색상을 표현


RGB Color Space


HSV(Cylinder) Color Space


HSV(Cone) Color Space

Lab Color Space

 

 

Similarity Evaluation Indicators

PSNR - 최대신호/잡음비

Data Coummunication 이나 Networking 공부해 본사람은 나름 익숙한 SNR값이다 근데 P다 (Peak). 

S/N 이라서 Signal Power/ Noise Power인데. Signal의 최대 출력은 255로 고정된다(RGB에서 그 어떤 값도 255는 못넘으니까). 전반적으로는 MSE(mean square err)의 형태를 띈다. 만약 유사도를 비교하려는 두 영상이 완벽하게 동일하다면 분모가 0으로 가면서 PSNR은 Inf를 향해 간다. 결과는 dB의 형태를 띄는데 PSNR값은 클수록 유사하다

PSNR공식/PSNR 계산 Python

import numpy as np
def mean_squared_error(original_image, filtered_image):
    mse = np.mean((original_image.astype("float") - filtered_image.astype("float"))**2)
    return mse
 
def psnr(original_image, filtered_image, max_pixel_value=255):
    mse = mean_squared_error(original_image, filtered_image)
    if mse == 0:
        return float("inf")
    return 10 * np.log10(max_pixel_value / np.sqrt(mse))

SSIM - Structural Similarity Index Measure

구조 유사도

아래의 공식과 같게 l,s,c를 정한다. 아래 공식의 μ와 σ는  각각 평균과 공분산을 뜻한다.

SSIM은 각 영상의 거대한 구조를 바탕으로 유사도를 계산하는데. 패치(커널, 필터 뭐 다 비슷한 말이다) 크기에 따라

한 부분이 유사한지 또는 영상 전체가 유사한지를 판단하는 척도가 된다.

SSIM 공식

이 두 가지 방식으로 두 영상(원본, 보정본)의 유사도를 측정할 수 있다.(근데 나는 대부분 psnr만 썼다.ㅎㅎ)