gaussFilte.cpp 1.5 KB
#include "gaussFilte.h"

void gaussianFilter(unsigned char* data, int width, int height, int type)   
{ 
	if (type == 3)
	{
		int i, j, index, sum;   
		int templates[9] = {1, 2, 1, 
			                2, 4, 2, 
							1, 2, 1}; //模板的值   

		unsigned char* tmpdata = new unsigned char[height * width];

		for (i = 0; i < height * width; i++)
		{
			tmpdata[i] = data[i];
		}

		for(i = 1; i < height - 1; i++)   
		{   
			for(j = 1; j < width - 1; j++)   
			{             
				index = sum = 0;   
				for(int m = i - 1;m < i + 2; m++)   
				{   
					for(int n = j - 1; n < j + 2; n++)   
					{   
						sum += tmpdata[m * width + n] * templates[index++];  //处理   
					}   
				}   
				data[i * width + j] = sum >> 4;           
			}   
		}   
		delete[] tmpdata;   
	}
	else
	{
		int i, j, index, sum;   
		int templates[25] = {1, 4,  7,  4,  1, 
			                 4, 16, 26, 16, 4,
							 7, 26, 41, 26, 7,
							 4, 16, 26, 16, 4,
							 1, 4,  7,  4,  1}; //模板的值   

		unsigned char* tmpdata = new unsigned char[height * width];
		for (i = 0; i < height * width; i++)
		{
			tmpdata[i] = data[i];
		}

		for(i = 1; i < height - 1; i++)   
		{   
			for(j = 1; j < width - 1; j++)   
			{             
				index = sum = 0;   
				for(int m = i - 2;m < i + 3; m++)   
				{   
					for(int n = j - 2; n < j + 3; n++)   
					{   
						sum += tmpdata[m * width + n] * templates[index++];  //处理   
					}   
				}   
				data[i * width + j] = sum / 273;           
			}   
		}   
		delete[] tmpdata;   
	}
}