가우스 퍼 지 알고리즘 디자인 및 구현 GaussianBlur

    ,         http://blog.csdn.net/maozefa/article/details/5576499
namespace GaussianBlur{
#define PI 3.14156
	double * dArray = NULL;
	double dQ = 0;
	int iRadius = 0;

	void InitGaussianBlur(double Q , int R)
	{
		dQ = Q;
		iRadius = R;

		dArray = new double[2*iRadius + 1];

		double x;
		for (int i = -iRadius ; i <= iRadius ; ++i)
		{
			assert(dQ!=0);
			x = i/dQ;
			dArray[i+iRadius] = exp((double)(-x*x/2));
		}

		double dUniform = 0;
		for (int i = -iRadius ; i <= iRadius ; ++i)
		{
			dUniform += dArray[i+iRadius];
		}

		if (dUniform != 1)
		{
			for (int i = -iRadius ; i <= iRadius ; ++i)
			{
				dArray[i+iRadius] /= dUniform;
			}

		}
	}

	double GetFactor(int i)
	{
		if (dArray)
		{
			if (i>=0 && i<2*iRadius+1)
			{
				return dArray[i];
			}
		}

		return 0;
	}

	void UnInitGaussianBlur()
	{
		if (dArray)
		{
			delete []dArray;
			dArray = NULL;
		}
	}
}

위의 이 코드 는 벡터 를 만 드 는 함수 입 니 다.가우스 모호 에는 두 가지 방법 이 있 는데 하 나 는 이원 함 수 를 사용 하 는 것 이다. 하 나 는 공간 적 으로 정상 적 으로 분포 되 어 있 는 이원 함수 나 일원 함 수 를 사용 하 는 것 이다. 이때 이미지 의 모든 줄 에서 만 사용 할 수 있다.가우스 모호 한 두 함수 http://www.cnblogs.com/hoodlum1980/articles/1088567.html
USE 를 정의 하지 않 으 면TWO_GAUSSIANBLUR 매크로 는 그림 을 한 번 처리 합 니 다. 그렇지 않 으 면 두 번 처리 합 니 다. 즉, 줄 에서 한 번 처리 하고 열 에서 한 번 처리 합 니 다.
가우스 퍼 지 는 본질 적 으로 주변의 점 을 이용 하여 중심 점 을 모호 하 게 하 는 것 이다. 예 를 들 어 한 가지 점 이 있다. 이 점 은 주변 픽 셀 값 의 혼합 을 받 아 이 점 에 영향 을 받 고 먼 점 이 이 점 에 미 치 는 영향 이 비교적 적다. 정상 적 인 분포 함 수 를 선택 한 이 유 는 간단 하 다. 바로 가중치 의 합 이 1 이 고 중간 위치 가 차지 하 는 비중 이 가장 크 며 가장자리 로 올 라 갈 수록값 이 작 을 수록
예 를 들다.
이 줄 에는 일련의 점, A0, A1, A2, A3, A4 가 있다.A2 점 은 주변 두 점 의 영향 을 받 아 A2 = 비교적 큰 가중치 * A2 + 작은 가중치 * (A1 + A3) + 최소 가중치 * (A0 + A4), 이 가중치 가 어떻게 되 는 지 1 원 의 정상 분포 함수 로 이 몇 개의 가중치 가 1 에 못 미 칠 것 이다. 정상 분포 의 포인트 값 이 1 이기 때문에 이 를 1 로 확대 해 야 한다.
다음은 Q = 3, R = 5 처리 후의 효과 그림 입 니 다.

좋은 웹페이지 즐겨찾기