영상의
마스크 기반 처리에서 가우시안 스무딩 필터링(Gaussian smoothing filtering)에
대해 알아보자.
* 스무딩(smoothing)은 잡음제거에 많이 쓰인다.
그중의 가우시안 스무딩 필터링에서
가우시안 분포란
- 모든 과학분야에서 가장 보편적인 분포
- 실험오차 측정 등에 많이 쓰이는 분포
- 정규분포 공식에서 평균값을 0으로 하여 유도한 분포
가우시안 스무딩 필터링 이란?
- 가우시안 분포를 영상처리에 적용한 것
- 정규분포, 확률분포에 의해 생성된 잡음을 제거하기 위한 필터
(랜덤하게 분포된 영상의 잡음을 분석해보면 가우시안 분포를 보인다.)
가우시안 분포 함수의 특성
• 2차원 가우시안 분포 함수는 순환대칭(rotationally symmetric) 특징
→ 마스크로 회선한 smooting 한 결과는 방향이 같다.
• 가우시안 분포 함수는 단일 돌출(Single peak) 부분을 가진다.
→ 중앙에 위치한 화소와 먼 거리에 있는 이웃 화소값들을 가중치로
감소시켜, 가중한 이웃의 평균값으로 대치하는 특징을 가짐
• 가우시안 분포 함수의 퓨리에 변환은 빈번한 스펙트럼상에 단일 돌출
부분을 가진다.
→ 가우시안 퓨리에 변환 자체가 가우시안 분포이다.
→ 이를 응용한 사례가 가우시안 블러링이다
→ 공간 및 주파수 영역에 가우시안 분포 함수 적용 가능
• 스무딩 정도인 가우시안 분포 마스크의 폭은 표준편차 σ가 파라메터로 작동하며,
표준편차 간 의 관계와 스무딩 정도는 매우 밀접하다.
→ 표준편차 σ가 클수록 더 큰 스무딩 효과를 가진다.
1차원 가우시안 분포(왼쪽) -> 평균값 : 0, 표준편차 : 1
2차원 가우시안 분포(오른쪽) -> 평균값 : (0,0), 표준편차 : 1
표준편차 0.4 이면 3x3 마스크의 크기를 가지며, 0.8이면 5x5 마스크의 크기를 가진다.
따라서 표준편차 가 가우시안 분포의 폭을 결정한다.
가우시안 분포를 좀 알았다면 이제 영상에 적용해보자
여기서 우리는 3x3 마스크를 사용할 것이다.
3x3 가우시안 커널은
1/16 |
1/8 |
1/16 |
1/8 |
1/4 |
1/8 |
1/16 |
1/8 |
1/16 |
이 마스크는
1 |
2 |
1 |
2 |
4 |
2 |
1 |
2 |
1 |
이제 가우시안 스무딩을 해보자!!
#include <math.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
int main()
{
int height= 256;
int width=256;
int i,j,vmax,vmin;
int m_HistoArr[256];
unsigned char InImg[256][256];
unsigned char OrgImg[256][256];
FILE *infile= fopen("HISTO-COUPLE256X256.raw","rb");
if(infile==NULL){printf("error!");return 0;}
fread(InImg, sizeof(char),256*256,infile);
fclose(infile);
int MaskGaussian[3][3]={{1,2,1},
{2,4,2},
{1,2,1}};
int heightm1=height-1;//중복계산을 피하려고
int widthm1=width-1;//중복계산을 피하려고
int mr,mc;
int newValue;
//결과 이미지 0으로 초기화
for(i=0;i<height;i++)
for(j=0;j<width;j++)
OrgImg[i][j]=0;
for(i=1; i<heightm1; i++)
{
for(j=1; j<widthm1; j++)
{
newValue=0; //0으로 초기화
for(mr=0;mr<3;mr++)
for(mc=0;mc<3;mc++)
newValue += (MaskGaussian[mr][mc]*InImg[i+mr-1][j+mc-1]);
newValue /= 20; //마스크의 합의 크기로 나누기:값의 범위를 0에서 255로 함
OrgImg[i][j]=(BYTE)newValue;//BYTE값으로 변환
}
}
FILE *outfile = fopen("result_HISTO-COUPLE256X256.raw","wb");
fwrite(OrgImg,sizeof(char),256*256,outfile);
fclose(outfile);
return 0;
}
다음은 가우시안 필터를 사용한 스무딩을 한 이미지이다.
원래 이미지(왼쪽) 적용된 이미지(오른쪽)
HISTO-COUPLE256X256.RAWresult_HISTO-COUPLE256X256.raw
원래 이미지(왼쪽) 적용된 이미지(오른쪽)
'Computer Vision' 카테고리의 다른 글
중간값 필터 미디언 필터(Median Filter) (4) | 2014.07.08 |
---|---|
박스 스무딩(Box smoothing) (0) | 2014.06.25 |
명암대비 히스토그램 스트레칭(contrast stretching) (0) | 2014.06.11 |
히스토그램 평활화(Histogram Equalization) (3) | 2014.06.09 |
히스토그램(histogram building) (12) | 2014.06.06 |