๋ง์คํฌ์ ํฌ๊ธฐ๋ฅผ value by value๋ก ๊ฐ๋ณํ๋ ฌ๋ก ๋ฐ์์ value๊ฐ์ ๋ฐ๋ผ ๋ณํ๊ฒ ํ ์๋ ์๊ฒ ์ง๋ง,
๊ฐ์ฐ์์ ๋ธ๋ฌ๊ฐ ์๋๋ผ ๊ธฐ๋ณธ ๋ธ๋ฌ๋ก ํ๋ค๋ฉด ๋ง์คํฌ๋ฅผ ์ฐ์ง ์๊ณ ๋ ๊ตฌํํ ์ ์์ ๊ฒ์ด๋ค.
1. value๊ฐ 1์ด๋ผ๋ฉด ์์ ํฝ์
๋ก๋ถํฐ 1๋งํผ ๊ฑฐ๋ฆฌ์ ์๋ ํฝ์
๋ค์ ํ๊ท ์ ๋ฐ๋๋ค. ์ฆ, ์์ ํฝ์
์ ํฌํจํด 3by3ํฌ๊ธฐ ํ๋ ฌ ์์ ์๋ ํฝ์
์ ํ๊ท ์ผ๋ก ๋ฐ๊ฒ ๋๋ค.
value๊ฐ 2๋ฉด 5by5ํ๋ ฌ, value๊ฐ 3์ด๋ฉด 7by7ํ๋ ฌ, value๊ฐ n์ด๋ฉด (2n+1) by (2n+1) ํ๋ ฌ ์์ ์๋ ํฝ์
๋ค์ ํ๊ท ์ ๋ฐ๋ ๊ฒ์ด๋ค.
2. ๊ฐ์ฅ์๋ฆฌ์ ์๋ ํฝ์ ์ ์ํด์ (2value+width) by (2value+width) ํฌ๊ธฐ์ ์์ ์ ๋ ฅ ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ๊ณ , 127๋ก ์ฑ์์ค๋ค. ๋ ๋์ ์์ฑ๋๋ฅผ ์ํด์๋ ๊ฐ์ฅ์๋ฆฌ ํฝ์ ๊ณผ ๊ฐ์ ๊ฐ์ผ๋ก ๋๋ ค์ฃผ๋ฉด ๋๋๋ฐ, ์ค์๋์ ๋นํด์ ์ฝ๋๊ฐ ๋ณต์กํด์ง ๊ฒ ๊ฐ์์ ๊ทธ๋ฅ ์ค๊ฐ ๊ฐ์ธ 127.0์ผ๋ก ์ฑ์ฐ๋ ๊ฒ์ผ๋ก ํ๋ค.
for(var i=0; i<inH+2*value; i++)
tmpInImage[i] = new Array(inW+2*value).fill(127.0);
3. ๋ง๋ ์์ ๋ฐฐ์ด ๊ฐ์ด๋ฐ์ inImage๋ฅผ ์ฎ๊ฒจ์ค๋ค.
for(var i=0; i<inH; i++)
for (var k=0; k<inW; k++)
tmpInImage[i+value][k+value] = inImage[i][k];
4. ์ด์ ๋ง์คํฌ๋ ๋์ผํ๊ฒ ์ฃผ๋ณ ํฝ์ ๋ค์ ํ๊ท ์ ๊ตฌํด์ ์์ ํฝ์ ์ ๊ทธ ๊ฐ์ ๋ฃ์ผ๋ฉด ๋๋ฏ๋ก, for ๋ฌธ ์์ for๋ฌธ์ ๋ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ์ด๋ค.
for (i=value; i<outH+value; i++) {
for (k=value; k<outW+value; k++) {
var sum =0;
for (n=0; n<2*value+1; n++) {
for (m=0; m<2*value+1; m++) {
sum += tmpInImage[i+value-n][k+value-m];
5. ์์ ์ ๋ ฅ ๋ฐฐ์ด์์ ๋ค์ ๋ถํ์ํ ๋ถ๋ถ (value๋งํผ ๋๋ฆฐ ๋ถ๋ถ)์ ์๋ผ๋ด์ด outImage์ ๋ฃ์ผ๋ฉด ๋๋ค.
outImage[i-value][k-value] = (sum) / ((2*value+1)*(2*value+1));
๊ฒฐ๊ณผ ํ์ธ