영상의 필터링

BERT·2023년 4월 22일
0

Computer Vision

목록 보기
21/56

영상의 필터링

영상에서 필요한 정보만 통과시키고 원치 않는 정보는 걸러내는 작업
블러링, 샤프닝, 잡음 제거, 엣지 검출 등

주파수 공간에서의 필터링

푸리에 변환을 이용하여 영상을 주파수 공간으로 변환하여 필터링을 수행하는 방법

공간적 필터링

영상의 픽셀 값을 직접 이용하는 필터링 방법
주로 마스크 연상을 이용함
OpenCV에서는 공간적 필터링 마스크 크기가 커질 경우 주파수 공간에서의 필터링을 수행

공간적 필터링

다양한 모양의 크기와 마스크

필터링에 사용되는 마스크는 다양한 크기, 모양을 지정할 수 있지만 대부분 3x3 정방형 필터를 사용

마스크의 형태와 값에 따라 필터의 역할 결정

영상 부드럽게 만들기
영상 날카롭게 만들기
잡음 제거
엣지 검출

3x3 크기의 마스크를 이용한 공간적 필터링

dst(x,y)=j=02i=02m(i,j)src(x+i1,y+j1)dst(x,y)=\displaystyle\sum_{j=0}^{2}\displaystyle\sum_{i=0}^{2}m(i,j)src(x+i-1,y+j-1)

영상 가장자리 픽셀 확장하기

src : 입력 영상
dst : 출력 영상
top : 윗쪽 확장 크기
bottom : 아래쪽 확장 크기
left : 왼쪽 확장 크기
right : 오른쪽 확장 크기
boarderType : 가장자리 픽셀 확장 방법
value : borderType이 BORDER_CONSTANT인 경우 사용할 값

void copyMakeBorder(InputArray src, OutputArray dst,
					int top, int bottom,
                    int left, int right,
                    int boarderType,
                    const Scalar& value = Scalar());
boarderType설명
BORDER_CONSTANT0으로 패딩
BORDER_REPLICATE최외곽 픽셀로 패딩
BORDER_REFLECT최외곽 픽셀 포함 미러링
BORDER_REFLECT_101최외곽 픽셀 미포함 미러링

기본적인 2D 필터링 함수

src : 입력 영상
dst : 출력 영상
ddepth : 원하는 결과 영상의 깊이를 지정
kernel : 1차원 실수형 필터 마스크 행렬
anchor : 고정점 위치
delta : 추가적으로 더할 값
borderType : 가장자리 픽셀 처리 방법

void filter2D(InputArray src, OutputArray dst,
			  int ddepth, 
              InputArray kernel,
              Point anchor = Point(-1,-1),
              double delta = 0,
              int borderType = BORDER_DEFAULT);

엠보싱 필터

엠보싱
직물이나 종이, 금속판 등에 올록볼록한 형태로 만든 객체의 윤곽 또는 무늬

엠보싱 필터
입력 영상을 엠보싱 느낌이 나도록 변환하는 필터
결과를 효과적으로 보여주기 위해 128을 더해서 보여줌


평균 값 필터

각각의 좌표에서 주변 픽셀 값들의 산술 평균을 계산하고 이를 출력 영상의 픽셀 값으로 설정
영상에 평균 값 필터를 적용하면 인접한 픽셀 간의 급격한 grayscale 값 변화가 줄어들어 날카로운 엣지가 무뎌지고 영상에 있는 잡음이 감소하는 효과

src : 입력 영상
dst : 출력 영상
ksize : 평균값 필터 크기
anchor : 고정점
borderType : 가장자리 픽셀 확장 방식

void blur(InputArray src, OutputArray dst, Size ksize,
		  Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT);

평균값 필터에 의한 블러링의 단점

필터링 대상 위치에서 가까이있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치를 사용하여 평균을 계산하므로 현재 위치의 픽셀 값의 비중은 줄어들고 상대적으로 멀리 떨어져있는 픽셀들의 영향이 커짐

가우시안 필터

정규 분포와 가우시안 함수

정규 분포(normal distribution)

평균을 중심으로 좌우대칭인 종 모양을 갖는 확률 분포
가우시안 분포

가우시안 함수(Gaussian function)

정규 분포를 나타내는 함수 수식
G(x)=12πσe(xμ)22σ2G_{}(x)=\displaystyle\frac{1}{\sqrt{2\pi} \sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}

2차원 가우시안 함수
Gσ(x,y)=12πσ2ex2+y22πσ2G_{\sigma}(x,y)=\displaystyle\frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\pi\sigma^2}}

src : 입력 영상
dst : 출력 영상
ksize : 가우시안 커널 크기
sigmaX : x방향 sigma
sigmaY : y방향 sigma
borderType : 가장자리 픽셀 처리 방식

void GaussianBlur(InputArray src, OutputArray dst, Size ksize,
				  double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT);

sigmasigma값이 커질수록 내부에서 사용하는 커널 사이즈가 증가하고 연산 시간도 증가


샤프닝

언샤프 마스크 필터링

평균값 필터를 사용한 언샤프 마스크 필터링

날카롭지 않은 영상
블러링된 영상을 이용하여 날카로운 영상을 생성

h(x)=2f(x)fˉ(x)h(x)=2f(x)-\bar{f}(x)

가우시안 필터를 사용한 언샤프 마스크 필터링

h(x)=f(x)+αg(x,y)h(x)=f(x)+\alpha\cdot g(x,y)
h(x)=(1+α)f(x,y)αGσ(f(x,y))h(x)=(1+\alpha)f(x,y)-\alpha\cdot G_{\sigma}(f(x,y))

잡음 제거 필터

영상의 잡음

영상의 픽셀 값에 추가되는 원치 않는 형태의 신호
카메라에서 광학 신호를 전기적 신호로 변환하는 과정(센서)에서 잡음이 추가될 수 있음
f(x,y)=s(x,y)+n(x,y)f(x,y)=s(x,y)+n(x,y)

잡음의 종류

Salt&Pepper noise
Gaussian noise

가우시안 잡음 생성

dst : 정상 분포 난수 행렬
mean : 평균
stddev : 표준편차

void randn(InputOutputArray dst, InputArray mean, InputArray stddev);

프로파일을 이용한 잡음 분석

프로파일

영상에서 특정 경로 상에 있는 픽셀의 밝기 값을 그래프 형태로 나타낸 것
Line profile, intensity profile

양방향 필터

bilateral filter
엣지 보전 잡음 제거 필터의 하나
평균 값 필터 또는 가우시안 필터는 엣지 부근에서도 픽셀 값을 평탄하게 만드는 단점이 있음
기준 픽셀과 이웃 픽셀과의 거리, 그리고 픽셀 값의 차이를 함께 고려하여 블러링 정도를 조절

엣지가 아닌 부분에서만 블러링

p,q : p점 q점의 픽셀 좌표
Ip,IqI_p,I_q : p점과 q점에서의 픽셀 값
WpW_p : 필터 커널 합이 1이 되도록 만드는 정규화 상수

BF[I]p=1WpqSGσs(pq)Gσr(IpIq)IqBF[I]_p=\displaystyle\frac{1}{W_p}\displaystyle\sum_{q\isin S} G_{\sigma_s}(\|p-q\|)G_{\sigma_r}(|I_p-I_q|)I_q

src : 입력 영상
dst : 출력 영상
d : 필터링에 사용될 이웃 픽셀의 거리
sigmaColor : 색 공간에서 필터의 표준 편차
sigmaSpace : 좌표 공간에서 필터의 표준 편차
borderType : 가장자리 픽셀 처리 방식

void bilateralFilter(InputArray src, OutputArray dst,
					 int d,
                     double sigmaColor,
                     double sigmaSpace,
                     borderType = BORDER_DEFAULT);

bilateral filter 사용 시 속도는 느려지지만 잡음 제거 성능은 우수

0개의 댓글