티스토리 뷰

JavaScript에서 했던 영상처리 중 엠보싱임을 해봄.

 

설명은 주석 참고

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
// 영상처리 프로그램 기본 처리
// lena256.raw 파일을 영상처리 알고리즘에 의해서 처리한 후, 결과를 저장하기

// (1) JSP에서 파일 처리
int inW = 512;
int inH = 512;
int outW, outH;
File inFp;
FileInputStream inFs;
inFp = new File("C:/Images/RAW/LENNA512.raw");
inFs = new FileInputStream(inFp.getPath());

// (2) JSP에서 배열 처리
int [][] inImage = new int[inW][inH]; // 메모리 할당

//파일 --> 메모리
for(int i=0; i<inH; i++) {
	for(int k=0; k<inW; k++){
		inImage[i][k] = inFs.read();
	}
}
inFs.close();

// (3) 알고리즘 적용하기
// (중요!) 출력 영상의 크기 결정 --> 알고리즘에 의존
outH = inH;
outW = inW;

//메모리 할당
int[][] outImage = new int[outH][outW];

// mask
int[][] mask = {{-1,0,0},{0,0,0},{0,0,1}};

// 임시 입력 배열 
int tempInput[][] = new int[inH+2][inW+2];

// 임시 입력 배열 초기화
for(int i=0; i<inH+2; i++){
	for(int k=0; k<inW+2; k++){
		tempInput[i][k] = 127;
	}
}
// 입력 배열 --> 임시 입력
for(int i=0; i<inH; i++){
	for(int k=0; k<inW; k++){
		tempInput[i+1][k+1] = inImage[i][k];
	}
}
//회전 연산 알고리즘
for(int i=0; i<inH;i++){
	for(int k=0; k<inW;k++){
		int s=0;
		for(int m=0; m<3; m++){
			for(int n=0;n<3;n++){
				s += mask[m][n] * tempInput[i+m][k+n];
			}
		}
		outImage[i][k] = s;
	}
}

for(int i=0; i<outH; i++){
	for(int k=0; k<outH; k++){
		outImage[i][k] += 127;
	}
}

// 오버플로우 방지
for(int i=0; i<outH; i++){
	for(int k=0; k<outH; k++){
		if(outImage[i][k] > 255){
			outImage[i][k] = 255;
		}
		if(outImage[i][k] < 0){
			outImage[i][k] = 0;
		}
	}
}

// (4) 결과물 파일로 쓰기
File outFp;
FileOutputStream outFs;
outFp = new File("c:/images/raw/LENNA512-out3.raw");
outFs = new FileOutputStream(outFp.getPath());


//메모리 --> 파일
for(int i=0; i<outH; i++) {
	for(int k=0; k<outW; k++){
		outFs.write(outImage[i][k]);
	}
}


outFs.close();
out.println("bye");

%>
</body>
</html>

 

 

 

반응형
LIST
댓글
링크
공지사항
최근에 올라온 글