앎을 경계하기

Machine Learning/For CV

3. 밝기 변환과 공간 필터링(4)

양갱맨 2020. 11. 11. 11:41

3.6 샤프닝 공간 필터

3.6.1 기초

샤프닝은 sharp transition을 강하게 하는 것이다.

평균화는 영상 블러링 효과가 있음을 앞 장에서 확인했다. 이 연산은 적분과 비슷하다. 따라서 샤프닝 은 미분에 의해 처리될 수 있다.

영상 미분은 edge 및 다른 불연속 성분을 강조하고 밝기가 서서히 변하는 영역들을 무시한다.

  • 1차 미분 정의의 조건
    1. 일정한 밝기 영역에서는 0이다.
    1. 밝기 계단이나 비탈의 시작에서는 0이 아니다.
    1. 비탈을 따르는 영역도 0이 아니다.
    fx=f(x+1)f(x)\frac{\partial f}{\partial x}=f(x+1)-f(x)
  • 2차 미분 정의의 조건
    1. 일정 영역에서 0이다.
    1. 밝기 계단, 비탈의 시작과 끝은 0이 아니다.
    1. 일정 기울기의 비탈을 따라서는 0이다.
    2fx=f(x+1)+f(x1)2f(x)\frac{\partial^2f}{\partial x}=f(x+1)+f(x-1)-2f(x)

    편미분을 사용한 것은 변수가 2개가 되었을 때와 똑같이 표기하기 위함이다.

3.6.2 Laplacian

등방성 필터란 영상을 회전시킨 후 필터를 적용하는 것과 필터를 적용하고나서 영상을 회전시키는 것이 똑같다는 부분에서 회전 불변적이다.

가장 간단한 등방성 미분 연산자가 Laplacian이다.

  • 증명

    x와 y에 대해서 각각 미분을 적용한다.

    2f=2fx2+2fy2\nabla^2f=\frac{\partial^2f}{\partial x^2}+\frac{\partial^2f}{\partial y^2}
    2fx2=f(x+1,y)+f(x1,y)2f(x,y)\frac{\partial^2f}{\partial x^2}=f(x+1,y)+f(x-1,y)-2f(x,y)
    2fy2=f(x,y+1)+f(x,y1)2f(x,y)\frac{\partial^2f}{\partial y^2}=f(x,y+1)+f(x,y-1)-2f(x,y)

위 세 개의 식으로부터 두 변수의 이산 Laplacian은 다음과 같다.

2f(x,y)=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)\nabla^2f(x,y)=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)

그림에서 좌측에 있는 필터의 경우, 90도 회전에 대한 등방성 결과를 갖는다. 우측은 45도 회전에 대한 등방성 결과를 갖는다. 상단과 하단의 필터는 부호의 차이가 있다.

이는 등가적 결과를 제공하지만 필터링 된 영상을 다른 영상과 결합시킬 때, 부호의 차이를 알고 있어야한다.

Laplacian은 영상의 밝기 불연속 성분을 돋보이게 하기 때문에 서서히 변하는 레벨의 영역은 경시한다. 이로 인해 어둡고 특징없는 배경에 회색 엣지 선들 및 다른 불연속들을 갖는 영상을 만들게 된다.

cat = cv2.imread('/content/cat.jpg')
cat = cv2.resize(cat, (320,320))

lapla = cv2.cvtColor(cat, cv2.COLOR_BGR2GRAY)
lap = cv2.Laplacian(lapla,ddepth=cv2.CV_8U, ksize=3)
cv2_imshow(lap)

위 처럼 만들어진 Laplacian영상을 원래 영상에 더해서 샤프닝 효과를 보이면서 배경의 특징들을 복구할 수 있다. 만약 laplacian 필터의 중앙 계수가 음수라면 원본 영상과 결합시킬때 더하지 않고 빼야한다.

g(x,y)=f(x,y)+c[2f(x,y)]g(x,y) = f(x,y) + c[\nabla^2f(x,y)]

g는 샤프닝된 영상이며, f는 원본영상이다. c는 필터의 중앙 계수가 음수이면 c=-1이고, 양수이면 c=1이다.

lap = np.reshape(lap, (320,320,1))
g = cat[:,:,:]+lap
cv2_imshow(g)