반응형
가우시안 필터란?
가우스 함수나 그 절단한 근삿값을 합성곱 적용해 신호를 부드럽게 하는 필터이다. 이미지 처리에 적용할때는 가우시안 블러라고 불리며 쉽게 말하면 흐려지는 효과를 내는 필터이다.
아래는 가우시안 필터를 openCV 를 활용해서 C++로 구현한 코드
#include <stdio.h>
#include "opencv2/opencv.hpp"
//#define MEAN_FILETER
#define GASSUIAN_FILETER
void noisefiltering(IplImage *img)
{
double kernel[3][3];
#ifdef MEAN_FILETER
double avg = 1.0 / 9.0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
kernel[i][j] = avg;
}
}
#endif
#ifdef GASSUIAN_FILETER
double nearest = 2.0 / 16.0;
double far = 1.0 / 16.0;
double self = 4.0 / 16.0;
kernel[0][0] = far;
kernel[0][1] = nearest;
kernel[0][2] = far;
kernel[1][0] = nearest;
kernel[1][1] = far;
kernel[1][2] = nearest;
kernel[2][0] = far;
kernel[2][1] = nearest;
kernel[2][2] = far;
#endif
for (int i = 1; i < img->width - 1; i++)
{
for (int j = 1; j < img->height - 1; j++)
{
CvScalar finalColor;
finalColor.val[0] = finalColor.val[1] = finalColor.val[2] = 0;
for (int u = 0; u < 3; u++)
{
for (int v = 0; v < 3; v++)
{
CvScalar color = cvGet2D(img, j + v - 1, i + u - 1);
finalColor.val[0] += kernel[u][v] * color.val[0];
finalColor.val[1] += kernel[u][v] * color.val[1];
finalColor.val[2] += kernel[u][v] * color.val[2];
}
}
cvSet2D(img, j, i, finalColor);
}
}
}
IplImage *merge(IplImage *img, IplImage *cpimg)
{
IplImage *bimg = cvCreateImage(cvSize(img->width * 2, img->height), 8, 3);
for (int i = 0; i < img->width; i++)
{
for (int j = 0; j < img->height; j++)
{
auto color1 = cvGet2D(img, j, i);
auto color2 = cvGet2D(cpimg, j, i);
cvSet2D(bimg, j, i, color1);
cvSet2D(bimg, j, img->width+i, color2);
}
}
return bimg;
}
int main(void)
{
IplImage *img = cvLoadImage("img//cat1.jpg");
IplImage *cpimg = cvCreateImage(cvGetSize(img), 8, 3);
cvCopy(img, cpimg);
int iter = 2;
for (int i = 0; i < iter; i++)
{
noisefiltering(img);
}
IplImage *bimg = merge(cpimg, img);
cvShowImage("test_img", bimg);
cvWaitKey();
cvDestroyAllWindows();
cvReleaseImage(&img);
}
위 코드 결과 :
고양이 얼굴 쪽을 보면 흐려진 것을 확인할 수 있다.
반응형
'IT' 카테고리의 다른 글
사진 노이즈 제거하기 (gaussian filter, gaussian blur) (0) | 2021.01.04 |
---|---|
[openCV / C++ ] 픽셀 아트 만들기 (0) | 2020.12.31 |
[openCV / c++] 사진 반만 흑백으로 만들기 / 사진 밝게 만들기 / 사진 어둡게 만들기 (0) | 2020.12.30 |
[c++/openCV] 비주얼 스튜디오(visual stdio)에 openCV 설치하기 (0) | 2020.12.30 |
[Web] css / html tag 태그 정리 - 3 (0) | 2020.12.25 |
댓글