Computer Vision

박스 스무딩(Box smoothing)

익플루 2014. 6. 25. 11:06
반응형

박스 스무딩에 대해 알아보자

평활화(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;
}

 

 

 

                           AVE256.RAWresult.raw

 

 

왼쪽이 원 영상이고 오른쪽이 박스 스무딩을 거친 영상이다.

 

 

 

 

 

 

 

 

반응형