본문 바로가기

JSP환경에서 OpenCV없는 컬러영상처리

화소영역처리

화소영역처리


엠보싱

원본 사진 --> 결과 사진

public void embossingImage(){
	//엠보싱
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{-1.0,0.0,0.0},
			{0.0,0.0,0.0},
			{0.0,0.0,1.0}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}


	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	//sum=1
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
		}
}

블러링

원본 사진 --> 결과 사진

public void blurrImage(){
	//블러링
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{1.0/9,1.0/9,1.0/9},
			{1.0/9,1.0/9,1.0/9},
			{1.0/9,1.0/9,1.0/9}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=1
	// for(int i=0;i<outH;i++)
//	 	for(int k=0;k<outW;k++)
//	 		tmpOutImage[i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
	for(int i=0;i<outH;i++)
		for(int k=0;k<outW;k++){
			if(tmpOutImage[rgb][i][k]>255.0)
				outImage[rgb][i][k]=255;
			else if(tmpOutImage[rgb][i][k]<0.0)
				outImage[rgb][i][k]=0;
			else
				outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
		}
	}
}

샤프닝

원본 사진 --> 결과 사진

public void sharpenImage(){
	//샤프닝
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{-1.0,-1.0,-1.0},
			{-1.0,9,-1.0},
			{-1.0,-1.0,-1.0}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=1
	// for(int i=0;i<outH;i++)
//	 	for(int k=0;k<outW;k++)
//	 		tmpOutImage[i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}

}

가우시안

원본 사진 --> 결과 사진

public void gaussianImage(){
	//가우시안
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{1.0/16, 1.0/8, 1.0/16},
			{1.0/8, 1.0/4, 1.0/8},
			{1.0/16, 1.0/8, 1.0/16}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=1
	// for(int i=0;i<outH;i++)
//	 	for(int k=0;k<outW;k++)
//	 		tmpOutImage[i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}

}

고주파 샤프닝

원본 사진 --> 결과 사진

public void hpfSharpImage(){
	//고주파샤프닝 알고리즘
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{-1.0/9, -1.0/9, -1.0/9},
			{-1.0/9, 8.0/9, -1.0/9},
			{-1.0/9, -1.0/9, -1.0/9}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=100.0*tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}
}

이동과 차분

원본 사진 --> 결과 사진

public void sadImage(){
	//이동과 차분
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{0.0, -1.0, 0.0},
			{-1.0, 2.0, 0.0},
			{0.0, 0.0, 0.0}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}
	
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;
		
		for(int rgb=0;rgb<3;rgb++){
			for(int i=0;i<outH;i++)
				for(int k=0;k<outW;k++){
					if(tmpOutImage[rgb][i][k]>255.0)
						outImage[rgb][i][k]=255;
					else if(tmpOutImage[rgb][i][k]<0.0)
						outImage[rgb][i][k]=0;
					else
						outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
				}
		}
}

유사연산자

원본 사진 --> 결과 사진

public void opImage(){
	//유사연산자
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];


	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double max = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						if(Math.abs(tmpInImage[rgb][i+1][k+1]-tmpInImage[rgb][i+m][k+n])>=max)
							max = Math.abs(tmpInImage[rgb][i+1][k+1]-tmpInImage[rgb][i+m][k+n]);
				tmpOutImage[rgb][i][k]=(int)max;
			}
		}
	}
	// // //sum=0
	// for(int i=0;i<outH;i++)
//	 	for(int k=0;k<outW;k++)
//	 		tmpOutImage[i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}
}

 


로버츠 마스크

원본 사진 --> 결과 사진

public void robertsImage(){
	//로버츠 마스크
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{-1.0, 0.0, -1.0},
			{0.0, 2.0, 0.0},
			{0.0, 0.0, 0.0}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}
}

소벨 마스크

원본 사진 --> 결과 사진

public void sobelImage(){
	//소벨 마스크
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{0.0, -2.0, -2.0},
			{2.0, 0.0, -2.0},
			{2.0, 2.0, 0.0}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}
}

프리윗 마스크

원본 사진 --> 결과 사진

public void prewittImage(){
	//프리윗 마스크
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];
	
	double [][]mask = {
			{0.0, -1.0, -2.0},
			{1.0, 0.0, -1.0},
			{2.0, 1.0, 0.0}
			};
	
	double [][][]tmpInImage = new double[3][outH+2][outW+2];
	
	int [][][] tmpOutImage = new int[3][outH][outW];
	
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}
	
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}
	
	
	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;
	
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}
}

라플라시안

원본 사진 --> 결과 사진

public void laplacianImage(){
	//라플라시안
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
			{0.0, 1.0, 0.0},
			{1.0, -4.0, 1.0},
			{0.0, 1.0, 0.0}
			};

	double [][][]tmpInImage = new double[3][outH+2][outW+2];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+2;i++){
			for(int k=0;k<inW+2;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+1][k+1]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<3;m++)
					for(int n=0;n<3;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}
}

로그

원본 사진 --> 결과 사진

public void logImage(){
	//로그
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];

	double [][]mask = {
	            {0.0,0.0,-1.0,0.0,0.0},
	            {0.0,-1.0,-2.0,-1.0,0.0},
	            {-1.0,-2.0,16.0,-2.0,-1.0},
	            {0.0,-1.0,-2.0,-1.0,0.0},
	            {0.0,0.0,-1.0,0.0,0.0}
	        };

	double [][][]tmpInImage = new double[3][outH+4][outW+4];

	int [][][] tmpOutImage = new int[3][outH][outW];

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+4;i++){
			for(int k=0;k<inW+4;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+2][k+2]=inImage[rgb][i][k];
			}
		}
	}


	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<5;m++)
					for(int n=0;n<5;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;

	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}

}

도그

원본 사진 --> 결과 사진

public void dogImage(){
	//도그
	outH = inH;
	outW = inW;
	outImage = new int[3][outH][outW];
	
	double[][] mask = {
	            {0.0,0.0,0.0,-1.0,-1.0,-1.0,0.0,0.0,0.0},
	            {0.0,-2.0,-3.0,-3.0,-3.0,-3.0,-3.0,-2.0,0.0},
	            {0.0,-3.0,-2.0,-1.0,-1.0,-1.0,-2.0,-3.0,0.0},
	            {-1.0,-3.0,-1.0,9.0,9.0,9.0,-1.0,-3.0,-1.0},
	            {-1.0,-3.0,-1.0,9.0,19.0,9.0,-1.0,-3.0,-1.0},
	            {-1.0,-3.0,-1.0,9.0,9.0,9.0,-1.0,-3.0,-1.0},
	            {0.0,-3.0,-2.0,-1.0,-1.0,-1.0,-2.0,-3.0,0.0},
	            {0.0,-2.0,-3.0,-3.0,-3.0,-3.0,-3.0,-2.0,0.0},
	            {0.0,0.0,0.0,-1.0,-1.0,-1.0,0.0,0.0,0.0}
	            
	};
	
	double [][][]tmpInImage = new double[3][outH+8][outW+8];
	
	int [][][] tmpOutImage = new int[3][outH][outW];
	
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH+8;i++){
			for(int k=0;k<inW+8;k++){
				tmpInImage[rgb][i][k]=127.0;
			}
		}
	}
	
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				tmpInImage[rgb][i+4][k+4]=inImage[rgb][i][k];
			}
		}
	}
	
	
	//** Image Processing Algorithm **
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<inH;i++){
			for(int k=0;k<inW;k++){
				double S = 0.0;
				for(int m=0;m<9;m++)
					for(int n=0;n<9;n++)
						S+=tmpInImage[rgb][i+m][k+n]*mask[m][n];
				tmpOutImage[rgb][i][k]=(int)S;
			}
		}
	}
	// //sum=0
	for(int rgb=0;rgb<3;rgb++)
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++)
				tmpOutImage[rgb][i][k]+=127.0;
	for(int rgb=0;rgb<3;rgb++){
		for(int i=0;i<outH;i++)
			for(int k=0;k<outW;k++){
				if(tmpOutImage[rgb][i][k]>255.0)
					outImage[rgb][i][k]=255;
				else if(tmpOutImage[rgb][i][k]<0.0)
					outImage[rgb][i][k]=0;
				else
					outImage[rgb][i][k]=(int)tmpOutImage[rgb][i][k];
			}
	}

}

 

'JSP환경에서 OpenCV없는 컬러영상처리' 카테고리의 다른 글

RGB-->HSV, HSV-->RGB  (0) 2022.09.29
히스토그램처리  (0) 2022.09.29
기하학처리  (0) 2022.09.29
화소점처리  (0) 2022.09.29
JSP에서 이미지 받아오기  (0) 2022.09.29