오랜만에 쓰는 CV다. 웹개발을 다시 하고 있자니 시간도 힘도 없어서 한동안 미뤄뒀는데 하나하나 잊혀지는게 싫어 다시 손을 들었다.
요즘은 부쩍 내가 뭘 좋아하고, 뭘 하고싶은지에 대한 상념이 많아지는 시기인것 같다.
확신이 있다고 생각했는데 생각이 많아진다. 쩝...
작설하고 다시 본론으로 들어가보자.
Concept
아래의 그래프를 하나 살펴보자. 점이 찍힌 곳이 원래는 한곳에 밀집 되어있는 이미지였다가, 이미지를 확대한 것이라고 상상해보면 그 빈(지금은 선으로 표현되어 있는 곳들)곳을 채우는 방법에 대한 고민이다.
보간(간격의 보완)의 문제다.
아래 그래프에서 두꺼운 까만 점이 원본 이미지(혹은 원본 데이터)라고 했을때 아주 큰 스케일에서는 빈 공간이 보이지 않더라도 확대를 하면 할수록 빈공간이 잘 보일 것
이라는 추론을 충분히 할 수 있다.
네가지 정도 알아보자.
NN(Nearest Neighbor)
지도학습에서 KNN(K-neares-neighbor)라는 기법을 들어본적있으면 이해하기 쉽다.
이 알고리즘은 말그대로 근처의 가장 가까운 몇개의 값과 테스트의 값을 비교하여 정의하는 방법이다.
이 방법도 동일하다 근처 가장 가까운 점의 값을 따라서 빈 픽셀의 값을 채우는 것이다.
위 그래프에서 가우스 함수 형식(계단식)으로 진행하는 그래프는 이 방법에 따라 보간한 것이다.
Linear
선형...
두 점이 있다고 가정하면 그 사이를 직선으로 긋는다고 생각하면 된다.
위 그래프에서 직선으로 보이는 그래프를 따라가면 쉽게 이해할 수 있을 것이다.
위 두 그래프는 직관적으로 이해할 수 있다.
하지만 두 그래프는 딱 봐도 문제가 많다는 것을 알 수 있다. 단순 그래프가 아니라 2차원의 이미지라고 생각해보면 단순히 앞 뒤 간격을 채우는것으로는 자연스러운 보간이 힘들다. 그래서 거리(얼마나 원래 점과 인접했는가)를 참고한 방법을 사용한다.
다음 두가지 방법을 살펴보자
대체적으로 이제는 1차 함수의 선형에서 에서 벗어나 3차 혹은 그 이상의 고차원 함수를 사용하는 방식으로 여백을 채워 나간다.
추가적으로 한 포인트와의 거리를 생각해 그 거리에 대한 가중치로 빈 여백을 채운다.
예를 들어 아래와 같은 그림이 있다고 가정하면. 대각 방향의 픽셀은 바로 인접한 네 픽셀보다 한 포인트에
적은 영향을 미치게 된다.
Cubic Conv
3차원 함수 이용.
4개의 인접한 데이터 포인트를 사용. 이 네 개의 포인트를 이용하여 큐빅(3차) 함수를 생성하고, 이 함수를 사용하여 빈 픽셀의 값을 채움.
어떤 포인트에서는 미분이 불가능할수도 있다
Cubic Spline
3차원 함수 + Spline
"부드러운 연결을 보장". 즉 위의 보간에 비해 무조건 "미분 가능" 하다는 조건을 추가한 보간법이다.
포인트가 실제 값이라고 했을때 Cubic Spline의 적용이다.
*사실 CNN의 Super- Resolution이 거의 최고의 방법이다.
CNN (Super Resolution)
여느 방식의 이미지 트레이닝과는 크게 다르지 않다.
일반적으로는 손실함수로 MSE를 사용하여 이를 최소화 하는 방향으로 학습시킨 모델을 사용
다른 이미지도 같은 특성을 가질것이라는 기대에서 만들어내는 결과이다.
'Python and Data' 카테고리의 다른 글
Pytorch로 모델 만들기 간단 정리(CNN-V) (0) | 2023.12.12 |
---|---|
(Python-Django)Django 빠른 습득기-0 (1) | 2023.10.14 |
(CV-6)image transform and DCT-2 and Harr, Gabor Transform (0) | 2023.08.22 |
(CV-5)image transform and DCT-DiscreteCosineTransform-1 (0) | 2023.08.21 |
(CV-4)Edge Detection and Canny Edge Detector(화질구지 살리기 v3) (0) | 2023.08.16 |