영상 열화 모델(Image degradation model)
공간 영역에서 영상 f(x,y)와 공간필터 h(x,y)를 회선 처리하면 열화가 된 어ᄄᅠᆫ 형태의 영상도 만들 수 있다. 열화가 된 영상에 대해서 아래와 같이 표현한다.
g(x,y) = f(x,y)*h(x,y) |
기호 *는 회선 연산을 의미한다. 잡음 n까지 고려한다면 랜덤(random) 오차를 n(x,y)로 표현하여 식을 아래와 같이 표현할 수 있다.
g(x,y) = f(x,y)*h(x,y)+n(x,y) |
동일한 영상을 주파수 영역에서도 진행할 수 있다. 푸리에 변환의 선형성 때문에 회선 연산은 곱하기 연산으로 치환, 더하기 연산은 변하지 않고 아래 식으로 표현한다.
G(i,j) = F(i,j)*H(i,j)+N(i,j) |
F, H, N은 f, h, n의 푸리에 변환이다. 실제로 적용하기 위해서는 발생하는 랜덤 오차를 확실하게 알 수 없고, H(i,j)에 0이거나 0에 가까운 값이 있을 경우, H(i,j)으로 나누는 경우에서 어렬움이 발생한다.
복원 필터
저역통과 필터링(Low-Pass Filtering)
낮은 주파수를 내보내는 필터
고음역대 주파수 배음을 차츰차츰 깎아나가면서, 특정 주파수를 기준으로 낮은 주파수만 통과시키는 필터이다.
고역통과 필터링(High-Pass Filtering)
높은 주파수를 내보내는 필터
저음역대 주파수 배음을 차츰차츰 깎아나가면서 특정 주파수를 기준으로 높은 주파수만
통과시키는 필터이다.
대역 통과 필터링(Band-Pass Filtering)
특정 주파수 대역 사이의 주파수 배음을 제거해주는 필터
해당 대역의 중심 주파수와 대역폭을 지정해줌으로써 제거할 주파수 영역을 설정할 수 있다.
대역제거 필터링(Band Reject Filtering)
특정한 제거 대역을 제외한 나머지 모든 주파수를 통과시키는 필터
주파수의 특정 범위 성분들을 감소시키는 필터이며 대역 통과 필터의 반대라고 생각하면 좋다.
노치 필터링(Notch Filtering)
대역제거 필터링의 일종으로 중간 Stopband의 대역폭이 좁다. 전체적인 주파수를 유지하고 특정 주파수 대역만 깎아주고 싶을 때 사용한다.
메디안 필터링(Median Filtering)
정렬한 뒤 중간값을 적용하는 필터
어떤 화소 주변의 영역 내의 화소 농도의 중간값을 구하여 원하는 화소의 농도로 처리하는 것
순위 필터링(Rank-order Filtering)
마스크 내의 값을 정렬하고 특정한 값을 출력하는 필터
풀어 설명하자면 마스크에 둘러싸인 영역 내에 포함된 화소들을 화소 값의 크기순으로 정렬한 후 미리 결정된 n번째의 화소 값을 사용하는 것이다.
만일 값들이 가장 작은 값에서 큰 값으로 순차적으로 정렬되어 있으면, 미니멈 필터는 첫번째 값을 출력하는 rank-order 필터이고 반대로 맥시멈 필터는 마지막 값을 출력하는 rank-order 필터이다.
평균 필터링(Average Filtering)
데이터를 모두 모아 한꺼번에 계산하는 식을 배치식(batch expression)이라고 한다.
이러한 데이터의 총합을 데이터의 개수로 나눈 값으로 재귀식으로 진행하는 필터이다.
적응 필터링(Adaptive Filtering)
마스크 내의 그레이스케일 값에 따라 특성이 변화되는 필터.
영상 내의 위치에 의존하여 경우에 따라 메디언 필터와 더 유사하게 또는 평균 필터와 더 유사하게 동작한다.
역 필터링(Inverse Filtering)
회선 정리를 직접 적용하면 푸리에 영역에서 필터링을 수행할 수 있는데, 잡음이 없다는 가정하에 영상, 필터, 결과의 DFT가 주어진다면 결과를 필터로 나누어 원 영상의 DFT를 복원할 수 있는 필터링이다.
F(μ,ν)는 입력 영상, G(μ,ν)는 오염된 영상, H(μ,ν)는 열화 함수이다.
왼쪽의 식을 오른쪽처럼 변경하여 역변환을 이룬다.
위너 필터링(Wiener Filtering)
복원된 영상의 오류를 통계적 방법으로 모델링하여 잡음이 커지면 화질이 저하되는 역필터의 문제점을 감소시키는 필터. 다른말로는 최소 평균 제곱 오차 필터, 최소 제곱 오차 필터라고도 한다. 이름 그대로 최소 제곱법의 원리에 따라 동작한다.
1. 움직임 열화 (motion blur) 생성 및 복원
– 촬영 시 손떨림으로 카메라가 수직 방향으로 11 픽셀 만큼 움직였다.
– 위의 상황을 시뮬레이션 하여 1) 모션블러를 생성하라.
– 2) 모션블러가 발생한 영상을 위너필터를 사용하여 복원하라.
4개의 tif 형식의 이미지 파일('bridge.tif', 'couple.tif', 'lena.tif', 'peppers.tif') 불러오기
정확히는 파일 이름 옆에 ‘512X512’도 붙어있었지만 임의로 수정하였습니다.
위는 'bridge.tif' 원본 영상이다.
밑은 각각 모션 블러 처리된 영상과 위너 필터가 적용된 영상이다.
적용 결과, 아래로 11픽셀만큼 움직여 생긴 블러 처리가 확실하게 생긴 것을 볼 수 있다.
블러 처리는 원본이랑 비교해봐도 언뜻 보면 형체를 알아차리지 못할 정도로 흐려진 것이 보인다.
위너 필터가 적용된 영상을 보면 원본 영상과 같이 완전한 복원 형태는 아니지만,
형태를 알아볼 수 있게끔 복원한 것을 확인할 수 있었다. 나머지 다른 영상도 살펴보자.
아래는 ‘bridge.tif’ 영상을 처리했을 때와 동일한 코드를 다른 영상에 적용한 것이다.
'couple.tif' 영상
'lena.tif' 영상
'peppers.tif' 영상
원본, 블러, 위너 사진을 동시에 배열해서 사진이 작아져 육안으로 확인하기에 어렵지만, ‘bridge.tif’ 영상을 처리했던 것과 동일한 결과 양상을 보여주고 있다.
2. 초점 열화 생성 및 복원
– 촬영 시 렌즈의 초점(5x5 크기의 평균필터)이 맞지 않고 가우시안 잡음(평균=0, 분산=0.05)이 더해진 열화가 발생했다.
– 위의 상황을 시뮬레이션 하여 1) 열화 영상을 생성하라.
조금 많이 헷갈려서 하나하나 주석을 붙이면서 진행했다.
그래서 설명은 간단하게 원 영상에서 모션 블러와 평균 필터를 적용하고 가우시안 잡음을 입혔다.
그 후 과정은 나중 위너 필터 처리를 위한 과정이고 밑의 열화 영상 출력으로 마무리하였다.
원본 영상과 열화 영상 출력은 위와 같다.
– 2) 초점열화가 발생한 영상을 위너필터(주파수 영역)를 사용하여 최적의 상태로 복원하라.
이제 평균 필터를 512X512로 맞춘 후 주파수 영역에서 잡음 근사화 상수 k에 값을 준 후
위너 필터의 식을 적용시켰다. 여러 값을 넣어봤는데, 0.15와 0.75가 제일 눈으로 보기에는 괜찮아 보여서 두 가지 영상을 추가로 출력해보았다.
추가로 blurgauss_weiner(file) 함수로 정의하였다.
인수 [file]는 사진 이름을 넣으면 된다.
비교를 위해 원본과 열화, K = 0.15, 0.75 값의 영상을 출력해보았다.
잡음 근사화 값이 높으면 밝고 희미하게 바뀌고, 낮아질수록 어둡고 얼룩지지만 약간 선명해진다.
나머지 3장의 사진도 출력 결과를 살펴보자.
'bridge.tif'
'lena.tif'
'peppers.tif'