지난번 비트맵 이미지 처리하기에서 간단히 칼라영상을 흑백 영상으로 만들어보고 , 최종적으로 이진화 해 보았습니다.

이런 일련의 영상처리 과정은 결국 두개의 영상을 비교해서 차이점이 있는지를 판단하기 위해서 였습니다.

이번 시간에는 영상처리시 노이즈가 발생할 경우 이미지 전체를 흐리게 처리해서 노이즈를 약화 시키는

방법중 가장 간단한 방법을 해보겠습니다.


 이미지를 흐릿하게 만드는 방법을 blurring 이라고 하는데 본포럼을 잘 찾아보면 관련된 좋을 글들이 있으니 참고 하시기 바랍니다.

여기서는 단순히 이미지를 흐리게 하는 방법이라 생각 하시면 됩니다.


02.jpg

사용할 방법은 하나의 픽셀을 중심으로 주변의 픽셀들의 값을 더해 평균을 낸후 대입 하는 방법입니다.

01.jpg 

하나씩 모든 픽셀의 주변값을 처리하므로  위 그림의 좌측 이미지를 블러링 하면 오른쪽 과 같이 됩니다.


그럼 실제로 해 보겠습니다.


1.jpg  

 -> 먼지 원본 이미지 입니다.


2.jpg 

-> 위 이미지는 임의의 지점에 검은색 점을 만들어 노이즈를 발생된 상황이라 가정한 영상 입니다.

소스---------------------------------------------------------------------------

//24 bit 트루컬러 이미지에 노이즈를 발생 시킨다.

if(hinfo.biBitCount == 24)

{

for(i=0; i<hinfo.biHeight; i++)

{

for(j=0; j<hinfo.biWidth; j++)

{

B=lpimg[i*rwsize2+3*j];

G=lpimg[i*rwsize2+3*j+1];

R=lpimg[i*rwsize2+3*j+2];


if(!(rand()%100))

{

R=G=B=0;

}

lpoutimg[i*rwsize2+3*j]= B;

lpoutimg[i*rwsize2+3*j+1]= G;

lpoutimg[i*rwsize2+3*j+2]= R;

}

}

}

---------------------------------------------------------------------------------

임의의 지점에 검은색 점을 만들어냅니다.


3.jpg 

-> 노이즈가 발생한 영상을 블러링한 영상 입니다.

-소스-------------------------------------------------------------------------

BYTE R,G,B;

//24 bit 트루컬러 이미지를 블러링 한다.

if(hinfo.biBitCount == 24)

{

for(i=0; i<hinfo.biHeight; i++)

{

for(j=0; j<hinfo.biWidth; j++)

{

B= (lpimg[(i-1)*rwsize2 + 3*(j-1)]+

lpimg[(i-1)*rwsize2 + 3*j]+

lpimg[(i-1)*rwsize2 + 3*(j+1)]+

lpimg[i*rwsize2 + 3*(j-1)]+

lpimg[i*rwsize2 + 3*j]+

lpimg[i*rwsize2 + 3*(j+1)]+

lpimg[(i+1)*rwsize2 + 3*(j-1)]+

lpimg[(i+1)*rwsize2 + 3*j]+

lpimg[(i+1)*rwsize2 + 3*(j+1)])/9;


G=  (lpimg[(i-1)*rwsize2 + 3*(j-1)+1]+

lpimg[(i-1)*rwsize2 + 3*j+1]+

lpimg[(i-1)*rwsize2 + 3*(j+1)+1]+

lpimg[i*rwsize2 + 3*(j-1)+1]+

lpimg[i*rwsize2 + 3*j+1]+

lpimg[i*rwsize2 + 3*(j+1)+1]+

lpimg[(i+1)*rwsize2 + 3*(j-1)+1]+

lpimg[(i+1)*rwsize2 + 3*j+1]+

lpimg[(i+1)*rwsize2 + 3*(j+1)+1])/9;


R= (lpimg[(i-1)*rwsize2 + 3*(j-1)+2]+

lpimg[(i-1)*rwsize2 + 3*j+2]+

lpimg[(i-1)*rwsize2 + 3*(j+1)+2]+

lpimg[i*rwsize2 + 3*(j-1)+2]+

lpimg[i*rwsize2 + 3*j+2]+

lpimg[i*rwsize2 + 3*(j+1)+2]+

lpimg[(i+1)*rwsize2 + 3*(j-1)+2]+

lpimg[(i+1)*rwsize2 + 3*j+2]+

lpimg[(i+1)*rwsize2 + 3*(j+1)+2])/9;


lpoutimg[i*rwsize2+3*j]= B;

lpoutimg[i*rwsize2+3*j+1]= G;

lpoutimg[i*rwsize2+3*j+2]= R;

}

}

}

---------------------------------------------------------------------

주변의 픽셀값들이 영향을 받기 때문에 점이 넓이가 커지고 색이 약해 진 것을 볼 수 있습니다.



4.jpg 

-> 이진화를 하기전에 그레이스케일로 변환 한 영상입니다. 



5.jpg 

-> 이진화 한 영상입니다.

블러링 과정을 거처 결국 노이즈가 필터링 됐음을 확인 할 수 있습니다.



6.jpg

위 이미지는 노이즈가 발생한 영상을 블러링 처리하지 않고 그대로 gray -> bin 과정으로 진행한

영상입니다.

만약 이상태로 비교 과정으로 간다면 두개의 영상은 다른 이미지로 판단되겠지요.