1. ํ์คํ ๊ทธ๋จ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ณ ๋๋น ์ฒ๋ฆฌ
๊ธฐ์กด ๊ณ ๋๋น ํจ๊ณผ๋ 0๊ณผ 255์ ํ๊ท ์ธ 127.5 ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ณด๋ค ํฌ๋ฉด 255, ์์ผ๋ฉด 0์ผ๋ก ์ฒ๋ฆฌํ์๋ค.
ํ์ง๋ง ๋ง์ฝ ์ฌ์ง์ด ์ด๋ฏธ ๋ฐ์ ํธ์ด์ด์ ๋ชจ๋ 128 ์ด์์ด๋ผ๋ฉด? ์๋๋ฉด ๋ชจ๋ 127 ์ดํ๋ผ๋ฉด?
์๋ณธ ์ด๋ฏธ์ง์๋ ๋ถ๋ช
๋ช
๋ ์ฐจ์ด๊ฐ ์์ง๋ง, ์ด ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ฉด ์ ๋ถ ๊ฐ์ ํฐ์์ด๋ ๊ฒ์์์ผ๋ก ๋ํ๋ ๊ฒ์ด๋ค. ์๋ ์ฌ์ง๋ ๋ฐฐ๊ฒฝ๊ณผ ํธ์ด ๋ชจ๋ 255๋ก ์ฒ๋ฆฌ๋์ด์ ๋ฐฐ๊ฒฝ๊ณผ ์ฐจ์ด๊ฐ ์์ด์ก๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋จ์ํ 127.5๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก์ง ์๊ณ , ์ ์ฒด ํฝ์
๋ค์ ๋ถํฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก๋๋ก ํ ์ ์๋ค. ์ด๋ฅผ ํ์คํ ๊ทธ๋จ ์ฒ๋ฆฌ๋ผ๊ณ ํ๋ค.
๋ค์์ ์ ์ฒด ํฝ์
์ ํ๊ท ๊ณผ ์ค๊ฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์์์ฒ๋ฆฌ์ด๋ค.
function blackWhite2() {
out(inH, inW);
var avgValue, sum =0 ;
for(var i=0; i<inH; i++)
for (var k=0; k<inW; k++)
sum += inImage[i][k];
avgValue = sum / (inH*inW);
for(var i=0; i<inH; i++) {
for (var k=0; k<inW; k++) {
if (inImage[i][k] <= avgValue)
outImage[i][k] = 0;
else
outImage[i][k] = 255;
}
}
displayImage();
}
ํ๊ท ์ sum์ ์ ์ฒด ํฝ์ ๊ฐ์ ํฉ์ ๋ด์ ๋ค ํ๊ท ์ ๊ตฌํ๊ณ ,
function blackWhite3() {
out(inH, inW);
var centerValue = 0;
var oneAry = new Array(inH*inW);
var index=0;
for(var i=0; i<inH; i++)
for (var k=0; k<inW; k++)
oneAry[index++] = inImage[i][k];
oneAry.sort();
centerValue = oneAry[parseInt((inH*inW)/2)];
for(var i=0; i<inH; i++) {
for (var k=0; k<inW; k++) {
if (inImage[i][k] <= centerValue)
outImage[i][k] = 0;
else
outImage[i][k] = 255;
}
}
displayImage();
}
์ค๊ฐ๊ฐ์ ์ ์ฒด ํฝ์ ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ด์ ๋ค sort()ํจ์๋ก ์ ๋ ฌํ์ฌ ์ค๊ฐ๊ฐ์ ์ฐพ์๋ด์๋ค.
ํ์คํ 127.5๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ ์์์ฒ๋ฆฌ๋ณด๋ค ์ฌ์ง์ ๋ช ๋ ๊ตฌ๋ถ์ด ์ฌ์ง์ ๋ง๊ฒ ๋ช ํํ๊ฒ ๋์๋ค.
2. ํ์คํ ๊ทธ๋จ ๋ช ์๋๋น ์คํธ๋ ์นญ
์ด๋ฏธ์ง ๋ด์์ ๋ช ์ ์ฐจ์ด๊ฐ ๋ณ๋ก ์์ผ๋ฉด ๊ฒฝ๊ณ๊ฐ ๋ช ํํ์ง ์๊ณ ๊ทธ๋ฆผ์ด ํ๋ฆฌ๊ฒ ํํ๋๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ ์ฒด ๋ช ์ ๋ถํฌ๋ฅผ ๊ณ ๋ คํด์ ์คํธ๋ ์นญ์ํฌ ์ ์๋ค.
function histoImage() {
out(inH, inW);
//๊ณต์: out = (in - low)/(high - low)*255.0
var low = inImage[0][0], high = inImage[0][0];
//high low๋ฅผ ๊ตฌํ ๋ ์ด๊ธฐ๊ฐ์ ๋ด๋ถ์ ์๋ ๊ฐ์ผ๋ก ํด์ฃผ๋ ๊ฒ ์์ ํ๋ค
for(var i=0; i<outH; i++) {
for (var k=0; k<outW; k++) {
if (inImage[i][k] < low)
low = inImage[i][k];
if (inImage[i][k] > high)
high = inImage[i][k];
}
}
for(var i=0; i<outH; i++) {
for (var k=0; k<outW; k++) {
outImage[i][k] = parseInt((inImage[i][k]-low)/(high-low)*255.0);
}
}
displayImage();
}
3. ์๋- ์ธ ํ์
high๊ฐ์ด ์ด๋ฏธ 255์ด๊ฑฐ๋ 255์ ๊ฐ๊น๊ณ , low๊ฐ์ด ์ด๋ฏธ 0์ด๊ฑฐ๋ 0์ ๊ฐ๊น์ด ๊ฒฝ์ฐ, ์คํธ๋ ์นญ์ ํ ์๊ฐ ์๋ค. ๊ณต๊ฐ์ 0~255๊น์ง ์ ํ๋์ด ์์ผ๋ ์คํธ๋ ์นญ์ ํ ๊ณต๊ฐ์ด ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ์๋ ์ข ๋ ์ ๋ช
ํ ๋ช
๋๋๋น๋ฅผ ์ํ๋ค๋ฉด, high๊ฐ์ ๊ฐ์ ๋ก ๋ฎ์ถ๊ณ low ๊ฐ์ ๊ฐ์ ๋ก ๋ํ์ ๊ณต๊ฐ์ ๋ง๋ค๊ณ ์คํธ๋ ์นญ์ ํ๋ฉด ๋์ฑ ์ ๋ช
ํ ๋ช
๋ ๋๋น๋ฅผ ๋ณด์ด๊ฒ ํ ์ ์๋ค.
function endIn() {
out(inH, inW);
//๊ณต์: out = (in - low)/(high - low)*255.0
var low = inImage[0][0], high = inImage[0][0];
//high low๋ฅผ ๊ตฌํ ๋ ์ด๊ธฐ๊ฐ์ ๋ด๋ถ์ ์๋ ๊ฐ์ผ๋ก ํด์ฃผ๋ ๊ฒ ์์ ํ๋ค
for(var i=0; i<outH; i++) {
for (var k=0; k<outW; k++) {
if (inImage[i][k] < low)
low = inImage[i][k];
if (inImage[i][k] > high)
high = inImage[i][k];
}
}
high -=50;
low += 50;
for(var i=0; i<outH; i++) {
for (var k=0; k<outW; k++) {
outImage[i][k] = parseInt((inImage[i][k]-low)/(high-low)*255.0);
}
}
displayImage();
}
๋ค๋ง, ์๋์ธ์ ๋ช ๋๊ฐ ํ ์ชฝ์ผ๋ก ์น์ฐ์ณ์ง (๋๋ฌด ์ด๋ก๊ฑฐ๋ ๋๋ฌด ๋ฐ์) ์ด๋ฏธ์ง๋ ์ ์ฉํ๊ธฐ ์ํํ๋ค. ๋งจ ๋ 50์ฉ์ ์๋ผ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ํฉํ์ง ์๋ค.
4. ํ์คํ ๊ทธ๋จ ํํํ
์ด๋ก๊ฒ ์ดฌ์๋ ์ฌ์ง์ ์ ์ผ ์ ํฉํ ์์์ฒ๋ฆฌ๋ก, ์ด๋ก๊ฒ ์ดฌ์๋ ์์์ ๋ฐ๊ธฐ ๋ถํฌ๋ฅผ ์ฌ๋ถ๋ฐฐํด์ ๋ช ์ ๋๋น๋ฅผ ์ต๋๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ธฐ๋ฒ์ด๋ค.
function histoEqual() {
out(inH, inW);
//1๋จ๊ณ: ํ์คํ ๊ทธ๋จ ์์ฑ
var histo = new Array(256);
for (var i=0; i<256; i++) // ์ด๊ธฐํ
histo[i] = 0;
for(var i=0; i<inH; i++)
for (var k=0; k<inW; k++)
histo[inImage[i][k]]++;
//2๋จ๊ณ: ๋์ ํ์คํ ๊ทธ๋จ
var sumHisto = new Array(256);
for (var i=0; i<256; i++) // ์ด๊ธฐํ
sumHisto[i] = 0;
var sumValue = 0;
for (var i=0; i<256; i++) {
sumValue += histo[i];
sumHisto[i] = sumValue;
}
//3๋จ๊ณ: ์ ๊ทํ๋ ๋์ ํฉ๊ณ
var n = new Array(256);
for (var i=0; i<256; i++) // ์ด๊ธฐํ
n[i] = 0.0;
for (var i=0; i<256; i++)
n[i] = sumHisto[i] * (1.0/(inH*inW) * 255.0);
//์ต์ข
for(var i=0; i<inH; i++) {
for (var k=0; k<inW; k++) {
outImage[i][k] = parseInt(n[inImage[i][k]]);
}
}
displayImage();
}
5. ๊ณฑํ๊ธฐ
ํฝ์
๊ฐ์ ๋ํ๊ณ ๋นผ์ ๋ฐ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค๋ฉด, ๊ณฑํ ์๋ ์๋ค.
๋ค๋ง ๊ณฑํ๊ฒ ๋๋ฉด ๋ฐ์ ๊ฐ์ ๋ ๋ฐ์์ง๊ณ ์ด๋์ด ๊ฐ์ ๋ ๋ฐ์์ง๋ค๋ ๊ฒ์ด๋ค.
ํ๋กํฌ๋ฆฌ์์ดํธ์์ ํญ์ ์์ฃผ ์ฐ๋ ๊ณฑํ๊ธฐ ๋ ์ด์ด๊ฐ ์ด๋ฐ ์๋ฆฌ์์์ ์๊ฒ ๋์๋ค.
function multipyImage() {
out(inH, inW);
var value = prompt("๊ฐ์ ์
๋ ฅํ์ธ์(์์)", "2");
for(var i=0; i<inH; i++) {
for (var k=0; k<inW; k++) {
outImage[i][k] = inImage[i][k] * value;
}
}
displayImage();
}
6. ์นดํฐ ํจ๊ณผ
๋ช
๋๊ฐ ๋ณํ ๋ ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ง์ง ์๊ณ ๊ฒฝ๊ณ๊ฐ ์ง๋ฉด์ ๋ฏธ๊ตญ ์นดํฐ ๋๋์ด ๋๋๋ก ๋ณด์ ํ ์๋ ์๋ค.
0~255๊น์ง ๋ฒ์๋ฅผ ์ ํด ์ผ์ ๋ฒ์๋ ๊ฐ์ ํฝ์
๊ฐ์ผ๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
function cartoonImage() {
out(inH, inW);
for (i=0; i<outH; i++) {
for (k=0; k<outW; k++) {
if (inImage[i][k]>200)
outImage[i][k] = 225;
else if (inImage[i][k]>175)
outImage[i][k] = 200;
else if (inImage[i][k]>150)
outImage[i][k] = 175;
else if (inImage[i][k]>125)
outImage[i][k] = 150;
else if (inImage[i][k]>100)
outImage[i][k] = 125;
else if (inImage[i][k]>75)
outImage[i][k] = 100;
else if (inImage[i][k]>50)
outImage[i][k] = 75;
else if (inImage[i][k]>25)
outImage[i][k] = 50;
else if (inImage[i][k] = 0)
outImage[i][k] = 0
else outImage[i][k] = 25;
}
}
displayImage();
}