샤프닝(sharpening)이란
샤프닝이란 블러링과 반대되는 개념으로, 초점이 잘 맞은 사진처럼 사물의 윤곽이 뚜렷하고 선명한 느낌이 나도록
영상을 변경하는 필터링 기법이다.
이미 촬영된 사진을 초점이 잘 맞은 사진처럼 보이게끔 변경하려면 영상 에지 근방에서 픽셀 값의 명암비가 커지도록 해야한다.
샤프닝을 구현하기 위해서는 블러링된 영상을 사용해야 한다.
부드러워진 영상을 날카로운 영상으로 생성하는 것인데, 여기서 블러링이 적용된 영상을 날카롭지 않아 언샤프(unsharp)라고 하며,
언샤프한 영상을 이용하여 역으로 날카로운 영상을 생성하는 필터를 언샤프 마스크 필터라고 한다.
언샤프 마스크의 과정으로, x축은 픽셀 좌표의 이동, y축은 픽셀 값을 나타낸다.
영상의 에지 부근에서 픽셀 값이 증가하는 그래프이다.
블러링을 적용하여 부드럽게 변한 결과의 그래프이다.
입력 영상에서 블러링된 영상을 뺀 결과의 그래프이다.
입력 함수 값이 증가하기 시작하는 부분에서는 음수 값을 가지고,
입력 함수 값 증가가 멈추는 부근에서는 양수 값을 가진다.
샤프닝이 적용된 결과 영상의 그래프이다.
OpenCV는 언샤프 마스크 필터를 위한 함수를 따로 제공하지 않는다.
예제 코드
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("C:/opencv/ch02/Project1/lenna.bmp", IMREAD_GRAYSCALE);
imshow("src", src);
Mat dst;
for (int sigma = 1; sigma <= 5; sigma++) {
Mat blurred;
GaussianBlur(src, blurred, Size(), sigma);
float alpha = 1.f;
Mat dst = (1 + alpha) * src - alpha * blurred;
String text = format("sigma : %d", sigma);
putText(dst, text, Point(10, 30), FONT_HERSHEY_COMPLEX, 1.0, Scalar(255), 1, LINE_AA);
imshow("dst", dst);
waitKey();
}
}
1 ~ 5 sigma의 값에 의해 생성된 언샤프 마스크 필터링 결과 영상이다.
기존 영상에 비해 경계 구분이 좀 더 뚜렷하게 구분된다.
날카로운 성분에 대한 가중치 alpha 값의 변화에 따라 결과가 달라진다.
'DevelopmentTool > OpenCV' 카테고리의 다른 글
[OpenCV] 어파인 변환(Affine Transformation) (0) | 2022.11.20 |
---|---|
[OpenCV] 잡음 제거 필터링 (0) | 2022.11.20 |
[OpenCV] 블러링 기법과 가우시안 필터 (0) | 2022.11.18 |
[OpenCV] 필터링 개념과 filter2D함수 (0) | 2022.11.18 |
[OpenCV] 영상의 논리 연산 방법 (0) | 2022.11.18 |