CS/디지털영상처리

[디지털영상처리] Image Sharpening (1)

nowkoes 2023. 11. 6. 19:50

Image Sharpening

개요

 

 디지털 영상 처리에서 이미지 샤프닝(Image Sharpening)은 이미지의 에지나 세부 사항을 강조함으로써 대비를 높여 디테일을 뚜렷하게 만드는 선명도 향상 기법이다. 이 과정은 인간의 눈이 밝기가 급격히 변하는 경계 영역에서 가상의 밴드를 인지하게 되는 마하 효과(Mach Effect)를 통해 설명될 수 있다.

 

 

 예를 들어, 경계가 분명한 이미지에서 밝기가 변하는 지점은 단위 계단 함수(Unit Step Function)와 유사하게 급격한 변화를 보인다. 그러나 인간의 시각 시스템은 실제로 에지 부근에서 대비를 과장하여 인지하기 때문에 실제와는 조금 다르게 느껴질 것이다.

 

 

 즉, 인간의 눈은 이미지의 에지에서 밝은 부분을 더 밝게, 어두운 부분을 더 어둡게 보게 만들어 대비를 강화한다. 이러한 대비 강화(Contrast Enhancement)는 시각 처리의 자연스러운 부산물로, 우리가 물체의 윤곽을 더 쉽게 구별할 수 있도록 돕는다. 이번 시간에는 이러한 원리를 활용하여 이미지의 윤곽을 더욱 뚜렷하게 만드는 방법을 알아보겠다.


본문

아이디어

 그렇다면 원래 이미지에서 밝은 부분을 더 밝게, 어두운 부분을 더 어둡게 만들려면 어떻게 해야 할까? 그 답은 미분과 관련이 있다.

 

 

 실질적인 이미지의 경계 부분에서의 신호는 다음과 같이 되어 있을 것이다. 여기서 a'에서 b'으로 넘어갈 때 변화량이 급격할수록 경계가 명확해지는 효과를 가질 것이다. 우리가 원하는 것은 a' 부분에서 밝기가 감소하고, b' 부분에서 밝기가 증가하게 하여 이미지를 선명하게 만드는 것이다. 해당 신호를 미분하면 다음과 같은 결과가 나올 것으로 예상할 수 있다.

 

 

 0부터 a'까지는 기울기의 변화가 없으므로 이 구간의 도함수 값은 0이 된다. a'부터 b'까지는 기울기가 일정하게 유지되므로 도함수는 상수가 될 것이다. b' 이후로는 다시 기울기에 변화가 없기 때문에, 도함수는 0으로 돌아간다. 이 함수를 한 번 더 미분하면 a'에서는 값이 증가하고, b'에서는 값이 감소하는 형태의 그래프를 예상할 수 있다.

 

 

 실제로는 조각별 선형 함수에서 두 번째 도함수는 불연속 지점에서 무한대의 값을 가진다. 그러나 디지털 이미지 처리에서는 이산적인 픽셀 값에 적용될 때 이러한 무한대 값을 표현할 수 없다. 대신, 우리는 이 변화를 유한한 값으로 근사하여 나타내야 한다. 이 과정에서 a'에서의 급격한 변화를 양의 값으로, b'에서의 변화를 음의 값으로 나타낸다. 따라서 두 번 미분한 함수를 원래 함수에서 빼면 이미지 샤프닝에 쓸 함수를 근사적으로 구할 수 있다.


라플라시안

 기본적인 아이디어를 알았으니, 이제 우리가 사용할 샤프닝 필터를 만들어 보자. 앞서 언급했지만, 이미지는 연속적이지 않고 이산적이어서 연속 함수처럼 무한소 dx, dy로 나눌 수가 없다. 또한 기울기가 존재하지 않으므로 변화율을 인접한 픽셀과의 거리로 근사하자. 따라서 이미지 배열 f(x,y)를 x에 대해 편미분을 하면 다음과 같이 된다.

 

 

 즉, 기본적인 미분 수식에서 h = 1로 근사하였다. 이제 해당 수식을 한 번 더 미분하면 다음과 같은 차분을 얻을 수 있다.

 

 

 이차 미분을 수치적으로 근사할 때 위와 같은 형태를 전방 차분(Forward Difference)이라고 한다. 이러한 방식은 x 지점 바로 앞의 두 지점의 함숫값만을 사용하여, 해당 점을 기준으로 한 방향에만 치우친 정보를 활용하기 때문에 비대칭적이며, 이로 인해 오차가 발생할 수 있다.

 

 

 따라서 더 정확한 이차 미분의 근사치를 얻기 위해 중심 차분(Central Differnce) 방식을 사용한다. x 지점을 중심으로 양쪽에 위치한 두 지점의 함숫값의 차이를 이용하는 방식은, 대칭적이기 때문에 보다 정확한 근사를 제공한다. 두 방식의 차이는 테일러 시리즈를 사용한 전개를 통해 오차를 확인할 수 있다고 한다.

 

 

 이러한 개념과 라플라스 연산을 이용하여 다음과 같은 라플라스 커널(Laplacian Kernal)을 만들 수 있다. 이를 3x3 행렬로 나타내면 다음과 같다.

 

 

 물론 대각선에 1을 채우고 중앙에 -4를 더하는 라플라스 필터도 존재하고, 기준 값을 양수로 만들기 위해 전체 행렬에 -1을 곱하는 필터도 존재한다. 따라서 원본 이미지 배열 f(x,y)에 라플라스 필터를 적용하면 다음과 같은 수식이 된다.

 

 

실습

 

 해당 이미지에 라플라스 필터를 씌워서 에지를 검출하고, 해당 부분의 픽셀을 돋보이게 해 보자. 물론 해당 이미지가 라플라스 필터를 씌우기 적합한 예제는 아니지만, 어떤 식으로 작동하는지에 대해 초점을 맞추면 좋을 것 같다. 

 

I = imread('example2.jpg');
I = im2double(I); 

f = [0 1 0; 1 -4 1; 0 1 0];
f2 = [1 1 1; 1 -8 1; 1 1 1];

tmp = imfilter(I, f, 'same', 'conv');
tmp2 = imfilter(I, f2, 'same', 'conv');

c = 0.1;
res = I + c * tmp;
res2 = I + c * tmp2;

res = im2uint8(max(min(res, 1), 0));
res2 = im2uint8(max(min(res2, 1), 0));

figure;
subplot(2, 2, 1); imshow(I); title('Original Image');
subplot(2, 2, 2); imshow(tmp, []); title('Laplacian Filtered (f)');
subplot(2, 2, 3); imshow(res); title('Sharpened Image (res)');
subplot(2, 2, 4); imshow(res2); title('Sharpened Image (res2)');

 

 라플라스 필터는 이미지에서 두 번째 공간 미분을 계산하는 필터다. 이는 에지와 같은 급격한 밝기 변화가 있는 곳에서 높은 값을 생성하므로 검은색 배경에서 흰색 부분이 검출되는 부분이 에지가 된다. 즉, 밝기 변화가 없는 평탄한 영역에서는 값이 거의 0에 가까우며, 경계에서는 양수 또는 음수의 높은 값을 갖는다. 

반응형