void specialFilter::colorExtract(char *image_path[])
{
	int imageIndex = 0;

	unsigned char *probeImage;
	unsigned char *mappedImage;
	int value;

	setFilepath(image_path[8]);
	probeImage = imageReader();

	setFilepath(image_path[9]);
	mappedImage = imageReader();


	for(value = 0; value < 256; value++)
	{
		redMapping[value] =0;
		blueMapping[value] =0;
		greenMapping[value] = 0;
	}

	for(imageIndex = 0; imageIndex < rowSize*colSize*3;)
	{
		
		redMapping[probeImage[imageIndex]] = mappedImage[imageIndex++];
		greenMapping[probeImage[imageIndex]] = mappedImage[imageIndex++];
		blueMapping[probeImage[imageIndex]] = mappedImage[imageIndex++];
	}

	setFilepath("../redCoarseMap.dat");
	imageWriter(redMapping,256);

	setFilepath("../blueCoarseMap.dat");
	imageWriter(blueMapping,256);
	
	setFilepath("../greenCoarseMap.dat");
	imageWriter(greenMapping,256);

	linearMapping(redMapping);
	linearMapping(blueMapping);
	linearMapping(greenMapping);

	setFilepath("../redFineMap.dat");
	imageWriter(redMapping,256);

	setFilepath("../blueFineMap.dat");
	imageWriter(blueMapping,256);
	
	setFilepath("../greenFineMap.dat");
	imageWriter(greenMapping,256);
	
	delete probeImage;
	delete mappedImage;
}
Beispiel #2
0
Shader::Shader( const std::string filepathIn, const GLenum shaderTypeIn ) {
	setFilepath( filepathIn );
	setShaderType( shaderTypeIn );
	compiled = false;
	return;
} // Shader
////////////////////edge detection/////////////
void processImage::sobelOperator(int subMode, float threshold)
{
	int imageIndex;
	int rowIndex, colIndex;

	int mask_index_x, mask_index_y;
	int imageRowMask, imageColMask;

	int mask[3][3] = {1, 2, 1, 2, 0, 2, 1, 2, 1};

	int rightHandAvg_X = 0;
	int	leftHandAvg_X = 0;
	int	topLvlAvg_Y = 0;
	int	bottomLvlAvg_Y = 0;
	int thresholdValue = 0, newThresh = 0;

	unsigned char *xgradient = new unsigned char[rowSize * colSize];
	unsigned char *ygradient = new unsigned char[rowSize * colSize];

	for(rowIndex = 0; rowIndex < rowSize; rowIndex++)
		for(colIndex = 0; colIndex < colSize; colIndex++)
		{
			for(mask_index_x = -1; mask_index_x < 2; mask_index_x++)
			{
				mask_index_y = -1;
				imageRowMask = rowIndex + mask_index_x;
				imageColMask = colIndex + mask_index_y;
				leftHandAvg_X = leftHandAvg_X + mask[mask_index_x + 1][mask_index_y + 1] * 
					inputImageData[abs(imageRowMask)*colSize + abs(imageColMask)];
			}
			for(mask_index_x = -1; mask_index_x < 2; mask_index_x++)
			{
				mask_index_y = 1;
				imageRowMask = rowIndex + mask_index_x;
				imageColMask = colIndex + mask_index_y;
				rightHandAvg_X = rightHandAvg_X + mask[mask_index_x + 1][mask_index_y + 1] * 
					grayImage[abs(imageRowMask)*colSize + abs(imageColMask)];
			}
			for(mask_index_y = -1; mask_index_y < 2; mask_index_y++)
			{
				mask_index_x = -1;
				imageRowMask = rowIndex + mask_index_x;
				imageColMask = colIndex + mask_index_y;
				topLvlAvg_Y = topLvlAvg_Y + mask[mask_index_x + 1][mask_index_y + 1] * 
					inputImageData[abs(imageRowMask)*colSize + abs(imageColMask)];
			}
			for(mask_index_y = -1; mask_index_y < 2; mask_index_y++)
			{
				mask_index_x = 1;
				imageRowMask = rowIndex + mask_index_x;
				imageColMask = colIndex + mask_index_y;
				bottomLvlAvg_Y = bottomLvlAvg_Y + mask[mask_index_x + 1][mask_index_y + 1] * 
					grayImage[abs(imageRowMask)*colSize + abs(imageColMask)];
			}
			xgradient[rowIndex*colSize+colIndex] = (rightHandAvg_X - leftHandAvg_X)/4;
			ygradient[rowIndex*colSize+colIndex] = (topLvlAvg_Y - bottomLvlAvg_Y)/4;

			rightHandAvg_X = 0;
			leftHandAvg_X = 0;
			topLvlAvg_Y = 0;
			bottomLvlAvg_Y = 0;

			//outputImage[rowIndex*colSize+colIndex] = xgradient[rowIndex*colSize+colIndex];
			//outputImage[rowIndex*colSize+colIndex] = ygradient[rowIndex*colSize+colIndex];
			grayImage[rowIndex*colSize+colIndex] = sqrt((double)(xgradient[rowIndex*colSize+colIndex] * xgradient[rowIndex*colSize+colIndex])
				+ (ygradient[rowIndex*colSize+colIndex] * ygradient[rowIndex*colSize+colIndex]));
		}
	
	thresholdValue = edgeThresholding(threshold);

	if(subMode == 4)
	{
		for(rowIndex = 1; rowIndex < rowSize-1; rowIndex++)
			for(colIndex = 1; colIndex < colSize-1; colIndex++)
			{
				if(xgradient[rowIndex*colSize+colIndex] > ygradient[rowIndex*colSize+colIndex])
				{
					if(grayImage[rowIndex*colSize+colIndex] > grayImage[(rowIndex+1)*colSize+colIndex] &&
						grayImage[rowIndex*colSize+colIndex] > grayImage[(rowIndex-1)*colSize+colIndex] && 
						grayImage[rowIndex*colSize+colIndex] > thresholdValue)
						outputImage[rowIndex*colSize+colIndex] = 0;
					else
						outputImage[rowIndex*colSize+colIndex] = 255;
				}
				else
				{
					if(grayImage[rowIndex*colSize+colIndex] > grayImage[rowIndex*colSize+colIndex+1] &&
						grayImage[rowIndex*colSize+colIndex] > grayImage[rowIndex*colSize+colIndex-1] &&
						grayImage[rowIndex*colSize+colIndex] > thresholdValue)
						outputImage[rowIndex*colSize+colIndex] = 0;
					else
						outputImage[rowIndex*colSize+colIndex] = 255;
				}
			}

	}
	else
	{
		for(rowIndex = 0; rowIndex < rowSize; rowIndex++)
			for(colIndex = 0; colIndex < colSize; colIndex++)
			{
				if(grayImage[rowIndex*colSize+colIndex] < thresholdValue)
					outputImage[rowIndex*colSize+colIndex] = 255;
				else
					outputImage[rowIndex*colSize+colIndex] = 0;
			}
	}

		setFilepath("../xGradMap.raw");
		imageWriter(xgradient);
		
		setFilepath("../yGradMap.raw");
		imageWriter(ygradient);

	delete (xgradient);
	delete (ygradient);
}