박스 스무딩에 대해 알아보자
평활화(smoothing)한다고 한다.
기본적인 원리는 마스트를 돌리면서 주변 픽셀의 값을 더한 후 이를 평균하여 결과값을 계산한다.
가우시안 스무딩과 마찬가지로
노이즈 제거,윤곽 정보 추출을 목적으로 하는 전처리 과정이라고 할 수 있다.
여기서는 3x3 마스크에 대해 알아볼텐데
박스 스무딩은
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
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("AVE256.raw","rb");
if(infile==NULL){printf("error!");return 0;}
fread(InImg, sizeof(char),256*256,infile);
fclose(infile);
int MaskBox[3][3]={{1,1,1},
{1,1,1},
{1,1,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 += (MaskBox[mr][mc]*InImg[i+mr-1][j+mc-1]);
newValue /= 9; //마스크의 합의 크기로 나누기:값의 범위를 0에서 255로 함
OrgImg[i][j]=(BYTE)newValue;//BYTE값으로 변환
}
}
FILE *outfile = fopen("result.raw","wb");
fwrite(OrgImg,sizeof(char),256*256,outfile);
fclose(outfile);
return 0;
}
왼쪽이 원 영상이고 오른쪽이 박스 스무딩을 거친 영상이다.
'Computer Vision' 카테고리의 다른 글
윤곽선 검출(Edge Detection) 에지 디텍션 (1) | 2014.07.10 |
---|---|
중간값 필터 미디언 필터(Median Filter) (4) | 2014.07.08 |
가우시안 스무딩(gaussian smoothing) (1) | 2014.06.12 |
명암대비 히스토그램 스트레칭(contrast stretching) (0) | 2014.06.11 |
히스토그램 평활화(Histogram Equalization) (3) | 2014.06.09 |