Favicon

Image sharpening

Peponi4/21/20254m

C#
NugetPackageOpenCvSharp4

1. Introduction

이미지 프로세싱에서 샤프닝은 이미지의 세부 사항을 강조할 때 사용할 수 있는 기법이다. 일반적으로 필터링 기법을 응용하여 수행되며, 엣지가 강조되어 객체 인식 성능을 크게 향상시킬 수 있다. 형상 기반의 인식 알고리즘에서 자주 사용되는데, 샤프닝이 과도한 경우 노이즈까지 강조될 수 있어 주의가 필요하다.

이 문서에서는 OpenCVSharp4에서 제공하는 메서드를 통해 샤프닝을 수행하는 방법을 알아본다.

실습에 사용할 이미지는 다음과 같다.

Image from Pixabay

2. Filter2D

Filter2D

Mat.Filter2D()는 커널을 설정 후 이미지에 대해 correlation 연산을 수행한다. 블러링, 샤프닝 등에 활용할 수 있으며 여기서는 샤프닝을 수행하는 예시를 알아본다.

private void Filter2D(Mat image)
{
    // 아래 커널에 지정할 공간 크기만큼 배열 할당
    // 블러 또는 샤프닝 효과를 얻는데 사용 가능하며 커널 설정에 따라 평균값, 가우시안 등이 적용된다.
    // 중앙 픽셀 값을 강조하여 샤프닝 효과를 얻는 예시
    float[] weight = [ 0, -1, 0,
                        -1, 5, -1,
                        0, -1, 0 ];
 
    using var kernel = Mat.FromPixelData(3, 3, MatType.CV_32FC1, weight);
 
    using var sharpened = image.Filter2D(-1, kernel);
}

3. Unsharp mask filter

Unsharp mask filter

Unsharp mask filter는 블러 처리된 이미지를 이용하여 샤프닝을 달성하는 방법이다. 주로 gaussian blur 처리를 수행하며, 원본 이미지에서 gaussian 이미지를 빼주어 최종 이미지를 생성한다.

private void UnsharpMaskFilter(Mat image)
{
    // 이미지 샤프닝을 위한 gaussian 생성
    using var gaussian = image.GaussianBlur(new OpenCvSharp.Size(9, 9), 0);
 
    using var sharpened = new Mat();
 
    // 가중치 설정을 통해 gaussian 반영 정도 조절
    Cv2.AddWeighted(image, 2, gaussian, -1, 0, sharpened);
}

4. Laplacian filter

Laplacian filter

이미지 샤프닝을 위한 방법 중 하나로 Laplacian filter를 이용할 수 있다. Laplacian filter는 이미지의 이차 미분을 계산함으로써 엣지를 강조하게 되는데, 이 결과와 원본 이미지와의 합성을 통해 이미지 샤프닝을 달성할 수 있다.

private void LaplacianFilter(Mat image)
{
    // 이미지 샤프닝을 위한 laplacian 생성
    using var laplacian = image.Laplacian(-1, 3);
 
    using var sharpened = new Mat();
 
    // 가중치 설정을 통해 laplacian 반영 정도 조절
    Cv2.AddWeighted(image, 1, laplacian, -1, 0, sharpened);
}

5. 참조 자료