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; }
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); }