728x90
2021/03/24(화)
엠보싱 처리하는 메소드
- 2개의 사진중에 선택을 받아 선택한 사진을 엠보싱처리
3x3 영역으로 처리
inImageArray : 첫번째 사진이 저장되어 있는 배열
secondImageArray : 두번째 사진이 저장되어 있는 배열
//엠보싱
function embossImage() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
//엠보싱 화소 영역 처리
var mask = [[-1., 0., 0.],
[0., 0., 0.],
[0., 0., 1.]];
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + 2); // 2칸 큰 배열
for (var i = 0; i < inHeight + 2; i++)
tmpInputArray[i] = new Array(inWidth + 2);
//임시 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + 1][k + 1] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255.0) {
v = 255.0;
}
else if (v < 0.0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//엠보싱 화소 영역 처리
//입시 입력 배열
tmpInputArray = new Array(secondHeight + 2); // 2칸 큰 배열
for (var i = 0; i < secondHeight + 2; i++)
tmpInputArray[i] = new Array(secondWidth + 2);
//임시 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + 1][k + 1] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255.0) {
v = 255.0;
}
else if (v < 0.0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
블러싱처리 메소드
//블러싱
function blurrImage() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
// 화소 영역 처리
var mask = [[1 / 9., 1 / 9., 1 / 9.],
[1 / 9., 1 / 9., 1 / 9.],
[1 / 9., 1 / 9., 1 / 9.]];
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + 2); // 2칸 큰 배열
for (var i = 0; i < inHeight + 2; i++)
tmpInputArray[i] = new Array(inWidth + 2);
//임시 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + 1][k + 1] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//입시 입력 배열
tmpInputArray = new Array(secondHeight + 2); // 2칸 큰 배열
for (var i = 0; i < secondHeight + 2; i++)
tmpInputArray[i] = new Array(secondWidth + 2);
//임시 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + 1][k + 1] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
샤프닝 처리 메소드
//샤프닝
function sharpeImage() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
// 화소 영역 처리
var mask = [[0., -1., 0.],
[-1., 5., -1.],
[0., -1., 0.]];
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + 2); // 2칸 큰 배열
for (var i = 0; i < inHeight + 2; i++)
tmpInputArray[i] = new Array(inWidth + 2);
//임시 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + 1][k + 1] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//입시 입력 배열
tmpInputArray = new Array(secondHeight + 2); // 2칸 큰 배열
for (var i = 0; i < secondHeight + 2; i++)
tmpInputArray[i] = new Array(secondWidth + 2);
//임시 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + 1][k + 1] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
고주파샤프닝 메소드
//고주파 샤프닝
function hpfSharpeImage() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
//화소 영역 처리
var mask = [[-1 / 9., -1 / 9., -1 / 9.],
[-1 / 9., 8 / 9., -1 / 9.],
[-1 / 9., -1 / 9., -1 / 9.]];
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + 2); // 2칸 큰 배열
for (var i = 0; i < inHeight + 2; i++)
tmpInputArray[i] = new Array(inWidth + 2);
//임시 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + 1][k + 1] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += 100 * mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
//만약, 마스크의 합계가 0이면, 결과를 35 더하자.
// for (var i = 0; i < inHeight; i++)
// for (var k = 0; k < inWidth; k++) {
// tmpOutputArray[i][k] += 35.0;
// }
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//입시 입력 배열
tmpInputArray = new Array(secondHeight + 2); // 2칸 큰 배열
for (var i = 0; i < secondHeight + 2; i++)
tmpInputArray[i] = new Array(secondWidth + 2);
//임시 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + 1][k + 1] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
가우시처리 메소드
//가우시
function gaussianImage() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
//화소 영역 처리
var mask = [[1 / 16., 1 / 8., 1 / 16.],
[1 / 8., 1 / 4., 1 / 8.],
[1 / 16., 1 / 8., 1 / 16.]];
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + 2); // 2칸 큰 배열
for (var i = 0; i < inHeight + 2; i++)
tmpInputArray[i] = new Array(inWidth + 2);
//임시 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + 1][k + 1] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//입시 입력 배열
tmpInputArray = new Array(secondHeight + 2); // 2칸 큰 배열
for (var i = 0; i < secondHeight + 2; i++)
tmpInputArray[i] = new Array(secondWidth + 2);
//임시 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + 1][k + 1] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
유사연산자 메소드
//유사연산자
function onHomogenOperator() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
if (inputSelectImage == 1) {
tempInArray = new Array(inHeight + 2);
for (var i = 0; i < inHeight + 2; i++)
tempInArray[i] = new Array(inWidth + 2);
// 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tempInArray[i][k] = String.fromCharCode(127);
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tempInArray[i + 1][k + 1] = inImageArray[i][k];
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var max = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
pixel = Math.abs(tempInArray[i + 1][k + 1].charCodeAt(0) - tempInArray[i + m][k + n].charCodeAt(0));
if (pixel >= max)
max = pixel;
}
inImageArray[i][k] = max;
if (inImageArray[i][k] > 255)
inImageArray[i][k] = 255;
if (inImageArray[i][k] < 0)
inImageArray[i][k] = 0;
inImageArray[i][k] = String.fromCharCode(inImageArray[i][k]);
}
}
printOutInImage();
}
else if (inputSelectImage == 2) {
tempInArray = new Array(secondHeight + 2);
for (var i = 0; i < secondHeight + 2; i++)
tempInArray[i] = new Array(secondWidth + 2);
// 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tempInArray[i][k] = String.fromCharCode(127);
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tempInArray[i + 1][k + 1] = secondImageArray[i][k];
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var max = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
pixel = Math.abs(tempInArray[i + 1][k + 1].charCodeAt(0) - tempInArray[i + m][k + n].charCodeAt(0));
if (pixel >= max)
max = pixel;
}
secondImageArray[i][k] = max;
if (secondImageArray[i][k] > 255)
secondImageArray[i][k] = 255;
if (secondImageArray[i][k] < 0)
secondImageArray[i][k] = 0;
secondImageArray[i][k] = String.fromCharCode(secondImageArray[i][k]);
}
}
printOutSecondImage();
}
}
LoG 메소드
//LoG
function LaplacianImage() {
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
//화소 영역 처리
var mask = [[-1., -1., -1.],
[-1., 8., -1.],
[-1., -1., -1.]];
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + 2); // 2칸 큰 배열
for (var i = 0; i < inHeight + 2; i++)
tmpInputArray[i] = new Array(inWidth + 2);
//임시 배열 초기화
for (var i = 0; i < inHeight + 2; i++)
for (var k = 0; k < inWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + 1][k + 1] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
// for (var i = 0; i < inHeight; i++)
// for (var k = 0; k < inWidth; k++) {
// tmpOutputArray[i][k] += .0;
// }
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//입시 입력 배열
tmpInputArray = new Array(secondHeight + 2); // 2칸 큰 배열
for (var i = 0; i < secondHeight + 2; i++)
tmpInputArray[i] = new Array(secondWidth + 2);
//임시 배열 초기화
for (var i = 0; i < secondHeight + 2; i++)
for (var k = 0; k < secondWidth + 2; k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + 1][k + 1] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < 3; m++)
for (var n = 0; n < 3; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
배열의 값을 입력받아 블러 처리
//입력 블러싱
function insertBlurrImage(){
if (inputSelectImage == 0)
alert("사진을 선택해 주세요!");
var maskSize = parseInt(prompt("블러싱할 값(홀 수)","3"));
var mask = new Array(maskSize);
for(var i =0; i<maskSize; i++)
mask[i] = new Array(maskSize);
for(var i=0; i<maskSize; i++)
for(var k=0; k<maskSize; k++){
mask[i][k] = 1/(maskSize*maskSize);
}
if (inputSelectImage == 1) {
//입시 입력 배열
tmpInputArray = new Array(inHeight + (maskSize-1)); //
for (var i = 0; i < inHeight + (maskSize-1); i++)
tmpInputArray[i] = new Array(inWidth + (maskSize-1));
//임시 배열 초기화
for (var i = 0; i < inHeight +(maskSize-1); i++)
for (var k = 0; k < inWidth + (maskSize-1); k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++)
tmpInputArray[i + ((maskSize-1)/2)][k + ((maskSize-1)/2)] = inImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(inHeight); // 2칸 큰 배열
for (var i = 0; i < inHeight; i++)
tmpOutputArray[i] = new Array(inWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < inHeight; i++) {
for (var k = 0; k < inWidth; k++) {
var s = 0.0;
for (var m = 0; m < maskSize; m++)
for (var n = 0; n < maskSize; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < inHeight; i++)
for (var k = 0; k < inWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
inImageArray[i][k] = String.fromCharCode(v);
}
printOutInImage();
}
else if (inputSelectImage == 2) {
//입시 입력 배열
tmpInputArray = new Array(secondHeight + (maskSize-1)); //
for (var i = 0; i < secondHeight + (maskSize-1); i++)
tmpInputArray[i] = new Array(secondWidth + (maskSize-1));
//임시 배열 초기화
for (var i = 0; i < secondHeight +(maskSize-1); i++)
for (var k = 0; k < secondWidth + (maskSize-1); k++)
tmpInputArray[i][k] = String.fromCharCode(127);
//임시배열 --> 입시 입력
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++)
tmpInputArray[i + ((maskSize-1)/2)][k + ((maskSize-1)/2)] = secondImageArray[i][k];
//임시 출력 배열
tmpOutputArray = new Array(secondHeight); // 2칸 큰 배열
for (var i = 0; i < secondHeight; i++)
tmpOutputArray[i] = new Array(secondWidth);
// ***** 진짜 영상처리 알고리즘 *****
for (var i = 0; i < secondHeight; i++) {
for (var k = 0; k < secondWidth; k++) {
var s = 0.0;
for (var m = 0; m < maskSize; m++)
for (var n = 0; n < maskSize; n++) {
s += mask[m][n] * tmpInputArray[i + m][k + n].charCodeAt(0);
}
tmpOutputArray[i][k] = s;
}
}
/*
//만약, 마스크의 합계가 0이면, 결과를 127 더하자.
for (var i = 0; i < outHeight; i++)
for (var k = 0; k < outWidth; k++) {
tmpOutputArray[i][k] += 127.0;
}
*/
//임시출력 --> 진짜 출력 배열
for (var i = 0; i < secondHeight; i++)
for (var k = 0; k < secondWidth; k++) {
var v = tmpOutputArray[i][k];
if (v > 255) {
v = 255.0;
}
else if (v < 0) {
v = 0.0;
}
secondImageArray[i][k] = String.fromCharCode(v);
}
printOutSecondImage();
}
}
728x90
'코딩 연습장 > Javascript' 카테고리의 다른 글
자바스크립트를 이용한 개인 프로젝트 - 4(코코coco 화면) (0) | 2021.06.13 |
---|---|
자바스크립트를 이용한 개인 프로젝트 - 3(업up 화면) (0) | 2021.06.13 |
자바스크립트를 이용한 개인 프로젝트 - 2(인어 공주 화면) (0) | 2021.06.11 |
자바스크립트 이용한 개인 프로젝트 - 1(첫 화면, 슬라이드 화면) (0) | 2021.05.16 |
Visual Studio Code설치(HTML5사용) (0) | 2021.03.19 |