티스토리 뷰
영상처리 중 블러링을 해봄
사진상으로 차이가 많이 나지 않는 것 같아서 아쉽...
<%@ 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
double[][] mask = {{1.0/9.0,1.0/9.0,1.0/9.0},{1.0/9.0,1.0/9.0,1.0/9.0},{1.0/9.0,1.0/9.0,1.0/9.0}};
// 임시 입력 배열
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++){
double 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] = (int)s;
}
}
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;
}
}
}
/*// 메모리 할당
int[][] outImage = new int[outH][outW];
// 진짜 영상처리 알고리즘
for(int i=0; i<inH; i++){
for (int k=0; k<inW; k++){
outImage[i][k] = 255 - inImage[i][k];
}
}*/
// (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
'공부합시다 > 찍먹' 카테고리의 다른 글
[JSP]파일 전송 - 클라이언트 파일 / 서버 파일 (0) | 2021.04.27 |
---|---|
[JSP]영상처리 알고리즘 - 엠보싱 (0) | 2021.04.26 |
[Oracle DBMS] 데이터 활용하기 (0) | 2021.04.22 |
[Python] Textminning in Python (0) | 2021.04.22 |
[Python] 기초 쌓기 (0) | 2021.04.22 |
댓글