image
get_color
ํจ์ ์ด๋ฆ: get_color
์ ๋ ฅ:
int c (์์ ์ฑ๋ ์ธ๋ฑ์ค, 0~2)
int x (ํ์ฌ ์์น)
int max (์ ์ฒด ๋ฒ์)
๋์:
์ ๋ ฅ๋ ์์ ์ฑ๋ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฐ์ colors ๋ฐฐ์ด์์ ๊ฐ์ ธ์, ํ์ฌ ์์น(x)์ ์ ์ฒด ๋ฒ์(max)์ ๋น์จ์ ์ด์ฉํ์ฌ 6๊ฐ์ ์์ ์ค 2๊ฐ์ ์์์ ์ ํ ๋ณด๊ฐ(linear interpolation)ํ ๊ฐ์ ๋ฐํํ๋ค.
์ค๋ช :
colors ๋ฐฐ์ด์ 6๊ฐ์ ์์๊ฐ(ํํ์์์๋ BGR ์์๋ก ์ ์ฅ๋์ด ์์)์ ๊ฐ์ง๊ณ ์๋ค.
get_color ํจ์๋ ์ ๋ ฅ๋ ์์ ์ฑ๋ ์ธ๋ฑ์ค(c)์ ํด๋นํ๋ ๊ฐ(0~2)์ ์ด์ฉํ์ฌ colors ๋ฐฐ์ด์์ ํด๋น ์์ ์ฑ๋์ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ , ํ์ฌ ์์น(x)์ ์ ์ฒด ๋ฒ์(max)์ ๋น์จ์ ๊ณ์ฐํ์ฌ 6๊ฐ์ ์์ ์ค ์ด๋ ๋ ์์์ ์ ํ ๋ณด๊ฐํ ์ง ๊ฒฐ์ ํ๋ค.
๊ทธ ํ, ์ ํ ๋ณด๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
mask_to_rgb
ํจ์ ์ด๋ฆ: mask_to_rgb
์ ๋ ฅ: image mask (์ด์ง ์ด๋ฏธ์ง)
๋์: ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด์ง ์ด๋ฏธ์ง mask๋ฅผ RGB ์ด๋ฏธ์ง๋ก ๋ณํํ๋ค. ๋ณํ๋ RGB ์ด๋ฏธ์ง๋ ์์์ด ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ ์ด์ง ์ด๋ฏธ์ง๋ฅผ ๊ฒน์ณ์ ๋ง๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์ฆ, mask์ ์๋ 1์ ์์น์ ํด๋นํ๋ ํฝ์ ์ ๋ค์ํ ์์์ผ๋ก ์์น ๋๋ฉฐ, 0์ ์์น์ ํด๋นํ๋ ํฝ์ ์ ๊ฒ์์์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
์ค๋ช :
n: mask์ ์ฑ๋ ์
im: mask์ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ 3์ฑ๋ ์ด๋ฏธ์ง
i, j: ๋ฐ๋ณต๋ฌธ์ ์ํ ๋ณ์
offset: j๋ฅผ ์ด์ฉํ ์ผ์ข ์ ๋๋ค๊ฐ. ์ฌ๋ฌ ์ฑ๋์์ ๊ฒน์ณ์ง ํฝ์ ์ ๋ํด ์๋ก ๋ค๋ฅธ ์์์ด ์ ์ฉ๋๋๋ก ํ๊ธฐ ์ํจ.
red, green, blue: offset ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก 6๊ฐ์ง ์์ ์ค 3๊ฐ์ง๋ฅผ ์ ํํ์ฌ ๊ฒฐ์ . (BGR ์์๋ก)
im.data: ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
im.w: ์ด๋ฏธ์ง์ ๋๋น
im.h: ์ด๋ฏธ์ง์ ๋์ด
mask.data: mask ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
i + 0 * im.w * im.h, i + 1 * im.w * im.h, i + 2 * im.w * im.h: RGB ์ฑ๋ ๊ฐ๊ฐ์ ๋ํด ํด๋น๋๋ ์ธ๋ฑ์ค
๊ฒน์ณ์ง ์ฑ๋ ๊ฐ์ ํด๋น๋๋ ํฝ์ ์ ๋ํด ์์์ ํฉ์ฐํ๋ค.
mask์ ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ ํด๋น ํฝ์ ์ ์์์ด ๋ณํ์ง ์๋๋ค. 1์ผ ๊ฒฝ์ฐ, RGB ๊ฐ ์ฑ๋์ ๋ํด ์์์ ๊ฒฐ์ ๋ ๊ฐ(red, green, blue)์ด mask ๊ฐ์ ๋น๋กํ์ฌ ๊ณฑํด์ง๋ค.
get_pixel
ํจ์ ์ด๋ฆ: get_pixel ์ ๋ ฅ:
m: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ image ๊ตฌ์กฐ์ฒด ๋ณ์
x: ๊ฐ๋ก ์ขํ ๊ฐ (int ํ์ )
y: ์ธ๋ก ์ขํ ๊ฐ (int ํ์ )
c: ์ปฌ๋ฌ ์ฑ๋ ๊ฐ (int ํ์ )
๋์:
์ด๋ฏธ์ง ๋ฐ์ดํฐ์์ ์ง์ ๋ ์ขํ์ ์ปฌ๋ฌ๊ฐ์ ๋ฐํํ๋ค.
์ค๋ช :
์ธ๋ฑ์ฑ์ 0๋ถํฐ ์์ํ๋ฉฐ, ์ ๋ ฅ๋ฐ์ ์ขํ์ ์ปฌ๋ฌ ์ฑ๋ ๊ฐ์ ํด๋นํ๋ ํฝ์ ์ ์ค์ ๊ฐ์ ๋ฐํํ๋ค.
ํจ์ ๋ด๋ถ์์๋ ์ ๋ ฅ ๋ฐ์ ์ขํ์ ์ฑ๋ ๊ฐ์ด ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ์ฑ๋ ์ ๋ด์ ์๋์ง ํ์ธํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ assert ํจ์๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ๊ฐ์ ์ข ๋ฃ์ํจ๋ค.
get_pixel_extend
ํจ์ ์ด๋ฆ: get_pixel_extend
์ ๋ ฅ:
image m (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด)
int x (๊ฐ๋ก ์ขํ)
int y (์ธ๋ก ์ขํ)
int c (์ฑ๋ ์ธ๋ฑ์ค)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ขํ์ ์ฑ๋ ์ธ๋ฑ์ค์ ํด๋นํ๋ ํฝ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
๋ง์ฝ ์ขํ๊ฐ ์ด๋ฏธ์ง์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด 0์ ๋ฐํํ๋ค.
์ค๋ช :
์ด๋ฏธ์ง์์ ํด๋น ์ขํ์ ์ฑ๋ ์ธ๋ฑ์ค์ ํด๋นํ๋ ํฝ์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ํจ์์ด๋ค.
๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ 0์ ๋ฐํํ๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง๋ฅผ ํ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
set_pixel
ํจ์ ์ด๋ฆ: set_pixel
์ ๋ ฅ:
image m (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด)
int x (ํฝ์ ์ x ์ขํ)
int y (ํฝ์ ์ y ์ขํ)
int c (์ฑ๋ ๋ฒํธ)
float val (์ค์ ํ ๊ฐ)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง m์ (x, y) ์ขํ์ ์๋ c๋ฒ์งธ ์ฑ๋์ ๊ฐ์ val๋ก ์ค์ ํ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง m์ (x, y) ์ขํ์ ์๋ c๋ฒ์งธ ์ฑ๋์ ๊ฐ์ val๋ก ์ค์ ํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง m์ ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋๋ ์ขํ๋ ์ฑ๋ ๋ฒํธ๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ ํจ์๋ ์ฆ์ ๋ฐํ๋๋ค.
ํจ์ ๋ด๋ถ์์๋ assert ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ขํ์ ์ฑ๋ ๋ฒํธ๊ฐ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋์ง ์๋์ง ๊ฒ์ฌํ๋ค.
add_pixel
ํจ์ ์ด๋ฆ: add_pixel
์ ๋ ฅ:
image m (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ)
int x (x ์ขํ๊ฐ)
int y (y ์ขํ๊ฐ)
int c (์์ ์ฑ๋)
float val (๋ํ ๊ฐ)
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง์์ (x, y, c) ์ขํ์ ํฝ์ ๊ฐ์ val์ ๋ํฉ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด m์์ (x, y, c) ์ขํ์ ํฝ์ ๊ฐ์ val์ ๋ํ๋ ํจ์์ ๋๋ค.
์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์ ๋ณด๋ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ๋ด์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ 1์ฐจ์ ๋ฐฐ์ด ํํ๋ก ์ ์ฅ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฏธ์ง ๋ด์ ํน์ ํฝ์ ์ ์ ๊ทผํ๋ ค๋ฉด, 1์ฐจ์ ๋ฐฐ์ด์์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
์ด ํจ์๋ ํด๋น ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ์ฌ ํด๋น ์์น์ ํฝ์ ๊ฐ์ val์ ๋ํฉ๋๋ค.
bilinear_interpolate
ํจ์ ์ด๋ฆ: bilinear_interpolate ์ ๋ ฅ:
image im : ๋ณด๊ฐ์ ์ํํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
float x : ๋ณด๊ฐ์ ์ํํ ์ขํ๊ฐ x
float y : ๋ณด๊ฐ์ ์ํํ ์ขํ๊ฐ y
int c : ๋ณด๊ฐ์ ์ํํ ์ด๋ฏธ์ง ์ฑ๋
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง์ (x, y) ์ขํ์์์ ์ฑ๋ c์ ๋ํ ๋ณด๊ฐ๊ฐ์ ๊ณ์ฐํ๋ค.
๋ณด๊ฐ์ 4๊ฐ์ ๊ผญ์ง์ ์ ๋ํ bilinear interpolation ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ค๋ช :
bilinear interpolation์ ์ด๋ฏธ์ง ๋ณด๊ฐ ๊ธฐ๋ฒ ์ค ํ๋๋ก, 4๊ฐ์ ์ธ์ ํ ํฝ์ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ์ขํ์์์ ๊ฐ์ ๊ณ์ฐํ๋ ๋ฐฉ์์ด๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง์์ (x, y) ์ขํ์์์ ์ฑ๋ c์ ๋ํ ๋ณด๊ฐ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด 4๊ฐ์ ์ธ์ ํ ํฝ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
์ด๋, x์ y์ ์ ์ ๋ถ๋ถ์ ์ขํ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋๊ณ , ์์ ๋ถ๋ถ์ ๋ณด๊ฐ ๊ณ์๋ก ์ฌ์ฉ๋๋ค.
์ด๋ ๊ฒ ๊ณ์ฐ๋ ๋ณด๊ฐ๊ฐ์ด ๋ฐํ๋๋ค.
composite_image
ํจ์ ์ด๋ฆ: composite_image
์ ๋ ฅ:
source: ํฉ์ฑํ ์ด๋ฏธ์ง (image)
dest: ํฉ์ฑ ๋์ ์ด๋ฏธ์ง (image)
dx: dest ์ด๋ฏธ์ง์์ source ์ด๋ฏธ์ง๊ฐ ์์๋ x์ขํ (int)
dy: dest ์ด๋ฏธ์ง์์ source ์ด๋ฏธ์ง๊ฐ ์์๋ y์ขํ (int)
๋์:
source ์ด๋ฏธ์ง๋ฅผ dest ์ด๋ฏธ์ง์ (dx, dy) ์ขํ๋ถํฐ ํฉ์ฑํ๋ ํจ์์ด๋ค.
source ์ด๋ฏธ์ง์ dest ์ด๋ฏธ์ง์ ๊ฐ์ ์์น์ ํฝ์ ๊ฐ์ ๊ณฑํ์ฌ dest ์ด๋ฏธ์ง์ ๋ฎ์ด์ด๋ค.
์ค๋ช :
source ์ด๋ฏธ์ง์ dest ์ด๋ฏธ์ง์ ๊ฐ์ ์์น์ ํฝ์ ์ ๊ณฑํ ๊ฐ์ dest ์ด๋ฏธ์ง์ ๋ฎ์ด์ฐ๋ฏ๋ก, ํฉ์ฑ ๊ฒฐ๊ณผ๋ source ์ด๋ฏธ์ง๊ฐ dest ์ด๋ฏธ์ง ์์ ๋ฎ์ฌ์ง ์ด๋ฏธ์ง๊ฐ ๋๋ค.
ํจ์ ๋ด๋ถ์์๋ ์ด์ค for ๋ฃจํ๋ฅผ ์ด์ฉํ์ฌ source ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ์ ๋ํด dest ์ด๋ฏธ์ง์ ๋ฎ์ด์ฐ๋ ๋์์ ์ํํ๋ค.
border_image
ํจ์ ์ด๋ฆ: border_image
์ ๋ ฅ:
image a (์ด๋ฏธ์ง)
int border (ํ ๋๋ฆฌ ํฌ๊ธฐ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง ์ฃผ์์ ์ง์ ๋ ํฌ๊ธฐ์ ๊ฒ์์ ํ ๋๋ฆฌ๋ฅผ ์ถ๊ฐํ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค.
๊ฒ์์ ํ ๋๋ฆฌ์ ํฌ๊ธฐ๋ ์ ๋ ฅ๋ border ๊ฐ์ ์ํด ๊ฒฐ์ ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ์ฅ์๋ฆฌ ํฝ์ ์ ํ ๋๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ๊ฒ์์์ผ๋ก ์ค์ ๋๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง a๋ฅผ ๋ณต์ ํ๊ณ ์ ๋ ฅ๋ border ๊ฐ์ ๋ฐ๋ผ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋๋ฆฐ๋ค.
๊ทธ๋ฐ ๋ค์ ๊ฐ ์ฑ๋๊ณผ ํฝ์ ์ ๊ฐ์ ํ ๋๋ฆฌ ์์ผ๋ก ์ด๋์์ผ ์ค์ ํ๋ฉด์, ํ ๋๋ฆฌ์ ๊ฒ์์ ํฝ์ ์ ์ถ๊ฐํ๋ค.
tile_images
ํจ์ ์ด๋ฆ: tile_images
์ ๋ ฅ:
image a: ์ด๋ฏธ์ง a
image b: ์ด๋ฏธ์ง b
int dx: a์ b ์ฌ์ด์ ๊ฐ๊ฒฉ
๋์:
์ด๋ฏธ์ง a์ b๋ฅผ ํ๋์ ์ด๋ฏธ์ง๋ก ํฉ์น๋ค.
์ด๋ฏธ์ง a์ b ์ค์์ ํฌ๊ธฐ๊ฐ ๋ ํฐ ์ชฝ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฏธ์ง c๋ฅผ ๋ง๋ ๋ค.
์ด๋ฏธ์ง a๋ฅผ (0, 0) ์ขํ์ ์ฝ์ ํ๋ค.
์ด๋ฏธ์ง b๋ฅผ (a.w + dx, 0) ์ขํ์ ์ฝ์ ํ๋ค.
์ด๋ฏธ์ง c๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
๋ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ด์ด ๋ถ์ฌ์ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ง๋๋ ํจ์์ด๋ค.
๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ๋ฌ๋ผ๋ ๋๋ค. a์ b ์ฌ์ด์๋ dx๋งํผ์ ๊ฐ๊ฒฉ์ด ์๊ธด๋ค.
์ด๋ฏธ์ง a์ b ์ค์์ ํฌ๊ธฐ๊ฐ ๋ ํฐ ์ชฝ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฏธ์ง c๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฏธ์ง a์ b๋ฅผ ํฉ์น๋ค.
์ด๋ฏธ์ง a๋ (0, 0) ์ขํ์, ์ด๋ฏธ์ง b๋ (a.w + dx, 0) ์ขํ์ ์ฝ์ ๋๋ค. ๋ง๋ค์ด์ง ์ด๋ฏธ์ง c๋ฅผ ๋ฐํํ๋ค.
get_label
ํจ์ ์ด๋ฆ: get_label
์ ๋ ฅ:
characters: image ๊ตฌ์กฐ์ฒด์ ์ด์คํฌ์ธํฐ
string: ๋ฌธ์์ด(char ๋ฐฐ์ด)
size: ํฐํธ ํฌ๊ธฐ(int)
๋์:
์ฃผ์ด์ง ๋ฌธ์์ด์ ํฐํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ก ๋ณํํ๋ค.
์ด ๋, characters ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ์์ฑ๋ ๋ฌธ์ ์ด๋ฏธ์ง ๋ฐฐ์ด์ ์ ์ฅํ๊ณ ์์ผ๋ฉฐ, ํด๋น ๋ฌธ์์ด์ ์ด๋ฃจ๋ ๊ฐ๊ฐ์ ๋ฌธ์์ ๋ํด ์ ์ ํ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ด์ด ๋ถ์ฌ ์ต์ข ์ ์ผ๋ก ์ ์ฒด ๋ฌธ์์ด์ ๋ํ๋ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค.
๋ง๋ค์ด์ง ์ด๋ฏธ์ง์๋ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ง๋๋ก border_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๊ณ์ ์ ์ถ๊ฐํ๊ณ , ์ต์ข ์ ์ผ๋ก ๊ฒฝ๊ณ์ ์ด ์ถ๊ฐ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
characters: ๊ฐ ๋ฌธ์์ ํด๋นํ๋ ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ ์ด์ค ํฌ์ธํฐ
string: ๋ฌธ์์ด(char ๋ฐฐ์ด)
size: ํฐํธ ํฌ๊ธฐ(int)๋ก ์ฃผ์ด์ง ๊ฐ์ 10์ผ๋ก ๋๋ ํ, 7 ์ด์์ด๋ฉด 7๋ก ์ค์ ํ๋ค.
label: ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด๋ก ์ด๊ธฐํ๋์ด์๋ ๋น ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
while ๋ฃจํ: ๋ฌธ์์ด์ ํฌํจ๋ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ฒ๋ฆฌํ๋ฉฐ label์ ํด๋น ๋ฌธ์์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ๋ค.
l: ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ๋ฌธ์์ ํด๋นํ๋ ์ด๋ฏธ์ง
n: label๊ณผ l์ ์ด์ด๋ถ์ธ ์ด๋ฏธ์ง
free_image(label): ์ด์ ๋ฃจํ์์ ์ฌ์ฉ๋์๋ label ์ด๋ฏธ์ง๋ฅผ ํด์ ํ๋ค.
label = n: ์ด์ ๋ฃจํ์์ ์์ฑ๋ ์ด๋ฏธ์ง์ ํ์ฌ ๋ฌธ์์ ์ด๋ฏธ์ง๋ฅผ ์ด์ด ๋ถ์ธ ๊ฒฐ๊ณผ๋ฅผ label์ ๋์ ํ๋ค.
++string: ๋ฌธ์์ด ํฌ์ธํฐ๋ฅผ ๋ค์ ๋ฌธ์๋ก ์ด๋์ํจ๋ค.
b: ๊ฒฝ๊ณ๊ฐ ์ถ๊ฐ๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, border_image ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ฒฝ๊ณ๋ฅผ ์ถ๊ฐํ๋ค.
free_image(label): label ์ด๋ฏธ์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ค.
return b: ๊ฒฝ๊ณ๊ฐ ์ถ๊ฐ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
draw_label
ํจ์ ์ด๋ฆ: draw_label
์ ๋ ฅ:
image a: ๋ผ๋ฒจ์ด ๊ทธ๋ ค์ง ์ด๋ฏธ์ง
int r: ๋ผ๋ฒจ์ด ๊ทธ๋ ค์ง ํ ๋ฒํธ
int c: ๋ผ๋ฒจ์ด ๊ทธ๋ ค์ง ์ด ๋ฒํธ
image label: ๊ทธ๋ ค์ง ๋ผ๋ฒจ ์ด๋ฏธ์ง
const float *rgb: ๋ผ๋ฒจ ์์์ ๊ฒฐ์ ํ๋ RGB ๊ฐ ๋ฐฐ์ด
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง a์ ํน์ ์์น์ ์ฃผ์ด์ง ๋ผ๋ฒจ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฐ๋ค.
์ฃผ์ด์ง RGB ๊ฐ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ ์์ํํ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ผ๋ฒจ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ์์น์ ๊ทธ๋ฆฌ๋ ํจ์์ด๋ค.
๋ผ๋ฒจ ์ด๋ฏธ์ง๊ฐ ์ด๋ฏธ์ง a์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๊ทธ๋ฆฌ์ง ์๋๋ค.
๊ทธ๋ ค์ง ๋ผ๋ฒจ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ์ด๋ฏธ์ง a ๋ด์์์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ๋๋ค.
๋ผ๋ฒจ ์์์ ์ฃผ์ด์ง RGB ๊ฐ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ๋๋ค.
draw_box
ํจ์ ์ด๋ฆ: draw_box ์ ๋ ฅ:
image a: ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ด๋ฏธ์ง
int x1: ์์์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ x์ขํ
int y1: ์์์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ y์ขํ
int x2: ์์์ ์ค๋ฅธ์ชฝ ํ๋จ ๋ชจ์๋ฆฌ x์ขํ
int y2: ์์์ ์ค๋ฅธ์ชฝ ํ๋จ ๋ชจ์๋ฆฌ y์ขํ
float r: ์์ ์ ์์์ R ์ฑ๋ ๊ฐ
float g: ์์ ์ ์์์ G ์ฑ๋ ๊ฐ
float b: ์์ ์ ์์์ B ์ฑ๋ ๊ฐ
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง a์ ์์๋ฅผ ๊ทธ๋ฆฐ๋ค.
์์๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ขํ x1, y1์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ๋ก ํ๊ณ , x2, y2๋ฅผ ์ค๋ฅธ์ชฝ ํ๋จ ๋ชจ์๋ฆฌ๋ก ํ๋ ์ฌ๊ฐํ์ด๋ฉฐ, ์ ์์์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง r, g, b ๊ฐ์ผ๋ก ๊ฒฐ์ ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง a์ ์์๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์์ด๋ค.
x1, y1, x2, y2๋ก ์ฃผ์ด์ง ์ขํ๋ก ์ฌ๊ฐํ์ ๋ชจ์๋ฆฌ๋ฅผ ๊ฒฐ์ ํ๊ณ , r, g, b๋ก ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์ฌ๊ฐํ์ ์ ์์์ ๊ฒฐ์ ํ๋ค.
๊ทธ๋ฆฌ๋ ๊ณผ์ ์์ ์ด๋ฏธ์ง์ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ, ํด๋น ์ขํ๋ฅผ ๊ฒฝ๊ณ ๊ฐ์ผ๋ก ์กฐ์ ํ๋ค.
draw_box_width
ํจ์ ์ด๋ฆ: draw_box_width
์ ๋ ฅ:
image a: ์ฌ๊ฐํ์ด ๊ทธ๋ ค์ง ์ด๋ฏธ์ง
int x1: ์ฌ๊ฐํ์ ์ผ์ชฝ ์ ๋ชจ์๋ฆฌ์ x ์ขํ
int y1: ์ฌ๊ฐํ์ ์ผ์ชฝ ์ ๋ชจ์๋ฆฌ์ y ์ขํ
int x2: ์ฌ๊ฐํ์ ์ค๋ฅธ์ชฝ ์๋ ๋ชจ์๋ฆฌ์ x ์ขํ
int y2: ์ฌ๊ฐํ์ ์ค๋ฅธ์ชฝ ์๋ ๋ชจ์๋ฆฌ์ y ์ขํ
int w: ๊ทธ๋ ค์ง ์ฌ๊ฐํ์ ๋๊ป
float r: ์ฌ๊ฐํ์ ๋นจ๊ฐ์ ์ฑ๋ ๊ฐ (0~1)
float g: ์ฌ๊ฐํ์ ์ด๋ก์ ์ฑ๋ ๊ฐ (0~1)
float b: ์ฌ๊ฐํ์ ํ๋์ ์ฑ๋ ๊ฐ (0~1)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง a์ x1, y1 ์ขํ์์๋ถํฐ x2, y2 ์ขํ๊น์ง ๋๊ป๊ฐ w์ธ ์ฌ๊ฐํ์ ๊ทธ๋ฆฝ๋๋ค. ์์ r, g, b ๊ฐ์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
์ค๋ช :
draw_box ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง a์ ์ฌ๋ฌ ๊ฐ์ ์ ์ ๊ทธ๋ฆฌ๋ฉด์ ๋๊ป๊ฐ w์ธ ์ฌ๊ฐํ์ ๊ทธ๋ฆฌ๋ ํจ์์ ๋๋ค.
์ด ํจ์๋ draw_box ํจ์๋ฅผ ํธ์ถํ์ฌ ๋๊ป๊ฐ 1์ธ ์ฌ๊ฐํ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ w๋ฒ ๋ฐ๋ณตํ์ฌ ๋๊ป๊ฐ w์ธ ์ฌ๊ฐํ์ ๊ทธ๋ฆฝ๋๋ค.
draw_bbox
ํจ์ ์ด๋ฆ: draw_bbox
์ ๋ ฅ:
image a: ๋ฐ์ด๋ฉ ๋ฐ์ค๊ฐ ๊ทธ๋ ค์ง ์ด๋ฏธ์ง
box bbox: ๊ทธ๋ ค์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ ๋ณด๊ฐ ๋ด๊ธด box ๊ตฌ์กฐ์ฒด
int w: ๊ทธ๋ ค์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ ๋๊ป
float r: ๊ทธ๋ ค์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋นจ๊ฐ์(R) ์ฑ๋ถ ๊ฐ (0 ~ 1)
float g: ๊ทธ๋ ค์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋ น์(G) ์ฑ๋ถ ๊ฐ (0 ~ 1)
float b: ๊ทธ๋ ค์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ํ๋์(B) ์ฑ๋ถ ๊ฐ (0 ~ 1)
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง a์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง box bbox์ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๊ทธ๋ฆฐ๋ค.
๊ทธ๋ ค์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ ๋๊ป๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง w์ด๊ณ , ์ ์ ์์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง RGB ์ฑ๋ถ ๊ฐ r, g, b๋ก ์ง์ ๋๋ค.
์ค๋ช :
๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ box ๊ตฌ์กฐ์ฒด๋ x, y, w, h์ 4๊ฐ ํ๋๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ๊ฐ์ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ค์ฌ x์ขํ, ์ค์ฌ y์ขํ, ๋๋น, ๋์ด๋ฅผ ๋ํ๋ธ๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ, ์ด๋ฏธ์ง a ์์ ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์์ด๋ค.
๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ข์ธก ์๋จ ๋ชจ์๋ฆฌ์ ์ขํ(left, top)์ ์ฐ์ธก ํ๋จ ๋ชจ์๋ฆฌ์ ์ขํ(right, bot)๋ฅผ ๊ณ์ฐํ๋ค.
draw_box ํจ์๋ฅผ ์ด์ฉํ์ฌ, ๊ณ์ฐ๋ ์ขํ๋ฅผ ์ด์ฉํ์ฌ ์ ๋๊ป๋งํผ ์ฌ๋ฌ๋ฒ ๊ทธ๋ ค์ค์ผ๋ก์จ ๋๊บผ์ด ์ ์ ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๊ทธ๋ฆฐ๋ค.
load_alphabet
ํจ์ ์ด๋ฆ: load_alphabet
์ ๋ ฅ:
์์
๋์:
128๊ฐ์ ์ด๋ฏธ์ง๋ก ์ด๋ฃจ์ด์ง 8 x 128 ํฌ๊ธฐ์ ์ด์ฐจ์ ๋ฐฐ์ด(alphabets)์ ์์ฑํ๊ณ , ์ด๋ฏธ์ง ๊ฒฝ๋ก์ ๋ฐ๋ผ 128๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ค๋ช :
์ด ํจ์๋ ํ ์คํธ ์ธ์์ ์ํ ์๋ฌธ ๋์๋ฌธ์์ ์ซ์๋ฅผ ๋ํ๋ด๋ ์ด๋ฏธ์ง๋ค์ ๋ถ๋ฌ์์ ์ด์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ ํจ์์ด๋ค.
8๊ฐ์ ์ํ๋ฒณ ์ด๋ฏธ์ง๋ค(nsize)์ ์ ์ฅํ 8 x 128 ํฌ๊ธฐ์ ์ด์ฐจ์ ๋ฐฐ์ด(alphabets)์ ๋์ ์ผ๋ก ํ ๋นํ๋ค.
์ด์ฐจ์ ๋ฐฐ์ด์ ๋ฃจํ๋ฅผ ๋๋ฉฐ, ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด๋ก ์์ฑํ๊ณ load_image_color() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์จ ํ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
๊ฐ ์ด๋ฏธ์ง๋ ASCII ์ฝ๋์ 32๋ถํฐ 127๊น์ง์ ๋ฌธ์์ ๋์๋๋ค.
draw_detections
ํจ์ ์ด๋ฆ: draw_detections
์ ๋ ฅ:
im: detection ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฆด ์ด๋ฏธ์ง (image ํ์ )
dets: detection ๊ฒฐ๊ณผ (detection ํ์ ๋ฐฐ์ด)
num: detection ๊ฒฐ๊ณผ์ ๊ฐ์ (int ํ์ )
thresh: detection ๊ฒฐ๊ณผ์ ํ๋ฅ ์๊ณ๊ฐ (float ํ์ )
names: ํด๋์ค ์ด๋ฆ (char ํ์ ํฌ์ธํฐ ๋ฐฐ์ด)
alphabet: label ํ์์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง (image ํ์ ํฌ์ธํฐ ๋ฐฐ์ด)
classes: ํด๋์ค์ ๊ฐ์ (int ํ์ )
๋์:
detection ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก box์ label์ ๊ทธ๋ฆฌ๋ ํจ์์ ๋๋ค.
๊ฐ detection ๊ฒฐ๊ณผ๋ง๋ค ํด๋น ํด๋์ค์ ์ด๋ฆ๊ณผ ํ๋ฅ ์ ์ถ๋ ฅํฉ๋๋ค.
ํด๋์ค๋ง๋ค ์์์ ๋ค๋ฅด๊ฒ ์ง์ ํ์ฌ box๋ฅผ ๊ทธ๋ฆฌ๊ณ , label์ ํ์ํฉ๋๋ค.
๋ง์ฝ mask ์ ๋ณด๊ฐ ์๋ค๋ฉด, ํด๋น mask ์ ๋ณด๋ ์ด๋ฏธ์ง์ ํ์ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ detection ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ฏธ์ง์ box์ label์ ๊ทธ๋ฆฌ๋ ํจ์์ ๋๋ค. ์ ๋ ฅ์ผ๋ก๋ detection ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฆด ์ด๋ฏธ์ง(im), detection ๊ฒฐ๊ณผ(dets), detection ๊ฒฐ๊ณผ์ ๊ฐ์(num), detection ๊ฒฐ๊ณผ์ ํ๋ฅ ์๊ณ๊ฐ(thresh), ํด๋์ค ์ด๋ฆ(names), label ํ์์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง(alphabet), ํด๋์ค์ ๊ฐ์(classes)๋ฅผ ๋ฐ์ต๋๋ค.
๊ฐ detection ๊ฒฐ๊ณผ๋ง๋ค ํด๋น ํด๋์ค์ ์ด๋ฆ๊ณผ ํ๋ฅ ์ ์ถ๋ ฅํ๊ณ , ํด๋์ค๋ง๋ค ์์์ ๋ค๋ฅด๊ฒ ์ง์ ํ์ฌ box๋ฅผ ๊ทธ๋ฆฌ๊ณ , label์ ํ์ํฉ๋๋ค. ๋ง์ฝ mask ์ ๋ณด๊ฐ ์๋ค๋ฉด, ํด๋น mask ์ ๋ณด๋ ์ด๋ฏธ์ง์ ํ์ํฉ๋๋ค.
transpose_image
ํจ์ ์ด๋ฆ: transpose_image
์ ๋ ฅ:
image im: ์ ์นํ ์ด๋ฏธ์ง
๋์:
์ด๋ฏธ์ง๋ฅผ ์ ์นํ๋ ํจ์์ ๋๋ค. ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก๊ฐ ๊ฐ์์ผํ๋ฉฐ, ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ์ฑ๋ ์์ ๋ฐ๋ผ ๋ชจ๋ ์ฑ๋์ ๋ํด ์ ์น๋ฅผ ์ํํฉ๋๋ค.
์ค๋ช :
์ฃผ์ด์ง ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก๊ฐ ๊ฐ์์ง ํ์ธํ๊ณ , ๋ชจ๋ ์ฑ๋์ ๋ํด ์ ์น๋ฅผ ์ํํฉ๋๋ค.
์ ์น๋ ํ๋ ฌ์์ ํ๊ณผ ์ด์ ๋ฐ๊พธ๋ ์์ ์ ๋๋ค.
์ ์น๋ ์ด๋ฏธ์ง๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก๊ฐ ์๋ก ๋ฐ๋ ์ด๋ฏธ์ง๊ฐ ๋ฉ๋๋ค.
flip_images
ํจ์ ์ด๋ฆ: flip_image
์ ๋ ฅ:
image a (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ)
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง๋ฅผ ์ข์ฐ ๋ฐ์ ์ํต๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ ์ข์ฐ ๋ฐ์ ์ํต๋๋ค.
์ด๋ฏธ์ง๋ ์ฑ๋๋ง๋ค ๋ฐ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, RGB ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ R, G, B ์ฑ๋์ด ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ข์ฐ ๋ฐ์ ๋ฉ๋๋ค.
rotate_image_cw
ํจ์ ์ด๋ฆ: rotate_image_cw
์ ๋ ฅ:
image im (ํ์ ํ ์ด๋ฏธ์ง)
int times (ํ์ ํ ํ์)
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ์ง์ ๋ ํ์๋งํผ ํ์ ์ํต๋๋ค.
ํ์ ์ 90๋ ๋จ์๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํ์ ํ์๋ 0, 1, 2, 3 ์ค ํ๋์ ๊ฐ์ ๊ฐ์ ธ์ผํฉ๋๋ค.
ํ์ ์ ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ค๋ช :
ํจ์๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ ๋์์ ์ํํฉ๋๋ค.
ํ์ ํ ํ์๋ times ๋งค๊ฐ ๋ณ์๋ก ์ง์ ๋ฉ๋๋ค.
ํ์ ์ 90๋ ๋จ์๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, times ๊ฐ์ด 0, 1, 2, 3 ์ค ํ๋์ธ์ง ํ์ธํฉ๋๋ค.
ํ์ ์ ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํ์ ๋ ์ด๋ฏธ์ง๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ๋์ฒดํฉ๋๋ค.
ํจ์๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์์ ํ๋ฏ๋ก, ์๋ณธ ์ด๋ฏธ์ง์ ๋ฐฑ์ ์ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
image_distance
ํจ์ ์ด๋ฆ: image_distance
์ ๋ ฅ:
image a (์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง)
image b (๋ ๋ฒ์งธ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ ์ด๋ฏธ์ง a์ b ์ฌ์ด์ ๊ฑฐ๋ฆฌ(distance)๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ฐ ํฝ์ ์ ์ฐจ์ด๋ฅผ ์ ๊ณฑํ ๊ฐ๋ค์ ํฉ์ ๊ณ์ฐํ๊ณ , ์ด ๊ฐ์ ๋ฃจํธ ์์์ค๋๋ค.
์ด๋ ๊ฒ ๊ณ์ฐ๋ ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ก์ด ์ด๋ฏธ์ง dist๋ฅผ ๋ง๋ค์ด ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ ์ด๋ฏธ์ง a์ b์ ํฌ๊ธฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
๊ฑฐ๋ฆฌ ๊ฐ์ด ์์์๋ก ๋ ์ด๋ฏธ์ง๊ฐ ์๋ก ๋น์ทํ ์ด๋ฏธ์ง์ ๋๋ค.
์ด ํจ์๋ ์ฃผ๋ก ์ด๋ฏธ์ง ๊ฒ์(image retrieval)์์ ์ฌ์ฉ๋ฉ๋๋ค.
ghost_image
ํจ์ ์ด๋ฆ: ghost_image
์ ๋ ฅ:
source: ghost ์ด๋ฏธ์ง์ ์์ค ์ด๋ฏธ์ง (image ํ์ )
dest: ghost ์ด๋ฏธ์ง๊ฐ ์ ์ฉ๋ ๋์ ์ด๋ฏธ์ง (image ํ์ )
dx: dest ์ด๋ฏธ์ง์์ ghost ์ด๋ฏธ์ง๊ฐ ์์๋ x ์ขํ
dy: dest ์ด๋ฏธ์ง์์ ghost ์ด๋ฏธ์ง๊ฐ ์์๋ y ์ขํ
๋์:
์์ค ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ghost ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , dest ์ด๋ฏธ์ง์ ์ ์ฉํ๋ ํจ์์ ๋๋ค.
์์ค ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ณผ ๋์ ์ด๋ฏธ์ง์ ํด๋น ์์น์ ํฝ์ ์ ๋น๊ตํ์ฌ, ๋ ํฝ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ alpha ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
alpha ๊ฐ์ ์ฌ์ฉํ์ฌ ghost ์ด๋ฏธ์ง์ ํด๋น ์์น์ ํฝ์ ๊ฐ์ ๊ณ์ฐํ๊ณ , dest ์ด๋ฏธ์ง์ ghost ์ด๋ฏธ์ง๋ฅผ ์ ์ฉํฉ๋๋ค.
์ค๋ช :
max_dist: ghost ์ด๋ฏธ์ง์ ์ค์ฌ์ผ๋ก๋ถํฐ ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ
dist: ์์ค ์ด๋ฏธ์ง์ ํด๋น ํฝ์ ๊ณผ ghost ์ด๋ฏธ์ง์ ์ค์ฌ ์ฌ์ด์ ๊ฑฐ๋ฆฌ
alpha: ghost ์ด๋ฏธ์ง์์ ์์ค ์ด๋ฏธ์ง์ ํฝ์ ์ด ์ฐจ์งํ๋ ๊ฐ์ค์น. ๊ฑฐ๋ฆฌ๊ฐ ์์์๋ก ๊ฐ์ค์น๊ฐ ํฝ๋๋ค.
v1: ์์ค ์ด๋ฏธ์ง์ ํด๋น ํฝ์ ๊ฐ
v2: ๋์ ์ด๋ฏธ์ง์ ํด๋น ์์น์ ํฝ์ ๊ฐ
val: ghost ์ด๋ฏธ์ง์ ํด๋น ์์น์ ํฝ์ ๊ฐ
blocky_image
ํจ์ ์ด๋ฆ: blocky_image
์ ๋ ฅ:
image im (์ ๋ ฅ ์ด๋ฏธ์ง)
int s (๋ธ๋ก ํฌ๊ธฐ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ธ๋ก ๋จ์๋ก ์๋ผ์ ๋ธ๋ก ๋ด์ ๋ชจ๋ ํฝ์ ๊ฐ์ ๋ธ๋ก ๋ด ์ฒซ๋ฒ์งธ ํฝ์ ๊ฐ์ผ๋ก ๋์ฒดํ๋ ํจ์์ ๋๋ค.
์ฆ, ๋ธ๋ก ํฌ๊ธฐ s๋ก ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์๋์ ๋, ํ ๋ธ๋ก ๋ด์ ํฝ์ ๊ฐ์ ์ฒซ๋ฒ์งธ ํฝ์ ๊ฐ์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
์ด๋ ๋ธ๋ก ๋ด ํฝ์ ๊ฐ๋ค์ด ํฌ๊ฒ ์ฐจ์ด๋์ง ์๋๋ก ํ์ฌ ์ด๋ฏธ์ง์ "blocky"ํ ํจ๊ณผ๋ฅผ ๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง im์ ๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์๋ฅผ ๊ฐ๊ฐ im.w, im.h, im.c๋ผ๊ณ ํ ๋, ์ด ํจ์๋ ์ด im.w * im.h * im.c ๊ฐ์ ํฝ์ ์ ๊ฐ์ง ์ด๋ฏธ์ง๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
์ ๋ ฅ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ธ๋ก ํฌ๊ธฐ s๋ก ๋๋ ์ ๊ฐ ๋ธ๋ก์ ์ฒซ๋ฒ์งธ ํฝ์ ๊ฐ์ ์ ์ธํ ๋ชจ๋ ํฝ์ ๊ฐ์ ์ฒซ๋ฒ์งธ ํฝ์ ๊ฐ์ผ๋ก ๋์ฒดํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ๋ธ๋ก ๋ด ํฝ์ ๊ฐ์ด ์ฒซ๋ฒ์งธ ํฝ์ ๊ฐ๊ณผ ๊ฐ์์ง๋ฏ๋ก, ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ชจ๋ ๋ธ๋ก์ด ๋๋ ทํ ๊ฒฝ๊ณ๋ก ๊ตฌ๋ถ๋๋ "blocky"ํ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์ต๋๋ค.
censor_image
ํจ์ ์ด๋ฆ: censor_image
์ ๋ ฅ:
im: ์ฒ๋ฆฌํ ์ด๋ฏธ์ง (image ํ์ )
dx: ๊ฐ๋ฆด ์์ญ์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ x์ขํ (int ํ์ )
dy: ๊ฐ๋ฆด ์์ญ์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ y์ขํ (int ํ์ )
w: ๊ฐ๋ฆด ์์ญ์ ๋๋น (int ํ์ )
h: ๊ฐ๋ฆด ์์ญ์ ๋์ด (int ํ์ )
๋์:
im ์ด๋ฏธ์ง์ (dx, dy) ์ขํ๋ฅผ ์์์ผ๋ก wรh ํฌ๊ธฐ์ ์์ญ์ ๊ฒ์ ์์ผ๋ก ๊ฐ๋ฆฐ๋ค.
๋จ, ์ด ๋, ๊ฐ๋ฆฌ๋ ์์ญ์ 32ร32 ํฌ๊ธฐ์ ์์ ๋ธ๋ก๋ค๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฒ์ ์ ๋ธ๋ก๋ค๋ก ์ด๋ฃจ์ด์ง ๊ฐ๋ฆผ๋ง์ด ์ ์ฉ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง(im)์ ํน์ ์์ญ(dx, dy)๋ฅผ ๊ฒ์ ์ ๋ธ๋ก์ผ๋ก ๊ฐ๋ฆผ์ผ๋ก์จ ํด๋น ์์ญ์ ์จ๊ธฐ๋ ํจ์์ด๋ค.
๋ง์ฝ dx, dy๊ฐ ์์์ธ ๊ฒฝ์ฐ์๋ ์ข์ธก ์๋จ ๋ชจ์๋ฆฌ๊ฐ ์ด๋ฏธ์ง ๋ฐ๊นฅ์ผ๋ก ๋ฒ์ด๋์ง ์๋๋ก ๋ณด์ ๋๋ค.
๊ฐ๋ฆด ์์ญ์ 32ร32 ํฌ๊ธฐ์ ์์ ๋ธ๋ก์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฐ๋ฆผ๋ง์ผ๋ก ์ฒ๋ฆฌ๋์ด, ๊ฒ์ ์ ๋ธ๋ก์ผ๋ก ๊ฐ๋ ค์ง ์์ญ์ ํฌ๊ธฐ๋ 32์ ๋ฐฐ์๊ฐ ๋๋ค. ๋ฐ๋ผ์ w์ h ๊ฐ์ด 32์ ๋ฐฐ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ง์ง๋ง ๋ธ๋ก์ ์ผ๋ถ๋ถ๋ง ๊ฐ๋ฆด ์ ์๋ค.
embed_image
ํจ์ ์ด๋ฆ: embed_image
์ ๋ ฅ:
source: ์ด๋ฏธ์ง ํ์ (image)์ ์์ค ์ด๋ฏธ์ง
dest: ์ด๋ฏธ์ง ํ์ (image)์ ๋ชฉ์ ์ด๋ฏธ์ง
dx: ๋ชฉ์ ์ด๋ฏธ์ง์์ ์์ค ์ด๋ฏธ์ง๊ฐ ์ฝ์ ๋ x์ขํ
dy: ๋ชฉ์ ์ด๋ฏธ์ง์์ ์์ค ์ด๋ฏธ์ง๊ฐ ์ฝ์ ๋ y์ขํ
๋์:
์ด ํจ์๋ ์์ค ์ด๋ฏธ์ง๋ฅผ ๋ชฉ์ ์ด๋ฏธ์ง์ ์ฝ์ ํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ฝ์ ๋ ์์น๋ ๋ชฉ์ ์ด๋ฏธ์ง์์ ์ง์ ๋ dx, dy ์์น์ ๋๋ค.
์์ค ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ์ ๋๋ฉด์ ๋ชฉ์ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ฝ์ ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ๋ ์์ ์ ์ํํ๋ ํจ์์ ๋๋ค.
์์ค ์ด๋ฏธ์ง์ ๋ชฉ์ ์ด๋ฏธ์ง๋ ์ด๋ฏธ์ง ํ์ (image)์ผ๋ก ์ ๋ ฅ๋๋ฉฐ, dx์ dy๋ ์ฝ์ ๋ ์์น๋ฅผ ๋ํ๋ด๋ ์ ์ํ(int) ๋ณ์์ ๋๋ค.
์์ค ์ด๋ฏธ์ง์ ๋ชฉ์ ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์ ๋ณด๋ ์ด๋ฏธ์ง ํ์ (image)์ผ๋ก๋ถํฐ ์ถ์ถ๋ฉ๋๋ค.
์์ค ์ด๋ฏธ์ง์์๋ ๋ชจ๋ ํฝ์ ์ ๋๋ฉด์ ์ฑ๋๋ณ๋ก ๋ชฉ์ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ฝ์ ํฉ๋๋ค.
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ์ผ๋ถ๋ถ์ ์๋ผ๋ด์ด ๋ค๋ฅธ ์ด๋ฏธ์ง์ ์ฝ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค.
collapse_image_layers
ํจ์ ์ด๋ฆ: collapse_image_layers
์ ๋ ฅ:
source: ์ด๋ฏธ์ง ํ์ (image)์ ์์ค ์ด๋ฏธ์ง
border: ์ด๋ฏธ์ง ์ธต(layer) ๊ฐ์ ์ถ๊ฐํ ํฝ์ ๊ฒฝ๊ณ(border) ํฌ๊ธฐ
๋์:
์ด ํจ์๋ ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง ์ธต(layer)์ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ณํฉํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ด๋ฅผ ์ํด ๊ฐ ์ธต์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ๋ชฉ์ ์ด๋ฏธ์ง์ ์ฝ์ ํฉ๋๋ค.
๊ฐ ์ธต๊ณผ ์ธต ์ฌ์ด์๋ border ํฌ๊ธฐ๋งํผ ๊ฐ๊ฒฉ์ ๋ก๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ณํฉ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง ์ธต(layer)์ ๋ค๋ฃจ๋ ์์ ์ ์ํํ๋ ํจ์์ ๋๋ค.
์์ค ์ด๋ฏธ์ง์ border๋ ๊ฐ๊ฐ ์ด๋ฏธ์ง ํ์ (image)๊ณผ ์ ์ํ(int)์ผ๋ก ์ ๋ ฅ๋ฉ๋๋ค.
ํจ์๋ ์์ค ์ด๋ฏธ์ง์ ๋์ด์ border ํฌ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ๋ชฉ์ ์ด๋ฏธ์ง(dest)์ ๋์ด๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ชฉ์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
๋ชฉ์ ์ด๋ฏธ์ง์ ๊ฐ๋ก ๊ธธ์ด๋ ์์ค ์ด๋ฏธ์ง์ ๋์ผํ๊ณ , ๋์ด๋ ๊ฐ ์ธต์ ๋์ด์ border ํฌ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ๊ณ์ฐํฉ๋๋ค.
์์ค ์ด๋ฏธ์ง์๋ ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง ์ธต(layer)์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฐ ์ธต์ ํ๋์ฉ ๋ถ๋ฌ์์ ๋ชฉ์ ์ด๋ฏธ์ง(dest)์ ์ฝ์ ํฉ๋๋ค.
์ธต๊ณผ ์ธต ์ฌ์ด์๋ border ํฌ๊ธฐ๋งํผ ๊ฐ๊ฒฉ์ ๋๊ณ ์ฝ์ ํฉ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๋ณํฉํ๊ณ ๋ ํ์๋ free_image() ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์ธต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ณํฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ์ธต(layer)์ ์ด์ฉํ์ฌ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๊ตฌํํ ๋, ์ด๋ฏธ์ง์ ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ณํฉํ์ฌ ํ๋์ ์ ๋ ฅ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
constrain_image
ํจ์ ์ด๋ฆ: constrain_image
์ ๋ ฅ:
im: ์ด๋ฏธ์ง ํ์ (image)์ ์ ๋ ฅ ์ด๋ฏธ์ง
๋์:
์ด ํจ์๋ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋๋ก ์ ํ(constrain)ํฉ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ํ์ธํ๋ฉด์ 0๋ณด๋ค ์์ผ๋ฉด 0์ผ๋ก, 1๋ณด๋ค ํฌ๋ฉด 1๋ก ๊ฐ์ ์ ํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ์ํ ํจ์ ์ค ํ๋์ ๋๋ค.
์ด๋ฏธ์ง ํ์ (image)์ ์ ๋ ฅ ์ด๋ฏธ์ง(im)๋ฅผ ๋ฐ์์ ๊ฐ ํฝ์ ์ ๊ฐ์ ํ์ธํ๋ฉด์ 0๋ณด๋ค ์๊ฑฐ๋ 1๋ณด๋ค ํฌ๋ฉด ๊ฐ์ 0 ๋๋ 1๋ก ์กฐ์ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋๋ก ์ ํ๋ฉ๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์์ ์ฌ์ฉ๋ ๋, ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ ๋ฒ์๋ฅผ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ผ๋ก ์ ํํ์ฌ ๋ค๋ฅธ ์ฐ์ฐ์ ์ํํ ๋์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
๋ํ, ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅํ ๋, ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋๋ก ์กฐ์ ํ์ฌ ์ ํํ ์๊ฐํ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค.
normalize_image
ํจ์ ์ด๋ฆ: normalize_image
์ ๋ ฅ:
p: ์ด๋ฏธ์ง ํ์ (image)์ ์ ๋ ฅ ์ด๋ฏธ์ง
๋์:
์ด ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ผ๋ก ์ ๊ทํ(normalize)ํฉ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ํ์ธํ๋ฉด์ ์ต์(min)๊ฐ๊ณผ ์ต๋(max)๊ฐ์ ์ฐพ์ ํ, ๋ชจ๋ ํฝ์ ๊ฐ์ ์ต์์ ์ต๋๊ฐ์ ๋ฒ์์ ๋ง๊ฒ ์กฐ์ ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ์ํ ํจ์ ์ค ํ๋์ ๋๋ค. ์ด๋ฏธ์ง ํ์ (image)์ ์ ๋ ฅ ์ด๋ฏธ์ง(p)๋ฅผ ๋ฐ์์ ๊ฐ ํฝ์ ๊ฐ์ ํ์ธํ๋ฉด์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํฝ์ ๊ฐ์ ์ต์์ ์ต๋๊ฐ์ ๋ฒ์์ ๋ง๊ฒ ์กฐ์ ํ์ฌ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋๋ก ์ ๊ทํํฉ๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์์ ์ฌ์ฉ๋ ๋, ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ ๋ฒ์๋ฅผ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ผ๋ก ์กฐ์ ํ์ฌ ๋ค๋ฅธ ์ฐ์ฐ์ ์ํํ ๋์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
๋ํ, ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅํ ๋, ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋๋ก ์กฐ์ ํ์ฌ ์ ํํ ์๊ฐํ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค.
normalize_image2
ํจ์ ์ด๋ฆ: normalize_image2
์ ๋ ฅ:
image p (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด)
๋์:
์ด๋ฏธ์ง p์ ๋ชจ๋ ์ฑ๋์ ๋ํด ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์ ์ ๊ทํ๋ฅผ ์ํํฉ๋๋ค.
๋จผ์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด ๊ฐ ์ฑ๋๋ง๋ค p์ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ฉด์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์ต๋๋ค.
๋ง์ฝ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ด ๊ฐ์ผ๋ฉด, ์ต์๊ฐ์ 0์ผ๋ก, ์ต๋๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด, ์ต์๊ฐ์ 0์ผ๋ก, ์ต๋๊ฐ์ 1๋ก ์ ๊ทํํฉ๋๋ค.
์ค๋ช :
normalize_image2 ํจ์๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ทํํ๋ ํจ์์ ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ์ ๊ทํํ๋ ์ด์ ๋ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ด ์๋ก ๋ค๋ฅธ ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์์ ๋, ํ์ต ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง์ ๋ชจ๋ ์ฑ๋์ ๋ํด ์ ๊ทํ๋ฅผ ์ํํ๋ฏ๋ก, ๊ฐ ์ฑ๋์ ํฝ์ ๊ฐ ๋ฒ์๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค์ด์ค๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง p์ ๋ชจ๋ ์ฑ๋์ ๋ํด ์ ๊ทํ๋ฅผ ์ํํฉ๋๋ค.
๋จผ์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด ๊ฐ ์ฑ๋๋ง๋ค p์ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ฉด์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐจ์ด๊ฐ 0.000000001๋ณด๋ค ์์ผ๋ฉด ์ต์๊ฐ์ 0์ผ๋ก, ์ต๋๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด, ์ต์๊ฐ์ 0์ผ๋ก, ์ต๋๊ฐ์ 1๋ก ์ ๊ทํํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก normalize_image2 ํจ์๋ ์ด๋ฏธ์ง p์ ๋ชจ๋ ์ฑ๋์ ๋ํด ์ ๊ทํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
copy_image_into
ํจ์ ์ด๋ฆ: copy_image_into
์ ๋ ฅ:
(image) src - ๋ณต์ฌํ๋ ค๋ ์ด๋ฏธ์ง
(image) dest - ๋ณต์ฌ ๋์ ์ด๋ฏธ์ง
๋์:
src ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ๋ฅผ dest ์ด๋ฏธ์ง์ ๋ณต์ฌ
์ค๋ช :
src ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ๋ฅผ dest ์ด๋ฏธ์ง๋ก ๋ณต์ฌํ์ฌ dest ์ด๋ฏธ์ง๋ฅผ src ์ด๋ฏธ์ง์ ๋์ผํ๊ฒ ๋ง๋๋ ํจ์์ ๋๋ค.
src์ dest๋ ๋ชจ๋ image ๊ตฌ์กฐ์ฒด์ ๋๋ค. memcpy ํจ์๋ฅผ ์ฌ์ฉํ์ฌ src ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ๋ฅผ dest ์ด๋ฏธ์ง๋ก ๋ณต์ฌํฉ๋๋ค.
copy_image
ํจ์ ์ด๋ฆ: copy_image
์ ๋ ฅ:
image p (๋ณต์ฌํ๊ณ ์ ํ๋ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง p๋ฅผ ๋ณต์ฌํ์ฌ ์๋ก์ด ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก ์์ฑํ ์ด๋ฏธ์ง ๊ฐ์ฒด์ data ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ p.data ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ฌ ์ ์ฅํ๋ค.
์ค๋ช :
ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง p๋ฅผ ๋ณต์ฌํ ์๋ก์ด ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค.
์ด๋ฏธ์ง ๋ณต์ฌ๋ฅผ ์ํด์ ์๋ก์ด ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ผ ํ๋ค. ๋ฐ๋ผ์ copy_image ํจ์๋ ๋จผ์ ์ ๋ ฅ ์ด๋ฏธ์ง ๊ฐ์ฒด p์ ๋์ผํ ์์ฑ์ ๊ฐ์ง๋ ์๋ก์ด ์ด๋ฏธ์ง ๊ฐ์ฒด copy๋ฅผ ์์ฑํ๋ค. (์ฌ๊ธฐ์ copy๋ p์ ๋์ผํ w, h, c๋ฅผ ๊ฐ์ง์ง๋ง, data๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.)
๊ทธ๋ฆฌ๊ณ copy ๊ฐ์ฒด์ data ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ p ๊ฐ์ฒด์ data ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค. ์ด๋ฅผ ์ํด memcpy ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
์ดํ์๋ ๋ณต์ฌํ ์ด๋ฏธ์ง ๊ฐ์ฒด copy๋ฅผ ๋ฐํํ๋ค.
rgbgr_image
ํจ์ ์ด๋ฆ: rgbgr_image
์ ๋ ฅ:
image im (์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๊ตฌ์กฐ์ฒด)
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง์ RGB ์ฑ๋ ๊ฐ์ BGR ์ฑ๋ ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ์ float ํ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ด ํจ์๋ ์ด๋ฌํ ์ด๋ฏธ์ง์์ RGB ์ฑ๋ ๊ฐ์ BGR ์ฑ๋ ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค.
๊ตฌ์ฒด์ ์ผ๋ก๋, ์ฃผ์ด์ง ์ด๋ฏธ์ง์ ๋๋น์ ๋์ด๋ฅผ ๊ณฑํ ๊ฐ๋งํผ ๋ฐ๋ณตํ๋ฉด์, ๊ฐ ํฝ์ ์ RGB ์ฑ๋ ๊ฐ์ BGR ์ฑ๋ ๊ฐ์ผ๋ก ๊ต์ฒดํ๋ค.
์ด๋, R๊ณผ B ์ฑ๋์ ์์น๋ฅผ ๋ฐ๊พธ๋ฉด ๋๋ค. ์ด ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉฐ ๋ฐํ ๊ฐ์ ์๋ค.
show_image
ํจ์ ์ด๋ฆ: show_image
์ ๋ ฅ:
image p: ์ถ๋ ฅํ ์ด๋ฏธ์ง
const char *name: ์๋์ฐ ์ฐฝ ์ด๋ฆ ๋๋ ์ด๋ฏธ์ง ํ์ผ ์ด๋ฆ
int ms: ์ด๋ฏธ์ง๊ฐ ์๋์ฐ ์ฐฝ์ ์ถ๋ ฅ๋๋ ์๊ฐ(๋ฐ๋ฆฌ์ด)
๋์:
OPENCV ๋งคํฌ๋ก๊ฐ ์ ์๋์ด ์๋ค๋ฉด, OpenCV๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์๋์ฐ ์ฐฝ์ ์ถ๋ ฅํ๊ณ ํค๋ณด๋ ์ ๋ ฅ์ ๋ฐํํ๋ค.
OPENCV ๋งคํฌ๋ก๊ฐ ์ ์๋์ด ์์ง ์์ผ๋ฉด, ์ด๋ฏธ์ง๋ฅผ PNG ํ์ผ๋ก ์ ์ฅํ๋ค.
์ค๋ช :
์ด๋ฏธ์ง๋ฅผ ์๋์ฐ ์ฐฝ์ ์ถ๋ ฅํ๊ฑฐ๋ ํ์ผ๋ก ์ ์ฅํ๋ ํจ์์ด๋ค.
OPENCV ๋งคํฌ๋ก๊ฐ ์ ์๋์ด ์๋ค๋ฉด OpenCV๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ ํค๋ณด๋ ์ ๋ ฅ์ ๋ฐํํ๋ค.
OPENCV ๋งคํฌ๋ก๊ฐ ์ ์๋์ด ์์ง ์์ผ๋ฉด ์ด๋ฏธ์ง๋ฅผ PNG ํ์ผ๋ก ์ ์ฅํ๋ฉฐ, ์ถ๋ ฅ๋ ํ์ผ ์ด๋ฆ์ name ๋งค๊ฐ ๋ณ์์ ์ง์ ๋ ์ด๋ฆ์ .png ํ์ฅ์๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด๋ค.
๋ฐํ๊ฐ์ OPENCV๋ฅผ ์ฌ์ฉํ ๋ ์๋์ฐ ์ฐฝ์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ ํค๋ณด๋ ์ฝ๋์ด๋ค.
OPENCV๊ฐ ์ฌ์ฉ๋์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํํ๋ค.
save_image_options
ํจ์ ์ด๋ฆ: save_image_options
์ ๋ ฅ:
image im (์ด๋ฏธ์ง ๋ฐ์ดํฐ)
const char *name (ํ์ผ ์ด๋ฆ)
IMTYPE f (์ ์ฅํ ์ด๋ฏธ์ง ํ์ผ ํ์)
int quality (JPEG ํ์ผ ํ์์ผ๋ก ์ ์ฅํ ๋ ์ด๋ฏธ์ง ํ์ง ์ค์ )
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ํ์ผ ํ์์ผ๋ก ์ ์ฅํ๋ ํจ์์ ๋๋ค.
์ ๋ ฅ๋ ํ์ผ ํ์์ ๋ฐ๋ผ ํ์ผ ํ์ฅ์๋ฅผ ๊ฒฐ์ ํ๊ณ , ์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํ์ผ ํ์์ ๋ง๊ฒ ์ธ์ฝ๋ฉํ์ฌ ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ unsigned char ํ์ ์ผ๋ก ๋ณํํ ํ, ์ง์ ๋ ํ์ผ ํ์์ ๋ฐ๋ผ ์ธ์ฝ๋ฉํ์ฌ ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ด๋ฏธ์ง ํ์ผ ํ์์ PNG, BMP, TGA, JPG ํ์์ ์ง์ํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก PNG ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค.
๋ง์ฝ OpenCV๊ฐ ์ค์น๋์ด ์๋ค๋ฉด, OpenCV๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ ์๋ ์์ต๋๋ค.
์ ์ฅ๋ ํ์ผ ์ด๋ฆ์ ์ ๋ ฅ๋ ํ์ผ ์ด๋ฆ์ ํ์ผ ํ์ฅ์๊ฐ ์ถ๊ฐ๋ ํํ๋ก ์ ์ฅ๋ฉ๋๋ค. ํ์ผ ์ ์ฅ์ ์คํจํ๋ฉด, ์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
save_image
ํจ์ ์ด๋ฆ: save_image
์ ๋ ฅ:
image im (์ ์ฅํ ์ด๋ฏธ์ง)
const char *name (์ ์ฅํ ํ์ผ ์ด๋ฆ)
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ JPG ํ์์ผ๋ก ์ง์ ๋ ํ์ผ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๋ค.
๋ด๋ถ์ ์ผ๋ก๋ save_image_options ํจ์๋ฅผ ํธ์ถํ๋ฉฐ, ์ด๋ฏธ์ง๋ฅผ unsigned char ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ํ์ผ์ ์ด๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ ํ์ผ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง ํ์ผ์ ํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก JPG ํ์์ด๋ฉฐ, ์ ์ฅํ ๋ ์์ถ๋ฅ ์ 80์ผ๋ก ์ง์ ๋๋ค.
๋ด๋ถ์ ์ผ๋ก๋ save_image_options ํจ์๋ฅผ ํธ์ถํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ์ ์ฅํ๋ฉฐ, ํ์ผ์ ํ์์ ๋ณ๊ฒฝํ๋ ค๋ฉด save_image_options ํจ์๋ฅผ ์ง์ ํธ์ถํ์ฌ์ผ ํ๋ค.
show_image_layers
ํจ์ ์ด๋ฆ: show_image_layers
์ ๋ ฅ:
image p (์ ๋ ฅ ์ด๋ฏธ์ง)
char *name (์ฐฝ ์ ๋ชฉ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฐฝ์ ๋ฐ๋ก ํ์
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ ๋ฐ๋ก ์ฐฝ์ผ๋ก ํ์ํ๋ ํจ์์ ๋๋ค.
๋ ์ด์ด ๋ณ๋ก ์ฐฝ ์ ๋ชฉ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ name ๋ค์ " - Layer i" (i๋ ๋ ์ด์ด ์ธ๋ฑ์ค)๋ฅผ ๋ถ์ฌ ๊ตฌ์ฑํฉ๋๋ค.
์ด ๋, ๊ฐ ๋ ์ด์ด๋ get_image_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถํ๊ณ , ํด๋น ๋ ์ด์ด๋ฅผ ํ์ํ ๋ค, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
show_image_collapsed
ํจ์ ์ด๋ฆ: show_image_collapsed
์ ๋ ฅ:
image p (์ถ๋ ฅํ ์ด๋ฏธ์ง)
char *name (์๋์ฐ ์ฐฝ์ ํ์ํ ์ด๋ฏธ์ง์ ์ด๋ฆ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ชจ๋ ๋ ์ด์ด๋ฅผ ํ๋์ ์ด๋ฏธ์ง๋ก ์ถ์ํ ๋ค์, ์ด๋ฅผ ์๋์ฐ ์ฐฝ์ ํ์ํจ
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง p์ ๋ชจ๋ ๋ ์ด์ด๋ฅผ ํ๋์ ์ด๋ฏธ์ง๋ก ์ถ์ํ ๋ค์, ์ด๋ฅผ ์๋์ฐ ์ฐฝ์ ํ์ํ๋ ํจ์์ ๋๋ค.
์ถ์๋ ์ด๋ฏธ์ง๋ collapse_image_layers ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ฉฐ, ์๋์ฐ ์ฐฝ์ ํ์ํ๋ ๋ถ๋ถ์ show_image ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ์์ฑ๋ ์ถ์๋ ์ด๋ฏธ์ง๋ free_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ฉ๋๋ค.
make_empty_image
ํจ์ ์ด๋ฆ: make_empty_image
์ ๋ ฅ:
int w (์ด๋ฏธ์ง์ ๋๋น)
int h (์ด๋ฏธ์ง์ ๋์ด)
int c (์ด๋ฏธ์ง์ ์ฑ๋ ์)
๋์:
๋๋น, ๋์ด, ์ฑ๋ ์๋ฅผ ์ง์ ํ์ฌ ๋น์ด์๋(image.data = 0) ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ฐ์ ์ด๋ฏธ์ง์ ๋๋น, ๋์ด, ์ฑ๋ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋น์ด์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ 0์ ๋๋ค.
make_image
ํจ์ ์ด๋ฆ: make_image
์ ๋ ฅ:
int w: ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
int h: ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
int c: ์ด๋ฏธ์ง์ ์ฑ๋ ์
๋์:
์ ๋ ฅ๋ฐ์ ๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์๋ฅผ ๊ฐ์ง๋ ๋น ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ํด๋น ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๋ค.
์ค๋ช :
make_empty_image ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์๋ฅผ ๊ฐ์ง๋ ๋น ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ํด๋น ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ calloc ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋นํ๋ค.
ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค. ์ต์ข ์ ์ผ๋ก ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
make_random_image
ํจ์ ์ด๋ฆ: make_random_image
์ ๋ ฅ:
w: ์์ฑ๋ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
h: ์์ฑ๋ ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
c: ์์ฑ๋ ์ด๋ฏธ์ง์ ์ฑ๋ ์
๋์:
๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์๋ฅผ ์ ๋ ฅ ๋ฐ์ ๋์๋ก ๊ตฌ์ฑ๋ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
์ค๋ช :
์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ ๋ ฅ๋ ํฌ๊ธฐ(w, h, c)๋ก make_empty_image() ํจ์๋ฅผ ํธ์ถํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋ ์ด๋ฏธ์ง(out)์ ๋ฐ์ดํฐ๋ฅผ ๋์๋ก ์ด๊ธฐํํ๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ๋ rand_normal() ํจ์๋ ํ๊ท ์ด 0์ด๊ณ ํ์คํธ์ฐจ๊ฐ 1์ธ ์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅด๋ ๋์๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค. ๋ฐํ๋ out ์ด๋ฏธ์ง๋ ์์ฑ๋ ์๋ก์ด ์ด๋ฏธ์ง์ด๋ค.
float_to_image
ํจ์ ์ด๋ฆ: float_to_image
์ ๋ ฅ:
(int) w: ์ด๋ฏธ์ง์ ๋๋น
(int) h: ์ด๋ฏธ์ง์ ๋์ด
(int) c: ์ด๋ฏธ์ง์ ์ฑ๋ ์
(float *) data: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ํฌ์ธํฐ
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง ๋ฐ์ดํฐ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ w, h, c ํฌ๊ธฐ์ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ์ด๋ฏธ์ง ๋ฐ์ดํฐ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ w, h, c ํฌ๊ธฐ์ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ ๋ฐํํฉ๋๋ค.
๋ฐํ ๋ ์ด๋ฏธ์ง๋ ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก, ๋ฐํ ๋ ์ด๋ฏธ์ง๋ฅผ ์์ ํ๋ฉด ์ ๋ ฅ ๋ฐ์ดํฐ๋ ์์ ๋ฉ๋๋ค.
place_image
ํจ์ ์ด๋ฆ: place_image
์ ๋ ฅ:
image im: ๋ณต์ฌํ ์ด๋ฏธ์ง
int w: ๋ณต์ฌํ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
int h: ๋ณต์ฌํ ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
int dx: ์บ๋ฒ์ค ๋ด์์ ์ด๋ฏธ์ง๊ฐ ๋ฐฐ์น๋ x์ขํ
int dy: ์บ๋ฒ์ค ๋ด์์ ์ด๋ฏธ์ง๊ฐ ๋ฐฐ์น๋ y์ขํ
image canvas: ์ด๋ฏธ์ง๊ฐ ๋ฐฐ์น๋ ์บ๋ฒ์ค
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง im์ ๊ฐ๋ก ํฌ๊ธฐ w, ์ธ๋ก ํฌ๊ธฐ h๋ก ์กฐ์ ํ ํ, ์บ๋ฒ์ค canvas ๋ด์์ ์ขํ (dx, dy)์ ์์น์ํต๋๋ค.
bilinear_interpolate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ ๊ฐ์ ธ์ ์บ๋ฒ์ค์ ๋ณต์ฌํฉ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง๋ฅผ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ ์บ๋ฒ์ค ์์ ๋ฐฐ์นํ ๋ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ก, ์ธ๋ก ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ํ ํ, ์ง์ ๋ ์ขํ์ ์์น์ํต๋๋ค.
bilinear_interpolate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ๊ฐ์ ๊ฐ์ ธ์ ์บ๋ฒ์ค์ ๋ณต์ฌํฉ๋๋ค.
center_crop_image
ํจ์ ์ด๋ฆ: center_crop_image
์ ๋ ฅ:
im: ์๋ฅผ ์ด๋ฏธ์ง
w: ์ถ๋ ฅํ ์ด๋ฏธ์ง์ ๋๋น
h: ์ถ๋ ฅํ ์ด๋ฏธ์ง์ ๋์ด
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ค์์์๋ถํฐ ๊ฐ์ฅ ์์ ์ฐจ์์ ๊ธฐ์ค์ผ๋ก ์ ์ฌ๊ฐํ์ผ๋ก ์๋ฅธ๋ค.
์๋ฅธ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ ๋๋น์ ๋์ด๋ก ๋ฆฌ์ฌ์ด์ฆํ๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ค์์์๋ถํฐ ๊ฐ์ฅ ์์ ์ฐจ์์ ๊ธฐ์ค์ผ๋ก ์ ์ฌ๊ฐํ์ผ๋ก ์๋ฅด๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ์ถ๋ ฅ ํฌ๊ธฐ๋ก ๋ฆฌ์ฌ์ด์ฆํ์ฌ ๋ฐํํ๋ ํจ์์ด๋ค. ์ด ํจ์๋ ์ด๋ฏธ์ง ๋ถ๋ฅ ๋ฑ์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
rotate_crop_image
ํจ์ ์ด๋ฆ: rotate_crop_image
์ ๋ ฅ:
image im : ํ์ ๋ฐ ํฌ๋กญํ ์๋ณธ ์ด๋ฏธ์ง
float rad : ํ์ ํ ๊ฐ๋ (๋ผ๋์)
float s : ํฌ๊ธฐ ์กฐ์ ๋น์จ
int w : ์ถ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
int h : ์ถ๋ ฅ ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
float dx : x์ถ ๋ฐฉํฅ ์ด๋๋
float dy : y์ถ ๋ฐฉํฅ ์ด๋๋
float aspect : ๊ฐ๋ก ์ธ๋ก ๋น์จ
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ๊ฐ๋๋ก ํ์ ํ๊ณ , ์ฃผ์ด์ง ํฌ๊ธฐ ๋น์จ๋ก ์กฐ์ ํ๋ฉฐ, ์ฃผ์ด์ง ์์น๋ก ์ด๋์ํจ ํ, ์ฃผ์ด์ง ๊ฐ๋ก ์ธ๋ก ๋น์จ์ ๋ง๊ฒ ํฌ๋กญํ์ฌ ์ถ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
์ค๋ช :
์ด๋ฏธ์ง ์ฒ๋ฆฌ์์ ํ์ , ํฌ๊ธฐ ์กฐ์ , ์ด๋, ํฌ๋กญ์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ์์ ์ค ํ๋์ด๋ค. ์ด ํจ์๋ ์ด๋ฌํ ์์ ์ ์ํํ๋ ํจ์ ์ค ํ๋๋ก, ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ๊ฐ๋์ ๋น์จ, ์์น์ ๋ฐ๋ผ ํ์ , ํฌ๊ธฐ ์กฐ์ , ์ด๋์ ์ํํ ํ, ์ฃผ์ด์ง ๊ฐ๋ก ์ธ๋ก ๋น์จ์ ๋ง๊ฒ ํฌ๋กญํ์ฌ ์ถ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค. ํ์ ๋ฐ ํฌ๋กญ์ ํ์ํ ๋ณด๊ฐ(interpolation)์ bilinear_interpolate ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
rotate_image
ํจ์ ์ด๋ฆ: rotate_image
์ ๋ ฅ:
image im (์ ๋ ฅ ์ด๋ฏธ์ง)
float rad (ํ์ ๊ฐ๋)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ๊ฐ๋(rad)๋งํผ ํ์ ์ํจ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
ํ์ ๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ผํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ์์น๋ฅผ ํ์ ๋ณํํ์ฌ ํ์ ๋ ์ด๋ฏธ์ง์์ ํด๋น ์์น์ ๊ฐ์ bilinear_interpolate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด๊ฐํฉ๋๋ค.
ํ์ ๋ณํ๋ ์์น์์ ๋ณด๊ฐ๋ ๊ฐ์ ํ์ ๋ ์ด๋ฏธ์ง์ ํด๋น ์์น์ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
ํ์ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
fill_image
ํจ์ ์ด๋ฆ: fill_image
์ ๋ ฅ:
image m (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ)
float s (์ด๊ธฐํ ๊ฐ)
๋์:
์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ์ด๊ธฐํ ๊ฐ s๋ก ์ค์ ํจ
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ m์ด ๊ฐ๋ฆฌํค๋ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ์ด๊ธฐํ ๊ฐ s๋ก ์ค์ ํฉ๋๋ค.
์ด๊ธฐํ ๊ฐ s๋ floatํ์ผ๋ก ์ ๋ ฅ ๋ฐ์ผ๋ฉฐ, ์ด๋ฏธ์ง์ ์ฑ๋ ์(c), ๋์ด(h), ๋๋น(w)์ ๋ฐ๋ผ ์ด๋ฏธ์ง ์ ์ฒด์ ํฌ๊ธฐ(m.hm.wm.c)๋งํผ ๋ฐ๋ณตํ์ฌ ๊ฐ ํฝ์ ์ ์ด๊ธฐํํฉ๋๋ค.
๋ฐ๋ผ์ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ๋์ผํ ๊ฐ์ผ๋ก ์ฑ์ฐ๊ณ ์ ํ ๋ ์ด ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
translate_image
ํจ์ ์ด๋ฆ: translate_image
์ ๋ ฅ:
image m (์ด๋ฏธ์ง)
float s (์ด๋๋)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง m์ ๋ชจ๋ ํฝ์ ๊ฐ์ s๋งํผ ์ด๋์ํต๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง์ ๋๋น, ๋์ด, ์ฑ๋ ์๋ฅผ ๋ชจ๋ ๊ณฑํ ํฌ๊ธฐ๋งํผ ๋ชจ๋ ํฝ์ ๊ฐ์ s๋งํผ ์ฆ๊ฐ์ํค๋ ํจ์์ ๋๋ค.
์ด๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ s๋งํผ ์ค๋ฅธ์ชฝ ๋๋ ์๋์ชฝ์ผ๋ก ์ด๋์ํฌ ์ ์์ต๋๋ค.
scale_image
ํจ์ ์ด๋ฆ: scale_image
์ ๋ ฅ:
image m (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ)
float s (์ค์ผ์ผ๋ง ๋น์จ)
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ๋ค์ ์ค์ผ์ผ๋ง ๋น์จ์ ๋ง๊ฒ ์กฐ์
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ๋ค์ ๋ํด ์ค์ผ์ผ๋ง ๋น์จ์ ๊ณฑํ์ฌ ์ด๋ฏธ์ง ์ ์ฒด๋ฅผ ์กฐ์ ํจ.
์ค์ผ์ผ๋ง ๋น์จ์ด 1๋ณด๋ค ์์ผ๋ฉด ์ด๋ฏธ์ง๊ฐ ์ถ์๋๊ณ , 1๋ณด๋ค ํฌ๋ฉด ์ด๋ฏธ์ง๊ฐ ํ๋๋จ.
crop_image
ํจ์ ์ด๋ฆ: crop_image
์ ๋ ฅ:
image im: ํฌ๋กญ ๋์ ์ด๋ฏธ์ง
int dx: x์ถ์ผ๋ก ์ด๋ํ ํฝ์ ์
int dy: y์ถ์ผ๋ก ์ด๋ํ ํฝ์ ์
int w: ์ถ๋ ฅํ ์ด๋ฏธ์ง์ ๋๋น
int h: ์ถ๋ ฅํ ์ด๋ฏธ์ง์ ๋์ด
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง์์ dx์ dy๋งํผ ์ด๋ํ ํ, w์ h ํฌ๊ธฐ๋งํผ์ ์์ญ์ ์๋ฅธ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ์ฌ ๋ฐํํฉ๋๋ค.
์ด๋ฏธ์ง์ ์ฑ๋ ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์, ์ถ๋ ฅํ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ ๋ณต์ฌํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง์ ํน์ ์์ญ์ ์๋ผ๋ด๋ ๊ธฐ๋ฅ์ ์ํํ๋ ํจ์์ ๋๋ค.
ํฌ๋กญ์ ์ํด x์ y ์ถ์ผ๋ก ๊ฐ๊ฐ ์ด๋ํ ํฝ์ ์์ ์ถ๋ ฅํ ์ด๋ฏธ์ง์ ๋๋น์ ๋์ด๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค.
ํจ์ ๋ด๋ถ์์๋ ์ถ๋ ฅํ ์ด๋ฏธ์ง ํฌ๊ธฐ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ์ ๋ ฅ ์ด๋ฏธ์ง์์ ์์ญ์ ์๋ผ๋ด์ด ๋ณต์ฌํฉ๋๋ค.
ํฝ์ ์ขํ๋ dx์ dy๋งํผ ์ด๋ํ ํ, ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๋๋ก ์ ํํฉ๋๋ค.
best_3d_shift_r
ํจ์ ์ด๋ฆ: best_3d_shift_r
์ ๋ ฅ:
image a: ๋น๊ตํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ
image b: ์ด๋ฏธ์ง ๋ฐ์ดํฐ
int min: ์ด๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ
int max: ์ด๋ ๊ฑฐ๋ฆฌ์ ์ต๋๊ฐ
๋์:
์ด์ง ๊ฒ์์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง b์ ์์ง ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์กฐ์ ํ์ฌ ์ด๋ฏธ์ง a์ ๊ฐ์ฅ ์ผ์นํ๋ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์
์ด๋ฏธ์ง b๋ฅผ ๋ ๊ฐ์ ์ด๋ฏธ์ง๋ก ์๋ฅด๊ณ , ์๋ฅธ ์ด๋ฏธ์ง๋ค๊ณผ ์ด๋ฏธ์ง a์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ์ต์ ์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์
์ค๋ช :
์ด๋ฏธ์ง a์ b๋ ๊ฐ์ ํฌ๊ธฐ์ ์ฑ๋ ์๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํจ
์ด ํจ์๋ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋๋ฉฐ, ์ด๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง b๋ฅผ ์๋ฅด๊ณ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ์ต์ ์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์
์ด๋ฏธ์ง b๋ฅผ ์์ง์ผ๋ก ์๋ฅธ ๋ ๊ฐ์ ์ด๋ฏธ์ง(c1, c2)๋ฅผ ์์ฑํ์ฌ ์ด๋ฏธ์ง a์์ ๊ฑฐ๋ฆฌ(d1, d2)๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ์ผ๋ก ๋๋์ด ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ์ฌ ์ต์ ์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์
์ฌ๊ท ํธ์ถ์ ํ ๋ ๊ฑฐ๋ฆฌ(d1, d2)๊ฐ ์์ ์ชฝ์ ์ ํํ์ฌ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ขํ๋๊ฐ๋ฉฐ ์ต์ ์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์
best_3d_shift
ํจ์ ์ด๋ฆ: best_3d_shift
์ ๋ ฅ:
image a (๋น๊ตํ ์ด๋ฏธ์ง)
image b (์ด๋์ํฌ ๋์ ์ด๋ฏธ์ง)
int min (์ด๋ ๋ฒ์ ์ต์๊ฐ)
int max (์ด๋ ๋ฒ์ ์ต๋๊ฐ)
๋์:
์ด๋ฏธ์ง b๋ฅผ min๋ถํฐ max๊น์ง 2์ฉ ์ฆ๊ฐ์ํค๋ฉฐ ์ด๋์ํจ ํ, ์ด๋ฏธ์ง a์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ์ฌ ๊ฐ์ฅ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๋ ์ด๋๊ฐ์ ๋ฐํํ๋ค.
์ค๋ช :
best_3d_shift ํจ์๋ ์ด๋ฏธ์ง a์ b๋ฅผ ๋น๊ตํ์ฌ ์ต์ ์ ์ด๋ ๊ฐ์ ์ฐพ์๋ด๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง b๋ฅผ min๋ถํฐ max๊น์ง 2์ฉ ์ฆ๊ฐ์ํค๋ฉฐ ์ด๋์ํจ ํ, ์ด๋๋ ์ด๋ฏธ์ง์ ์ด๋ฏธ์ง a์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ์ฌ ๊ฐ์ฅ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๋ ์ด๋๊ฐ์ ๋ฐํํ๋ค.
์ด๋ฏธ์ง ์ด๋์ crop_image ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ์์ผ๋ฉฐ, ๊ฑฐ๋ฆฌ ์ธก์ ์ dist_array ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ์๋ค.
ํจ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ printf ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ ฅํ๋ค.
composite_3d
ํจ์ ์ด๋ฆ: composite_3d
์ ๋ ฅ:
char *f1: ํฉ์ฑํ ์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
char *f2: ํฉ์ฑํ ๋ ๋ฒ์งธ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
char *out: ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ํ์ผ ๊ฒฝ๋ก (default: "out")
int delta: ์ด๋ฏธ์ง ํฉ์ฑ ์ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ํฝ์ ์
๋์:
f1๊ณผ f2 ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ด
best_3d_shift_r ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ์ ๋ ฌ
delta ๊ฐ์ ๋ฐ๋ผ f2 ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋์ํด
f2 ์ด๋ฏธ์ง์ f1 ์ด๋ฏธ์ง๋ฅผ ํฉ์ฑํ์ฌ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ ์ ์ฅ
์ค๋ช :
composite_3d ํจ์๋ ๋ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ํฉ์ฑํ์ฌ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ฃผ๋ ํจ์์ ๋๋ค.
ํฉ์ฑํ ๋ ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก์ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ, ๊ฒฐ๊ณผ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ ์ ๋ ฅํ์ง ์์ผ๋ฉด "out"์ผ๋ก ์ค์ ๋ฉ๋๋ค.
delta ๊ฐ์ ์ด๋ฏธ์ง ํฉ์ฑ ์ f2 ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋์ํค๋ ํฝ์ ์๋ฅผ ๋ํ๋ ๋๋ค.
๋จผ์ , f1๊ณผ f2 ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์จ ๋ค์ best_3d_shift_r ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ์ดํ delta ๊ฐ์ ๋ฐ๋ผ f2 ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋์ํค๊ณ , f2 ์ด๋ฏธ์ง์ f1 ์ด๋ฏธ์ง๋ฅผ ํฉ์ฑํ์ฌ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค.
๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ save_image ํจ์๋ฅผ ์ด์ฉํ์ฌ out ์ธ์์ ์ ๋ ฅ๋ ํ์ผ ๊ฒฝ๋ก์ ์ ์ฅ๋ฉ๋๋ค.
letterbox_image_into
ํจ์ ์ด๋ฆ: letterbox_image_into
์ ๋ ฅ:
(image im): ์๋ณธ ์ด๋ฏธ์ง
(int w): ๋ฐ์ค์ ๊ฐ๋ก ๊ธธ์ด
(int h): ๋ฐ์ค์ ์ธ๋ก ๊ธธ์ด
(image boxed): ๋ฐ์ค ์ด๋ฏธ์ง
๋์:
์ ๋ ฅ๋ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ๋ฐ์ค ํฌ๊ธฐ์ ๋ง๊ฒ ๋ฆฌ์ฌ์ด์งํ๊ณ , ์ค์์ ์์น์์ผ ๋ฐ์ค ์ด๋ฏธ์ง์ ์ฝ์ ํ๋ ํจ์
์ค๋ช :
์ ๋ ฅ๋ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง ๋ฐ์ค์ ๊ฐ๋ก์ ์ธ๋ก ๊ธธ์ด ์ค ์ด๋ ์ชฝ์ ๋ง์ถ ๊ฒ์ธ์ง๋ฅผ ํ๋จ
์๋ก ์กฐ์ ๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๊ณ , ๋ฆฌ์ฌ์ด์ง
๋ฆฌ์ฌ์ด์ง๋ ์ด๋ฏธ์ง๋ฅผ ์ค์์ ์์น์์ผ ๋ฐ์ค ์ด๋ฏธ์ง์ ์ฝ์
์ฌ์ฉ๋ ์ด๋ฏธ์ง๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์
letterbox_image
ํจ์ ์ด๋ฆ: letterbox_image
์ ๋ ฅ:
image im: letterbox ์ฒ๋ฆฌํ ๋์ ์ด๋ฏธ์ง
int w: ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ํญ
int h: ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ๋์ด
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง im์ w x h ํฌ๊ธฐ๋ก letterbox ์ฒ๋ฆฌํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
letterbox ์ฒ๋ฆฌ๋ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์๋ก์ด ํฌ๊ธฐ์ ์ด๋ฏธ์ง ์์ชฝ์ ๋ ํฐ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ค์์ ์์น์ํค๋ ๊ฒ์ด๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง im์ ๊ฐ๋ก, ์ธ๋ก ๋น์จ๊ณผ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๋น์จ์ ๋น๊ตํ์ฌ, ์๋ก์ด ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก๋ฅผ ๊ณ์ฐํ๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์๋ก์ด ๊ฐ๋ก์ ์ธ๋ก๋ก resize_image ํจ์๋ฅผ ์ด์ฉํด ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
์๋ก์ด ๊ฐ๋ก์ ์ธ๋ก ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
์๋ก์ด ์ด๋ฏธ์ง๋ฅผ 0.5๋ก ์ด๊ธฐํํ๋ค.
์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ค์์ ์์น์ํจ ํ, ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
resize_max
ํจ์ ์ด๋ฆ: resize_max
์ ๋ ฅ:
image im (์ ๋ ฅ ์ด๋ฏธ์ง)
int max (๋ฆฌ์ฌ์ด์งํ ์ด๋ฏธ์ง์ ์ต๋ ํฌ๊ธฐ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ต๋ ํฌ๊ธฐ(max)์ ๋ง์ถ์ด ๋ฆฌ์ฌ์ด์งํ๋ค.
์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก ์ค ๋ ๊ธด ์ชฝ์ max์ ๋ง๊ฒ ์กฐ์ ํ๊ณ , ๋น์จ์ ๋ง๊ฒ ๋ค๋ฅธ ์ชฝ ๊ธธ์ด๋ฅผ ์กฐ์ ํ๋ค.
์กฐ์ ํ ํฌ๊ธฐ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ฆฌ์ฌ์ด์งํ๊ณ , ๋ฆฌ์ฌ์ด์งํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
๋ง์ฝ ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ด๋ฏธ ์ต๋ ํฌ๊ธฐ(max)์ ๋ง๋ ๊ฒฝ์ฐ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ต๋ ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ํ์ฌ ๋ฆฌ์ฌ์ด์งํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋น๋กฏํ ์ ๋ณด๋ฅผ ๋ด์ image ํ์ ์ ์ ๋ ฅ์ผ๋ก ๋ฐ๊ณ , ๋ฆฌ์ฌ์ด์งํ ์ต๋ ํฌ๊ธฐ๋ฅผ int ํ์ ์ผ๋ก ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ค.
resize_min
ํจ์ ์ด๋ฆ: resize_min
์ ๋ ฅ:
image im (๋ณํํ ์ด๋ฏธ์ง)
int min (๊ฐ๋ก์ ์ธ๋ก์ ํฌ๊ธฐ ์ค ์์ ๊ฐ์ ์ค์ )
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก ์ค ์์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก, min ๊ฐ์ ๋ง์ถ์ด ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ํจ์.
์ด๋ฏธ์ง ๋น์จ์ ์ ์ง๋จ.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก ์ค ์์ ๊ฐ์ min ๊ฐ์ผ๋ก ๋ง์ถ์ด ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
์ด๋ฏธ์ง ๋น์จ์ ์ ์ง๋๋ฉฐ, ์ด๋ฏธ์ง๊ฐ min ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ min ๊ฐ์ ๋ง๊ฒ ์กฐ์ ํ ํ ๋ฐํํ๋ค.
random_crop_image
ํจ์ ์ด๋ฆ: random_crop_image
์ ๋ ฅ:
image im (์๋ฅด๊ธฐ๋ฅผ ์ํํ ์ ๋ ฅ ์ด๋ฏธ์ง)
int w (์๋ฅผ ์ด๋ฏธ์ง์ ํญ)
int h (์๋ฅผ ์ด๋ฏธ์ง์ ๋์ด)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์์ ์์๋ก ์ ํํ ์์น์์ ์ง์ ํ ํฌ๊ธฐ(w,h)๋ก ์ด๋ฏธ์ง๋ฅผ ์๋ฅธ ํ, ์๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์์ ์์์ ์์น์์ ์ง์ ํ ํฌ๊ธฐ(w,h)๋ก ์ด๋ฏธ์ง๋ฅผ ์๋ฅธ ํ, ์๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค.
์ด๋, ์๋ฅด๋ ์์น๋ ์ ๋ ฅ ์ด๋ฏธ์ง ๋ด์์ ๋๋ค์ผ๋ก ์ ํํ๋ฉฐ, ์๋ฅผ ์ด๋ฏธ์ง์ ํญ๊ณผ ๋์ด๋ ์ธ์๋ก ์ง์ ๋ ๊ฐ์ผ๋ก ์ค์ ๋๋ค.
random_augment_args
ํจ์ ์ด๋ฆ: random_augment_args
์ ๋ ฅ:
im: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๊ตฌ์กฐ์ฒด
angle: ํ์ ๊ฐ๋ (๋ ๋จ์)
aspect: ์ด๋ฏธ์ง ๋น์จ์ ๋๋ค์ผ๋ก ์กฐ์ ํ๊ธฐ ์ํ ๋น์จ
low: ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋๋ค์ผ๋ก ๊ฒฐ์ ํ๊ธฐ ์ํ ์ต์ ๊ฐ
high: ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋๋ค์ผ๋ก ๊ฒฐ์ ํ๊ธฐ ์ํ ์ต๋ ๊ฐ
w: ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ๋๋น
h: ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ๋์ด
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ํ์ , ํฌ๊ธฐ ์กฐ์ , ์๋ฅด๊ธฐ ๋ฑ ๋ค์ํ ํํ๋ก ๋ณํํ์ฌ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
๋๋ค์ผ๋ก ๊ฒฐ์ ๋๋ ํ์ ๊ฐ๋, ์ด๋ฏธ์ง ๋น์จ, ํฌ๊ธฐ, ์์น ๋ฑ์ ์ด์ฉํ์ฌ ๋ค์ํ ๋ณํ์ ์ํํ๋ค.
๋ณํ๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ w์ h๋ก ์ง์ ๋ ๊ฐ์ ๋ง์ถ์ด ์๋ฅด๊ฑฐ๋ ํจ๋ฉํ์ฌ ์์ฑ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ณํํ์ฌ ๋ฐ์ดํฐ ์ฆ๊ฐ(augmentation)์ ์ํํ๋ ํจ์๋ก, ๋ฅ๋ฌ๋ ๋ชจ๋ธ ํ์ต์ ์ฌ์ฉ๋ ์ ์๋ค.
ํจ์๋ augmentation ์ธ์๋ฅผ ๋๋ค์ผ๋ก ๊ฒฐ์ ํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ก ์๋ก์ด ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
random_augment_image
ํจ์ ์ด๋ฆ: random_augment_image
์ ๋ ฅ:
im: Augment๋ฅผ ์ ์ฉํ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ๋ image ๊ตฌ์กฐ์ฒด
angle: Augment๋ฅผ ์ ์ฉํ ๋ ํ์ ์ํฌ ๊ฐ๋ ๋ฒ์
aspect: Augment๋ฅผ ์ ์ฉํ ๋ ์กฐ์ ํ ๊ฐ๋ก์ธ๋ก๋น ๋ฒ์
low, high: Augment๋ฅผ ์ ์ฉํ ๋ ์์์ ํฌ๊ธฐ ๋ฒ์
w, h: Augment๋ฅผ ์ ์ฉํ ๋ ์์์ ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฒ์
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ค์ํ Augment๋ฅผ ์ ์ฉํ์ฌ ๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ ํจ์
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ฌด์์๋ก ๋ค์ํ Augment ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ ํ, ๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
Augment๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์๋ ํ์ , ํฌ๊ธฐ ์กฐ์ , ์๋ฅด๊ธฐ ๋ฑ์ด ์์ต๋๋ค.
์ด ํจ์์์๋ random_augment_args ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Augment์ ํ์ํ ์ธ์๋ค์ ๋ฌด์์๋ก ์ค์ ํ ํ, rotate_crop_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
three_way_max
ํจ์ ์ด๋ฆ: three_way_max
์ ๋ ฅ:
a: float ํ์ ์ ๋ณ์
b: float ํ์ ์ ๋ณ์
c: float ํ์ ์ ๋ณ์
๋์:
์ ๋ ฅ๋ a, b, c ์ธ ๊ฐ์ ๋ณ์ ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํ๋ค.
์ค๋ช :
์ธ ๊ฐ์ ๊ฐ์ ๋น๊ตํ๋๋ฐ, ์ฐ์ a์ b๋ฅผ ๋น๊ตํ ํ ๊ทธ ์ค ํฐ ๊ฐ์ max๋ก ์ค์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ max์ c๋ฅผ ๋น๊ตํ์ฌ ํฐ ๊ฐ์ ๋ฐํํ๋ค.
three_way_min
ํจ์ ์ด๋ฆ: three_way_min
์ ๋ ฅ:
a: ๋น๊ตํ๊ณ ์ ํ๋ ์ค์๊ฐ
b: ๋น๊ตํ๊ณ ์ ํ๋ ์ค์๊ฐ
c: ๋น๊ตํ๊ณ ์ ํ๋ ์ค์๊ฐ
๋์:
์ฃผ์ด์ง ์ธ ๊ฐ์ ์ค์๊ฐ a, b, c ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ์ธ ๊ฐ์ ์ค์๊ฐ a, b, c ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฐํํ๋ ํจ์์ ๋๋ค.
๋จผ์ a์ b๋ฅผ ๋น๊ตํ์ฌ ๋ ์์ ๊ฐ์ ์ ํํ๊ณ , ๊ทธ ์ ํ๋ ๊ฐ๊ณผ c๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
yuv_to_rgb
ํจ์ ์ด๋ฆ: yuv_to_rgb
์ ๋ ฅ:
image ํ์ ์ ์ด๋ฏธ์ง(im) ํฌ์ธํฐ
๋์:
YUV ์์ ๊ณต๊ฐ์ผ๋ก ํํ๋ ์ด๋ฏธ์ง๋ฅผ RGB ์์ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง(im) ํฌ์ธํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ YUV ์์ ๊ณต๊ฐ์ผ๋ก ํํ๋ ์ด๋ฏธ์ง๋ฅผ RGB ์์ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ์ ์ด๋ฏธ์ง(im) ํฌ์ธํฐ์ ์ ์ฅ๋ฉ๋๋ค.
YUV์ RGB ๊ฐ์ ๋ณํ์ ์ผ๋ จ์ ์์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๋ง๋ค YUV ๊ฐ์ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ RGB ๊ฐ์ผ๋ก ๋ณํํ์ฌ ์ด๋ฏธ์ง์ ์ ์ฅํฉ๋๋ค.
rgb_to_yuv
ํจ์ ์ด๋ฆ: rgb_to_yuv
์ ๋ ฅ:
image im (RGB ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง RGB ์ด๋ฏธ์ง๋ฅผ YUV ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ค.
๊ฐ๊ฐ์ ํฝ์ ์ RGB ๊ฐ์ ์ด์ฉํ์ฌ YUV ๊ฐ์ ๊ณ์ฐํ๊ณ , ์๋ก์ด ์ด๋ฏธ์ง์ ํด๋น ๊ฐ์ ์ ์ฅํ๋ค.
์ค๋ช :
YUV ์ ๊ณต๊ฐ์ ๋ฐ๊ธฐ(Y)์ ์์ฐจ(U, V)๋ก ๊ตฌ์ฑ๋๋ค.
Y ๊ฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง์ RGB ๊ฐ์ผ๋ก๋ถํฐ ๊ณ์ฐ๋๋ค.
U์ V ๊ฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง์ RGB ๊ฐ์ ์ด์ฉํ์ฌ ๊ฐ๊ฐ์ ์์ ํตํด ๊ณ์ฐ๋๋ค.
๊ณ์ฐ๋ Y, U, V ๊ฐ์ ๊ฐ๊ฐ์ ํฝ์ ์ ๋ํด set_pixel ํจ์๋ฅผ ํตํด ์ ์ฅ๋๋ค.
rgb_to_hsv
ํจ์ ์ด๋ฆ: rgb_to_hsv
์ ๋ ฅ:
image im (RGB ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง RGB ์ด๋ฏธ์ง๋ฅผ HSV ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง RGB ์ด๋ฏธ์ง๋ฅผ HSV ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ ํจ์์ด๋ค.
๊ฐ ํฝ์ ์ RGB ๊ฐ์ ์ฝ์ด๋ค์ธ ํ, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ด์ฉํ์ฌ V ๊ฐ์ ๊ณ์ฐํ๊ณ , S ๊ฐ์ ๊ณ์ฐํ๋ค.
H ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด R, G, B ์ค ์ต๋๊ฐ์ ์ฐพ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ์ฑ๋ ๊ฐ๋ค์ ์ด์ฉํ์ฌ H ๊ฐ์ ๊ณ์ฐํ๋ค.
๊ณ์ฐ๋ H, S, V ๊ฐ์ ์ด์ฉํ์ฌ ํด๋น ํฝ์ ์ ์๋ก์ด ์์ ๊ฐ์ ์ค์ ํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ์์ ํ๋ค.
hsv_to_rgb
ํจ์ ์ด๋ฆ: hsv_to_rgb
์ ๋ ฅ:
image ํ์ ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ (์ธ ๊ฐ์ ์ฑ๋์ ๊ฐ์ ธ์ผ ํจ)
๋์:
HSV(Hue, Saturation, Value) ์์ ๋ชจ๋ธ๋ก ํํ๋ ์ด๋ฏธ์ง๋ฅผ RGB(Red, Green, Blue) ์์ ๋ชจ๋ธ๋ก ๋ณํํจ
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ HSV ์์ ๋ชจ๋ธ๋ก ํํ๋๋ฉฐ, ๊ฐ ํฝ์ ์ Hue, Saturation, Value์ ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ด ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ํํ๋ฉด์ ๊ฐ ํฝ์ ์ HSV ๊ฐ์ ์ด์ฉํ์ฌ RGB ๊ฐ์ ๊ณ์ฐํ๊ณ , ๊ณ์ฐ๋ RGB ๊ฐ์ ์ด์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ RGB ์์ ๋ชจ๋ธ๋ก ๋ณํํฉ๋๋ค.
๊ณ์ฐ ๋ฐฉ๋ฒ์ HSV ์์ ๋ชจ๋ธ๊ณผ RGB ์์ ๋ชจ๋ธ ๊ฐ์ ๋ณํ์์ ์ด์ฉํฉ๋๋ค.
grayscale_image_3c
ํจ์ ์ด๋ฆ: grayscale_image_3c
์ ๋ ฅ:
image im (๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํํ ์ ๋ ฅ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ 3์ฑ๋ ๊ฐ์ ๋ชจ๋ ๊ฐ์ ๊ฐ์ผ๋ก ๋ง๋ฆ
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ์ฑ๋ ์๊ฐ 3์ด ์๋ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ , ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๊ฐ์ ํฝ์ ๊ฐ์ RGB ์ฑ๋์ ๊ฐ์ค์น ๊ฐ์ ๊ณฑํ์ฌ ๋ํ ํ, ๊ฒฐ๊ณผ ๊ฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง์ 3์ฑ๋ ๋ชจ๋์ ๋์ ํ์ฌ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ก ๋ณํํฉ๋๋ค.
grayscale_image
ํจ์ ์ด๋ฆ: grayscale_image
์ ๋ ฅ:
image im (3์ฑ๋ ์ปฌ๋ฌ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ 3์ฑ๋ ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ก ๋ณํํ๋ค.
๋ณํ ๋ฐฉ๋ฒ์ RGB ๊ฐ๊ฐ์ ์ฑ๋์ ๋ํด 0.299, 0.587, 0.114์ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ์ฌ ํฉํ ๊ฐ์ ํ๋์ ํฝ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ์ฑ๋ ์๊ฐ 3์ด ์๋ ๊ฒฝ์ฐ ํจ์๊ฐ ์ข ๋ฃ๋๋ค.
๋ณํ๋ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ 1์ฑ๋์ ๊ฐ์ง๋ฉฐ, make_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋๋ค.
์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ๊ธฐ ์ํด์๋ get_pixel, set_pixel ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
๋ณํ๋ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๊ฐ ๋ฐํ๋๋ค.
threshold_image
ํจ์ ์ด๋ฆ: threshold_image
์ ๋ ฅ:
image im (์ด๋ฏธ์ง)
float thresh (์๊ณ๊ฐ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์์ ์๊ณ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ 1๋ก, ์๊ฑฐ๋ ๊ฐ์ ๊ฐ์ 0์ผ๋ก ๋ณํํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง(im)์ ๋๋น, ๋์ด, ์ฑ๋ ์์ ๊ฐ์ ํฌ๊ธฐ์ ์๋ก์ด ์ด๋ฏธ์ง(t)๋ฅผ ๋ง๋ค๊ณ , ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ๊ฐ์ ๋ํด ์๊ณ๊ฐ(thresh)๊ณผ ๋น๊ตํฉ๋๋ค.
๋ง์ฝ ํฝ์ ๊ฐ์ด ์๊ณ๊ฐ๋ณด๋ค ํฌ๋ฉด 1๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด 0์ผ๋ก ์ค์ ํ์ฌ t์ ์ ์ฅํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ณํ๋ ์ด๋ฏธ์ง(t)๋ฅผ ๋ฐํํฉ๋๋ค.
blend_image
ํจ์ ์ด๋ฆ: blend_image
์ ๋ ฅ:
(image) fore: ์ ๊ฒฝ ์ด๋ฏธ์ง
(image) back: ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง
(float) alpha - ์ ๊ฒฝ ์ด๋ฏธ์ง์ ๊ฐ์ค์น ๊ฐ
๋์:
fore์ back ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ์ฑ๋ ์๊ฐ ๊ฐ์์ง ํ์ธํ ํ, fore์ back ์ด๋ฏธ์ง๋ฅผ alpha ๊ฐ์ ๋ฐ๋ผ ์์ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ค.
์ค๋ช :
fore์ back ์ด๋ฏธ์ง๋ ๊ฐ์ ํฌ๊ธฐ์ ์ฑ๋ ์๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
fore ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ alpha ๊ฐ์ ๊ณฑํ๊ณ , back ์ด๋ฏธ์ง์ ํด๋น ํฝ์ ๊ฐ์ (1 - alpha)๋ฅผ ๊ณฑํ ํ, ๋ํด์ ์๋ก์ด ์ด๋ฏธ์ง์ ํด๋น ํฝ์ ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
๋ฐํ๋๋ blend ์ด๋ฏธ์ง๋ fore์ back ์ด๋ฏธ์ง๋ฅผ alpha ๊ฐ์ ๋ฐ๋ผ ์์ ๊ฒฐ๊ณผ์ด๋ค.
scale_image_channel
ํจ์ ์ด๋ฆ: scale_image_channel
์ ๋ ฅ:
image ํ์ ์ ์ด๋ฏธ์ง m
์ ์ ํ์ ์ ์ฑ๋ ๋ฒํธ c
์ค์ ํ์ ์ ๋ฐฐ์จ ๊ฐ v
๋์:
์ด๋ฏธ์ง์ ํน์ ์ฑ๋ ๊ฐ์ ์ฃผ์ด์ง ๋ฐฐ์จ ๊ฐ์ผ๋ก ์ค์ผ์ผ๋ง(scale)ํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง m์ ํน์ ์ฑ๋ c์ ๊ฐ ํฝ์ ๊ฐ์ v ๋ฐฐ์จ ๊ฐ์ผ๋ก ๊ณฑํ์ฌ ์ค์ผ์ผ๋งํฉ๋๋ค.
์ด๋ฏธ์ง์ ๋๋น์ ๋์ด์ ๋ํด ๊ฐ๊ฐ ๋ฐ๋ณต๋ฌธ์ ์ํํ์ฌ ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ์ ๋ํด ์ฑ๋ c์ ๊ฐ์ ์ค์ผ์ผ๋งํฉ๋๋ค.
translate_image_channel
ํจ์ ์ด๋ฆ: translate_image_channel
์ ๋ ฅ:
image im (์ด๋ฏธ์ง)
int c (์ฑ๋)
float v (์ด๋ํ ๊ฐ)
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ์ง์ ๋ ์ฑ๋์ v๋งํผ ์ด๋ํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง im์ c๋ฒ์งธ ์ฑ๋์ ๋ชจ๋ ํฝ์ ๊ฐ์ v๋งํผ ์ด๋ํ์ฌ ๋ณ๊ฒฝํฉ๋๋ค.
๊ฐ ํฝ์ ์ ๊ฐ์ get_pixel()๋ก ๊ฐ์ ธ์์ v๋งํผ ๋ํ๊ณ , ๋ณ๊ฒฝ๋ ๊ฐ์ set_pixel()๋ก ์ค์ ํฉ๋๋ค.
binarize_image
ํจ์ ์ด๋ฆ: binarize_image
์ ๋ ฅ:
image im (์ด์งํํ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ ํ์ธํ์ฌ 0.5๋ณด๋ค ํฌ๋ฉด 1๋ก, ์์ผ๋ฉด 0์ผ๋ก ๋ฐ๊พธ์ด ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ํ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ด์งํํ์ฌ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์ด์งํ๋, ์ด๋ฏธ์ง๋ฅผ ํ๋ฐฑ์ผ๋ก ๋ณํํ๊ณ , ๊ฒฝ๊ณ๊ฐ(threshold) ์ด์์ ํฝ์ ์ 1๋ก, ์ดํ์ ํฝ์ ์ 0์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฐํ๋๋ ์ด๋ฏธ์ง๋ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ ํฝ์ ์ 0 ๋๋ 1์ ๊ฐ์ ๊ฐ์ง๋๋ค.
saturate_image
ํจ์ ์ด๋ฆ: saturate_image
์ ๋ ฅ:
image im (์ด๋ฏธ์ง)
float sat (ํฌํ๋ ์กฐ์ ๊ฐ)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง์ ์ ๊ณต๊ฐ์ RGB์์ HSV๋ก ๋ณํํ ํ, HSV์์ Saturation(ํฌํ๋) ์ฑ๋ ๊ฐ์ ์ฃผ์ด์ง ๊ฐ(sat)๋งํผ ์กฐ์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ HSV์์ RGB๋ก ๋ณํํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ์์์ ํฌํ๋๋ฅผ ์กฐ์ ํ์ฌ ๋ณํ์ํค๋ ํจ์์ ๋๋ค.
ํฌํ๋๋ ์์ ์งํ๊ณ ์ฐํจ์ ์ ๋๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด ๊ฐ์ ์กฐ์ ํ์ฌ ์ด๋ฏธ์ง์ ํ๋ถํ ์๊ฐ์ ๋ถ์ฌํ๊ฑฐ๋ ํ๋ฐฑ ์ด๋ฏธ์ง๋ก ๋ณํํ๋ ๋ฑ์ ๋ค์ํ ์์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
hue_image
ํจ์ ์ด๋ฆ: hue_image
์ ๋ ฅ:
image im (์ด๋ฏธ์ง)
float hue (์์กฐ ๊ฐ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ์์กฐ๋ฅผ ์ง์ ๋ ๊ฐ๋งํผ ์กฐ์ ํฉ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ RGB์์ HSV ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ ๋ค์, ํฝ์ ์ ์์กฐ ๊ฐ์ ์กฐ์ ํฉ๋๋ค.
์ดํ ๋ค์ RGB ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ๊ณ , ์ต๋/์ต์๊ฐ์ ๋ฒ์ด๋๋ ํฝ์ ๊ฐ์ ์ ํํฉ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง์ ์์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์์ ๋๋ค.
์์กฐ ๊ฐ์ -1๊ณผ 1 ์ฌ์ด์ ๊ฐ์ด๋ฉฐ, ์์ ๊ฐ์ ์์กฐ๋ฅผ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฅผ ๋ค์ด, hue=-0.1์ด๋ฉด ์์กฐ๊ฐ 0.1 ๋งํผ ๊ฐ์ํ๊ณ , hue=0.2์ด๋ฉด ์์กฐ๊ฐ 0.2 ๋งํผ ์ฆ๊ฐํฉ๋๋ค.
exposure_image
ํจ์ ์ด๋ฆ: exposure_image
์ ๋ ฅ:
image im (์ด๋ฏธ์ง ๋ฐ์ดํฐ)
float sat (๋ฐ๊ธฐ ์กฐ์ ๋น์จ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ HSV ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ ํ, ๋ฐ๊ธฐ ์ฑ๋์ sat ๋น์จ์ ๊ณฑํ ๊ฐ์ ์ค์ ํ๊ณ ๋ค์ RGB ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค.
๋ณํ ํ ํฝ์ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง์ ๋ฐ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค.
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฝ์ ๊ฐ๋ค์ ๋ฐ๊ธฐ ์กฐ์ ๋น์จ์ธ sat๋ก ์กฐ์ ํฉ๋๋ค.
distort_image
ํจ์ ์ด๋ฆ: distort_image
์ ๋ ฅ:
im: ์๊ณก์ ์ ์ฉํ ์ด๋ฏธ์ง (image ํ์ )
hue: ์์กฐ ์๊ณก ์ ๋ (float ํ์ )
sat: ์ฑ๋ ์๊ณก ์ ๋ (float ํ์ )
val: ๋ช ๋ ์๊ณก ์ ๋ (float ํ์ )
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ์์กฐ, ์ฑ๋, ๋ช ๋ ์๊ณก์ ๋๋คํ๊ฒ ์ ์ฉํฉ๋๋ค.
์ฐ์ RGB ์ ๊ณต๊ฐ์์ HSV ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ ํ, ์ฑ๋์ ๋ช ๋๋ฅผ ๊ฐ๊ฐ ์ฃผ์ด์ง ๊ฐ๋งํผ ์กฐ์ ํฉ๋๋ค.
๊ทธ ํ, ๊ฐ ํฝ์ ์ ์์กฐ๋ฅผ ์ฃผ์ด์ง ๊ฐ๋งํผ ๋ณํ์ํค๊ณ , 0~1 ์ฌ์ด์ ๊ฐ์ผ๋ก ์ ํํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก HSV ์ ๊ณต๊ฐ์์ ๋ค์ RGB ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ ํ, ํฝ์ ๊ฐ์ด 0~1 ์ฌ์ด์ ์์นํ๋๋ก ๊ฐ์ ์ ํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ์๊ณก์ ์ ์ฉํ๋ ํจ์์ ๋๋ค.
์์, ์ฑ๋, ๋ช ๋ ๊ฐ๊ฐ์ ๊ฐ์ ๋๋คํ๊ฒ ์กฐ์ ํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ณํ๋ฅผ ์ค๋๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ ๋ค์ RGB ์ ๊ณต๊ฐ์ผ๋ก ๋ณํ๋๊ณ , ํฝ์ ๊ฐ์ด 0~1 ์ฌ์ด์ ์์นํ๋๋ก ์ ํํฉ๋๋ค.
random_distort_image
ํจ์ ์ด๋ฆ: random_distort_image
์ ๋ ฅ:
im: ์๊ณก(distortion)์ ์ ์ฉํ ์ด๋ฏธ์ง๋ฅผ ๋ํ๋ด๋ image ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
hue: ์ด๋ฏธ์ง์ ์ ์ฉํ ์์กฐ(hue) ์๊ณก์ ์ต๋๊ฐ(float)
saturation: ์ด๋ฏธ์ง์ ์ ์ฉํ ์ฑ๋(saturation) ์๊ณก์ ์ต๋๊ฐ(float)
exposure: ์ด๋ฏธ์ง์ ์ ์ฉํ ๋ ธ์ถ(exposure) ์๊ณก์ ์ต๋๊ฐ(float)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ hue, saturation, exposure ์๊ณก์ ๋ฌด์์๋ก ์ ์ฉํ์ฌ ์๊ณก๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์ค๋ช :
dhue: ๋ฌด์์๋ก ์์ฑ๋ hue ์๊ณก์ ์ ๋(float)
dsat: ๋ฌด์์๋ก ์์ฑ๋ saturation ์๊ณก์ ์ ๋(float)
dexp: ๋ฌด์์๋ก ์์ฑ๋ exposure ์๊ณก์ ์ ๋(float)
distort_image(): hue, saturation, exposure ์๊ณก์ ์ ๋ ฅ ์ด๋ฏธ์ง์ ์ ์ฉํ๋ ํจ์
saturate_exposure_image
ํจ์ ์ด๋ฆ: saturate_exposure_image
์ ๋ ฅ:
im: ์กฐ์ ํ ์ด๋ฏธ์ง๋ฅผ ๋ํ๋ด๋ image ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
sat: ์ ์ฉํ ์ฑ๋(scale) ๊ฐ
exposure: ์ ์ฉํ ๋ ธ์ถ(exposure) ๊ฐ
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง์ RGB ๊ฐ์ HSV ๊ฐ์ผ๋ก ๋ณํ
์ด๋ฏธ์ง์ ์ฑ๋ ์ฑ๋์ ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์กฐ์
์ด๋ฏธ์ง์ ๋ ธ์ถ ์ฑ๋์ ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์กฐ์
์ด๋ฏธ์ง์ HSV ๊ฐ์ RGB ๊ฐ์ผ๋ก ๋ค์ ๋ณํ
๊ฐ์ด 0๊ณผ 1 ์ฌ์ด๋ฅผ ๋ฒ์ด๋๋ ํฝ์ ๊ฐ์ 0 ๋๋ 1๋ก ์๋ผ๋ด์ด ์ด๋ฏธ์ง๋ฅผ ์ ํ
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง์ ์ฑ๋์ ๋ ธ์ถ ๊ฐ์ ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์กฐ์ ํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง์ RGB ๊ฐ์ผ๋ก๋ถํฐ HSV ๊ฐ์ผ๋ก ๋ณํํ์ฌ ์ฑ๋์ ๋ ธ์ถ ๊ฐ์ ์กฐ์ ํ ๋ค, ๋ค์ RGB ๊ฐ์ผ๋ก ๋ณํํ๋ค.
์ด ๋, ํฝ์ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ ์ด๋ฅผ 0 ๋๋ 1๋ก ์๋ผ๋ด์ด ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋ค.
resize_image
ํจ์ ์ด๋ฆ: resize_image
์ ๋ ฅ:
image im (์๋ณธ ์ด๋ฏธ์ง)
int w (๋ณ๊ฒฝํ ๋๋น)
int h (๋ณ๊ฒฝํ ๋์ด)
๋์:
์ ๋ ฅ๋ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฃผ์ด์ง w์ h ํฌ๊ธฐ๋ก ๋ณ๊ฒฝํ๊ณ , ์๋ก์ด ํฌ๊ธฐ์ ๋ง๊ฒ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ ๋ณด๊ฐํ์ฌ ์กฐ์ ํฉ๋๋ค.
์ค๋ช :
make_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ resized ๋ณ์์ ์ ์ฅํฉ๋๋ค.
make_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋๋น๊ฐ w์ด๊ณ ์๋ ์ด๋ฏธ์ง์ ๋์ด์ ์ฑ๋ ์๋ฅผ ๊ฐ์ง ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ part ๋ณ์์ ์ ์ฅํฉ๋๋ค.
์ฃผ์ด์ง ๋๋น(w)์ ๋์ด(h)๋ก๋ถํฐ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๋ณด๊ฐ(interpolation)์ ์ํํฉ๋๋ค. w_scale๊ณผ h_scale ๋ณ์๋ ์๋ณธ ์ด๋ฏธ์ง์์ ๋ณํ๋ ์ด๋ฏธ์ง๋ก์ ์ค์ผ์ผ๋ง ๊ฐ์ ๋ํ๋ ๋๋ค.
for ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ ๋ณด๊ฐํ์ฌ part ์ด๋ฏธ์ง์ ์ ์ฅํฉ๋๋ค. ๋ณด๊ฐ(interpolation) ๋ฐฉ๋ฒ์ผ๋ก๋ ์ด์ ํฝ์ ๊ณผ ๋ค์ ํฝ์ ์ ๊ฐ์คํ๊ท ์ ์ฌ์ฉํฉ๋๋ค.
for ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ part ์ด๋ฏธ์ง์์ ๋ณํ๋ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ์ ๊ณ์ฐํ๊ณ , resized ์ด๋ฏธ์ง์ ์ ์ฅํฉ๋๋ค. ์ด ๋, ํ์ฌ ์์น์ ๋ค์ ์์น ์ฌ์ด์ ๋ณด๊ฐ(interpolation)์ ์ํํฉ๋๋ค.
test_resize
ํจ์ ์ด๋ฆ: test_resize
์ ๋ ฅ:
filename: char ํฌ์ธํฐ ํ์ . ๋ฆฌ์ฌ์ด์ฆํ ์ด๋ฏธ์ง ํ์ผ๋ช ์ ์ง์ ํ๋ ๋ฌธ์์ด ํฌ์ธํฐ.
๋์:
์ ๋ ฅ๋ filename์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฌ์จ๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ์ L2 Norm์ ๊ณ์ฐํ์ฌ ์ถ๋ ฅํ๋ค.
๋ถ๋ฌ์จ ์ด๋ฏธ์ง๋ฅผ grayscale๋ก ๋ณํํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
๋ถ๋ฌ์จ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ฌ ์๊ณก(distortion)๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
์๊ณก๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ์ ํ์ ์๊ณก๊ฐ์ผ๋ก ๋ณํํ๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ค๊ณผ ์๋ณธ ์ด๋ฏธ์ง, grayscale๋ก ๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐจ๋ก๋๋ก ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
OPENCV ๋งคํฌ๋ก๊ฐ ์ ์๋์ด ์์ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ๋ณํํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํ๋ค. ๋ณํ์ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ๋ฌด์์๋ก ๊ฒฐ์ ๋๋ฉฐ, ํ๋ฉด ์ถ๋ ฅ ํ์๋ ํด๋น ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํด์ ํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ filename์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฌ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ณํํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
๋จผ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ L2 Norm์ ๊ณ์ฐํ์ฌ ์ถ๋ ฅํ๊ณ , grayscale๋ก ๋ณํํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ์๋ณธ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๊ณก๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ ๊ฐ๊ฐ ๋ค๋ฅธ ์ ํ์ ์๊ณก๊ฐ์ผ๋ก ๋ณํํ ๋ค์, ์ด๋ฅผ ์ฐจ๋ก๋๋ก ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
OPENCV ๋งคํฌ๋ก๊ฐ ์ ์๋์ด ์์ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ๋ณํํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํ๋ฉฐ, ๋ณํ์ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ๋ฌด์์๋ก ๊ฒฐ์ ๋๋ค.
์ถ๋ ฅ ํ์๋ ํด๋น ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ค.
load_image_stb
ํจ์ ์ด๋ฆ: load_image_stb
์ ๋ ฅ:
filename(char*): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
channels(int): ์ฑ๋ ์
๋์:
STB ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅํ ์ด๋ฏธ์ง ํ์ผ์ ์ฝ์ด๋ค์ด๊ณ , ํฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ ํ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด(image)๋ก ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.
๋ณํ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ [0, 1] ๋ฒ์๋ก ์ ๊ทํ๋์ด ์์ต๋๋ค.
์ค๋ช :
์ ๋ ฅํ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(filename)์ ์ฑ๋ ์(channels)๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค.
์ ๋ ฅ๋ ์ด๋ฏธ์ง ํ์ผ์ STB ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ฝ์ด๋ค์ ๋๋ค.
์ฝ์ด๋ค์ธ ์ด๋ฏธ์ง์ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ณ , ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด(image)๋ก ๋ณํํฉ๋๋ค.
๋ณํ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ [0, 1] ๋ฒ์๋ก ์ ๊ทํ๋์ด ์์ต๋๋ค.
load_image
ํจ์ ์ด๋ฆ: load_image
์ ๋ ฅ:
filename: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
w: ๋ก๋ํ ์ด๋ฏธ์ง์ ๋๋น (0์ด๋ฉด ์๋ณธ ์ด๋ฏธ์ง์ ๋๋น ์ฌ์ฉ)
h: ๋ก๋ํ ์ด๋ฏธ์ง์ ๋์ด (0์ด๋ฉด ์๋ณธ ์ด๋ฏธ์ง์ ๋์ด ์ฌ์ฉ)
c: ๋ก๋ํ ์ด๋ฏธ์ง์ ์ฑ๋ ์
๋์:
OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, load_image_cv ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด load_image_stb ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ง์ฝ w์ h๊ฐ 0์ด ์๋๊ณ ๋ก๋ํ ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ๋ค๋ฅด๋ค๋ฉด, resize_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํฌ๊ธฐ๋ฅผ w ร h๋ก ์กฐ์ ํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ก๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ํ์ฌ image ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค.
๋ก๋ํ ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก์ ํฌ๊ธฐ, ์ฑ๋ ์๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค.
OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, OpenCV ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด STB ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ก๋ํ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ w ร h์ ๋ค๋ฅด๋ค๋ฉด resize_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ก๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
load_image_color
ํจ์ ์ด๋ฆ: load_image_color
์ ๋ ฅ:
filename: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
w: ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
h: ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
๋์:
์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ํ์ฌ, ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ก ๋ณํํ ํ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ๊ฐ๋ก ํฌ๊ธฐ์ ์ธ๋ก ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฆฌ์ฌ์ด์งํ ํ, ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค.
๋ฐํ๋๋ ์ด๋ฏธ์ง๋ 'image' ํ์ ์ด๋ฉฐ, R, G, B ์ธ ๊ฐ์ ์ฑ๋์ ๊ฐ๋ ์ปฌ๋ฌ ์ด๋ฏธ์ง์ด๋ค.
์ด๋, ์ด๋ฏธ์ง ํ์ผ์ด ๋ก๋๋์ง ์๊ฑฐ๋, ์ง์ ๋ ๊ฒฝ๋ก์ ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ํ๋ก๊ทธ๋จ์ด ์ค๋ฅ๋ฅผ ๋ฐํํ ์ ์๋ค.
get_image_layer
ํจ์ ์ด๋ฆ: get_image_layer
์ ๋ ฅ:
image m (์๋ณธ ์ด๋ฏธ์ง)
int l (๊ฐ์ ธ์ฌ ๋ ์ด์ด ์ธ๋ฑ์ค)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์๋ณธ ์ด๋ฏธ์ง์์ ๋ ์ด์ด ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ ์ด์ด๋ฅผ ๊ฐ์ ธ์์ 1์ฑ๋ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง m์ ์ฌ๋ฌ ์ฑ๋์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด ํจ์๋ ์ด ์ค์์ l๋ฒ์งธ ๋ ์ด์ด๋ฅผ ๊ฐ์ ธ์์ 1์ฑ๋ ์ด๋ฏธ์ง๋ก ๋ง๋ญ๋๋ค.
์ด๋ฅผ ์ํด์๋ ์ด๋ฏธ์ง์ ๋์ด์ ๋๋น๋งํผ ๋ฐ๋ณตํ๋ฉด์ ๋ ์ด์ด ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ ธ์์ ์๋ก ๋ง๋ 1์ฑ๋ ์ด๋ฏธ์ง out์ data ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ต์ข ์ ์ผ๋ก 1์ฑ๋ ์ด๋ฏธ์ง out์ ๋ฐํํฉ๋๋ค.
print_image
ํจ์ ์ด๋ฆ: print_image
์ ๋ ฅ:
image m (์ถ๋ ฅํ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
์ถ๋ ฅ๋๋ ๊ฐ์ ์ธ ๊ฐ์ for ๋ฃจํ๋ฅผ ํตํด ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๋ฐ ์ฑ๋์ ๋ํ ๋ฐ์ดํฐ ๊ฐ์ด๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๋ฐ ์ฑ๋์ ๋ํ ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ ํตํด ์ถ๋ ฅํ๋ฉฐ, ๊ฐ ๊ฐ์ ์์์ ์ดํ ๋์งธ ์๋ฆฌ๊น์ง ์ถ๋ ฅ๋๋ค.
์ถ๋ ฅ๋๋ ๊ฐ์ ์ด ์ธ ๊ฐ์ for ๋ฃจํ๋ฅผ ํตํด ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๋ฐ ์ฑ๋์ ๋ํ ๋ฐ์ดํฐ ๊ฐ์ด๋ฉฐ, ๊ฐ๋ก์ ์ธ๋ก ๊ฐ์ด ๊ฐ๊ฐ 30๋ณด๋ค ํฐ ๊ฒฝ์ฐ ํด๋น ์ค์์ ์ถ๋ ฅ์ด ์ค๋จ๋๋ค.
collapse_images_vert
ํจ์ ์ด๋ฆ: collapse_images_vert
์ ๋ ฅ:
image *ims (์ด๋ฏธ์ง ๋ฐฐ์ด ํฌ์ธํฐ)
int n (์ด๋ฏธ์ง ๋ฐฐ์ด์ ์์ ๊ฐ์)
๋์:
ims ๋ฐฐ์ด์ ์๋ ์ด๋ฏธ์ง๋ค์ ์์ง์ผ๋ก ํฉ์น ํ๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ๋ฐํํจ. ์์ง์ผ๋ก ํฉ์น ์ด๋ฏธ์ง๋ ims ๋ฐฐ์ด ์์๋ค์ ๋์ด๋ฅผ ๋ชจ๋ ๋ํ ๊ฐ์ ๊ฐ ์ด๋ฏธ์ง ์ฌ์ด์ border ๊ฐ์ ๋ํ ๊ฒ์ด ๋์ด์ด๊ณ , ims ๋ฐฐ์ด ์์๋ค์ ํญ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ c ๊ฐ(3 ๋๋ 1)์ ๋ฐ๋ผ ํญ์ ๊ฒฐ์ ํจ.
์ค๋ช :
color์ border๋ ์ด๋ฏธ์ง ์์ฑ์ ํ์ํ ๋ณ์๋ก ๊ฐ๊ฐ 1๊ณผ 1๋ก ์ด๊ธฐํ๋จ.
w, h, c๋ ๋ฐํ๋ ์ด๋ฏธ์ง์ ํญ, ๋์ด, ์ฑ๋ ๊ฐ์ผ๋ก ims[0]์ ๊ฐ๋ค๋ก ์ด๊ธฐํ๋จ.
ims[0]์ ์ฑ๋ ๊ฐ์ด 3์ด ์๋๊ฑฐ๋ color๊ฐ 0์ผ ๊ฒฝ์ฐ w๊ฐ์ ims[0]์ ํญ๊ณผ c ๊ฐ์ ์ด์ฉํ์ฌ ๊ฒฐ์ ๋จ.
make_image ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ฐํ๋ ์ด๋ฏธ์ง filters๋ฅผ ์์ฑํจ.
ims ๋ฐฐ์ด ์์๋ค์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฉด์, ๊ฐ ์์์ ์ด๋ฏธ์ง๋ฅผ copy_image ํจ์๋ฅผ ์ด์ฉํ์ฌ copy์ ๋ณต์ฌํจ.
์ด๋ฏธ์ง ์ฑ๋ ๊ฐ์ด 3์ด๊ณ color๊ฐ 1์ผ ๊ฒฝ์ฐ, ims ๋ฐฐ์ด ์์ ์ด๋ฏธ์ง๋ฅผ embed_image ํจ์๋ฅผ ์ด์ฉํ์ฌ filters ์ด๋ฏธ์ง์ ์ถ๊ฐํจ.
์ด๋ฏธ์ง ์ฑ๋ ๊ฐ์ด 3์ด ์๋๊ฑฐ๋ color๊ฐ 0์ผ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง ์ฑ๋ ์ ๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์, get_image_layer ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง์ ์ฑ๋์ ๊ฐ์ ธ์ layer์ ์ ์ฅํ๊ณ , embed_image ํจ์๋ฅผ ์ด์ฉํ์ฌ filters ์ด๋ฏธ์ง์ ์ถ๊ฐํจ.
๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด, filters ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๊ณ , ์ด๋ copy ๋ณ์์ ๊ฐ layer๋ค์ free_image ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋จ.
collapse_images_horz
ํจ์ ์ด๋ฆ: collapse_images_horz
์ ๋ ฅ:
image *ims (์ด๋ฏธ์ง ๋ฐฐ์ด ํฌ์ธํฐ)
int n (์ด๋ฏธ์ง ๊ฐ์)
๋์:
์ด๋ฏธ์ง ๋ฐฐ์ด์ ์ํ์ผ๋ก ํฉ์ณ์ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค.
์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์์ ์ด๋ฏธ์ง์ ๋์ด๋ฅผ ๊ตฌํ ํ, ํด๋น ๋์ด์ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค.
๊ทธ ๋ค์, ์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์์ ์ด๋ฏธ์ง๋ฅผ ํ๋์ฉ ๊บผ๋ด์ด ๋ณต์ฌํ๊ณ , ๋ง๋ ์๋ก์ด ์ด๋ฏธ์ง์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
์ด๋ฏธ์ง๋ค์ ๊ฐ๊ฐ border ํฝ์ ๋งํผ์ ๊ณต๊ฐ์ ๋์ด์ ๋ถ์ฌ๋ฃ์ผ๋ฉฐ, ์๋ก์ด ์ด๋ฏธ์ง๊ฐ color ์ด๋ฏธ์ง์ผ ๊ฒฝ์ฐ ๊ฐ ์ด๋ฏธ์ง๋ฅผ RGB ์ฑ๋๋ณ๋ก ๋ถ์ฌ๋ฃ์ต๋๋ค.
์ค๋ช :
size: ์ด๋ฏธ์ง ๋์ด
color: ์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ ์ด๋ฏธ์ง๊ฐ ์ปฌ๋ฌ ์ด๋ฏธ์ง์ธ์ง ์ฌ๋ถ
border: ์ด๋ฏธ์ง ์ฌ์ด์ ๊ฐ๊ฒฉ
h, w, c: ์๋ก ๋ง๋ค ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋ ์
filters: ์ํ์ผ๋ก ํฉ์ณ์ง ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด
copy: ์ ๋ ฅ๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์์ ๊บผ๋ธ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ ์ด๋ฏธ์ง
layer: ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ RGB ์ฑ๋ ์ค ํ๋์ธ ์ด๋ฏธ์ง
show_image_normalized
ํจ์ ์ด๋ฆ: show_image_normalized
์ ๋ ฅ:
image im: ๋ณด์ฌ์ค ์ด๋ฏธ์ง
const char *name: ์ฐฝ์ ์ด๋ฆ
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ์ฌ ์ ๊ทํ(normalize)ํฉ๋๋ค.
์ ๊ทํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐฝ์ ๋ณด์ฌ์ค๋๋ค.
๋ณต์ฌํ ์ด๋ฏธ์ง์ ์ ๊ทํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ ํด์ ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ์ฌ ์ ๊ทํ(normalize)ํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฐฝ์ ๋ณด์ฌ์ฃผ๋ ํจ์์ ๋๋ค.
์ ๊ทํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ด์ ๋, ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ด 0์์ 1์ฌ์ด์ ๊ฐ์ผ๋ก ์ค์ผ์ผ๋ง ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฅผ ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๋ฉด ์ด๋์ด ์ด๋ฏธ์ง๋ ๊ฑฐ์ ๋ณด์ด์ง ์๊ณ ๋ฐ์ ์ด๋ฏธ์ง๋ง ๋ณด์ผ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ ๊ทํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค์ผ๋ก์จ ๋ ์์ธํ๊ณ ๊ท ์ผํ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
์ด ํจ์๋ ๋ณดํต ๋๋ฒ๊น ์ด๋ ์๊ฐํ ๋ฑ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
show_images
ํจ์ ์ด๋ฆ: show_images
์ ๋ ฅ:
image *ims: ์ด๋ฏธ์ง ๋ฐฐ์ด์ ํฌ์ธํฐ
int n: ์ด๋ฏธ์ง ๋ฐฐ์ด์ ๊ธธ์ด
char *window: ์ด๋ฏธ์ง ์ฐฝ์ ์ด๋ฆ
๋์:
์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์์ง ๋ฐฉํฅ์ผ๋ก ํฉ์น๊ณ , ์ ๊ทํ(normalize)ํฉ๋๋ค.
์ ๊ทํ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ผ๋ก ์ ์ฅํ๊ณ , ์ด๋ฏธ์ง ์ฐฝ์ ๋์๋๋ค.
์ด๋ฏธ์ง ํฉ์น๊ธฐ์ ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
์ค๋ช :
์ด๋ฏธ์ง ๋ฐฐ์ด์ ์์ง ๋ฐฉํฅ์ผ๋ก ํฉ์น ๋ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ง๋ญ๋๋ค.
์ด ์ด๋ฏธ์ง๋ ์ ๊ทํ(normalization)๋ฉ๋๋ค.
์ดํ, ์ ๊ทํ๋ ์ด๋ฏธ์ง๋ ํ์ผ๋ก ์ ์ฅ๋๋ฉฐ, ์ด๋ฏธ์ง ์ฐฝ์ ๋์์ง๋๋ค.
์ด๋ฏธ์ง ์ฐฝ์ ์ด๋ฆ์ ์ธ์๋ก ์ ๋ฌ๋ ๋ฌธ์์ด์ ์ฌ์ฉํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์ด๋ฏธ์ง ํฉ์น๊ธฐ์ ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋ฉ๋๋ค.
free_image
ํจ์ ์ด๋ฆ: free_image
์ ๋ ฅ:
image ํ์ ์ ๋ณ์ m
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ m์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํจ
์ค๋ช :
YOLO์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด image์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ํจ์์ ๋๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ m.data๊ฐ NULL์ด ์๋ ๊ฒฝ์ฐ์ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
Last updated
Was this helpful?