๐จ ํด๋น ๋ถ์ผ์ ๋ํด ์๋ ๋ด์ฉ์ด ๊ฑฐ์ ์์ผ๋ฏ๋ก ๊ฒ์ฆ๋์ง ์์ ๋ด์ฉ ๋ฐ ์๋ชป๋ ๋ด์ฉ์ด ์กด์ฌํ ์ ์์ต๋๋ค. ํผ๋๋ฐฑ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ต๊ทผ Webp ์ฝ๋ฑ์ ์ ์ง๊ฐ ๋น ๋ฅด๊ฒ ๋์ด๋๊ณ ์๋๋ฐ, jpg์ ์์ค์์ถ๋, Png์ ๋ฌด์์ค์์ถ๋, gif์ ์์งค๊ธฐ๋ฅ๋ ๋ชจ๋ ์ง์ํ๋ โ๋ง๋ฅ ํฌ๋ฉงโ์ ๋๋ค. ๊ณผ์ฐ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด๊ธธ๋ ์ด๋ ๊ฒ ๋ค๋ฐฉ๋ฉด์ผ๋ก ์ฐ์ผ ์ ์๋์ง ๊ถ๊ธํ๋๋ฐ, ์ค๋ ์ด ์ฐธ์ ์์๋ณด์์ต๋๋ค.
1. ์คํ
์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด
- ์์ค์์ถ
- ๋ฌด์์ค์์ถ
- ๋์์ ๊ธฐ๋ฅ (์๋ฆฌ ์๋)
- ์ํ์ฑ๋
์ ๋ชจ๋ ์ง์ํฉ๋๋ค. ๊ฑฐ์ ๋ฌด์๋จ๋ฌผ๊ธ์ด๋ผ๋ ๋ง์ด์ฃ ..
ํ์ง๋ง ๋ฌด์์ค๊ณผ ์์ค ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฅด๊ณ , ๋์์์ ๋ ์์งค๊ณผ๋ ๋ค๋ฆ ๋๋ค. ๊ฐ๊ธฐ๊ฐ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค ๋ณด๋, ์ด ํฌ๋ฉง์ ๊ฝค ๋ณต์กํ ์๋ฐ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ณต์กํ ๊ณผ์ ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ๊ถ๊ธํด์ ๊ฒํฅ๊ธฐ๋ก ์์๋ณด์์ต๋๋ค.
2. ๋ฌด์์ค ์์ถ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์์ค ์์ถ์ ์ผ๋ฐ์ ์ธ Deflate ์์ถ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ๋๋ฐ, ์ฌ๊ธฐ์ ์ถ๊ฐ์ ์ผ๋ก ์ฌ๋ฌ โ์ธ์ฝ๋ฉโ ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํฉ๋๋ค. ์ด์ ๋ํด์๋ ํฌ๊ฒ ์๋์ 4๊ฐ์ง ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
enum TransformType {
PREDICTOR_TRANSFORM = 0,
COLOR_TRANSFORM = 1,
SUBTRACT_GREEN = 2,
COLOR_INDEXING_TRANSFORM = 3,
};
๊ตฌ์ฒด์ ์ธ ์ค๋ช ์ ์๋์ ๊ฐ์ต๋๋ค.
์์ธก์ ๋ณํ (predictor transform)
์ด๊ฑด ๋์์์์ ์ฐ๋ ๋ฐฉ์์ด๊ธด ํ๋ฐ, ์ ์งํ์์๋ ์ฌ์ฉํ๋ ๊ฑด ๊ต์ฅํ ์ฐธ์ ํ ์์ด๋์ด ๊ฐ๋ค์. ์ธ์ ํ ๊ณต๊ฐ์ด ์ ์ฌํ ๊ฒฝ์ฐ(์ํธ๋กํผ ๊ณ์ฐํ์ฌ), ์์ฌ ๊ฐ(์ค์ - ์์ธก)๋ง ์ธ์ฝ๋ฉํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ด๋ฅผ ํตํด ๋์ผํ ํจํด์ด ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต๋๋ ์ด๋ฏธ์ง๋ ํฌ๊ฒ ์์ถ๋ฅ ์ ๋์ผ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด, ์ ์ฌ์ง์์ ์ผ์ชฝ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์นธ์ ์ฑ์ฐ๋ ๊ฒ์ด ์ ์ผ ์ค์ ์ด๋ฏธ์ง์ ์ ์ฌํ๋ค๋ ๊ฒ์ ๊ณ์ฐํด๋ด์ด, Vertical-Left
๋ผ๋ ์์ธก์๋ง์ผ๋ก ์ฌ๋ฌ ํฝ์
์ ํ๋ฒ์ ํํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ด๋ ์์ค ์์ถ์๋ ์ฌ์ฉ๋๋ ๋งค์ปค๋์ฆ์ ๋๋ค. (๋ค๋ง ์์ค ์์ถ์ ์์ค์ ๋๋ฐํ ๋ณด๋ค ๋จ์ํ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํฉ๋๋ค)
์์ ๋ณํ (color transform)
RGB ๊ฐ ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ๋ถ์ฌํ๋ ์์ถ๋ฐฉ์์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๊ฒ ์ด๋ค ๊ฒฝ์ฐ์ ํจ๊ณผ๊ฐ ์๋์ง๋ ์์งํ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ํน์ํ ์ผ๋ถ ์ด๋ฏธ์ง์ ๋ํด์๋ ํจ๊ณผ๊ฐ ๊ฝค ์ข์ ๊ฒ ๊ฐ๋ค์.
์ด๋ก์ ๋ณํ (subtract green)
์ด๋ก์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ค๋ฅธ ์์ ๊ฐ์ ์ฌ์์ฑํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ๋๋ค.
void AddGreenToBlueAndRed(uint8 green, uint8 *red, uint8 *blue) {
*red = (*red + green) & 0xff;
*blue = (*blue + green) & 0xff;
}
์์งํ ์ด๋ค ๊ฒฝ์ฐ์ ์ ์ฉํ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ ๋ณํ๋ณด๋ค๋ ๋ ํฌ์ํ ์ผ์ด์ค์ผ๋ฏ?
์์ ์บ์ (indexing transform)
gif์ ์ ์ฌํ ๋ฐฉ์์ด์ง๋ง, global ํ ํ๋ ํธ๊ฐ ์๋๋ผ local/window ๋จ์๋ก ํ๋ ํธ๊ฐ ์ ์ฉ๋์ด ํจ์ฌ ํจ์จ์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ธ์ฝ๋ฉ ํ ์ ์๊ฒ ๋ฉ๋๋ค. gif์ ์ฅ์ ์ ์ ์ฐจ์ฉํด ์จ ํํ๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
PNG์ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ?
PNG๋ ๋จ์ Deflate ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ถํ๋ ๋ฌด์์ค ์์ถ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. ํน์ ์๋์ฐ์ ๋ํด LZ77 ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ถํ์ฌ ์์ ํ๋ ํธ ํ์ฑ ํ ํํ๋ง์ฝ๋๋ก ์์ถํ๋ ๋ฐฉ์์ ๋๋ค. (ํํ๋ง์ฝ๋๋ก ์์ถํ๋ ๊ตฌ์ฒด์ ์ธ ์๋ jpeg ํธ ์ฐธ๊ณ )
์ด๋ฌํ ํ ํฌ๋๋ค๋ก ๋ฌด์์ค ์์ถ์ธ๋ฐ๋ png ๋๋น ํฌ๊ธฐ๊ฐ 60% ~ 70%์ ๋ถ๊ณผํ๋ค๊ณ ํฉ๋๋ค.
3. ์์ค ์์ถ = VP8 ์ฝ๋ฑ
VP8 ์ฝ๋ฑ์ ๋์์ ์ฝ๋ฑ ์ค ํ๋์ธ๋ฐ, Webp๋ ์์ค ์์ถ์ ํ ๋ ์ด VP8 ํคํ๋ ์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ๋์์์์ ์ฌ์ฉ๋๋ ์์ ์์ถ ํ ํฌ๋์ ์ ์งํ์์ ์ฌ์ฉํ์ง ๋ชป ํ ์ด์ ๋ ์์์์?
์์งค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์์งค์ ๋ณดํต ํคํ๋ ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ํฌ๋ฉง์ ๋๋ค. ๋ณด๊ฐ(Prediction)์ด ๋ค์ด๊ฐ ๊ฒฝ์ฐ ์ผ๋ถ ์ฅ์น์์ ์ธ์์ ๋ชป ํ๋ค๊ณ ํ๊ธฐ๋ ํ๊ณ , ๋ฆฌ์์ค ์๋ชจ๊ฐ ์ฌํ๊ธฐ๋ ํ์ฌ ํต์์ ์ผ๋ก๋ ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๊ด๋ก์ ๋๋ค. ์ฌ์ค์ ๋ณด๊ฐ ํ๋ ์๊น์ง ์ฌ์ฉํ๋ฉด ๊ทธ๊ฑด โ์์งคโ ๋ณด๋ค๋ โ๋์์โ์ ๋ ๊ฐ๊น์ง ์๋ ์ถ๊ธฐ๋ ํ๋ค์.
ํคํ๋ ์ ์ธ์ฝ๋ฉ
์์ ์ ์ง ํ์ ์ธ์ฝ๋ฉ๊ณผ ๋๋ถ์ด์ ๋ช ๊ฐ์ง ์ถ๊ฐ์ ์ธ ํ ํฌ๋์ด ์ ์ฉ๋ฉ๋๋ค.
์ ์ํ ๋ธ๋ก ์์ํ
jpeg์ ์์ํ์ ๋น์ทํ ํ ํฌ๋์ด์ง๋ง, ์ฃผ๋ชฉํ ๋งํ ํค์๋๋ ๋ฐ๋ก โ์ ์ํโ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ ์ฌํ ํน์ง์ ๊ฐ์ง ์์ญ์ผ๋ก ๋๋์ด์, ๊ฐ ์์ญ์ ์ต์ ํ๋ ํํ๋ก ์์ํ์์ผ ์ ์ฅํจ์ผ๋ก์ ์์ค์ ์ต์ํํ๋ฉฐ ์ ์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค.
DCT, WHT ๊ธฐ์ ์ ํตํด ์์ค์ ์ต์ํํ๋ ํํ๋ก ์ ์ฅ์ ํ๋ค๊ณ ํฉ๋๋ค. ์ด๋ฅผ ํตํด 16x16 ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ์ 2-D ๋ฐ์ดํฐ๋ก ์ธ์ฝ๋ฉ์ด ๊ฐ๋ฅํ๋ค๊ณ ํฉ๋๋ค ๐ฒ. ์์ธํ ๋ด์ฉ์ ํด๋น ๋ ผ๋ฌธ์ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
์ฌ๋ฏธ์๋ ์ ์ jpeg์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฌ๊ธฐ์๋ luma / chroma ์ ํด์๋๊ฐ ๋ค๋ฆ ๋๋ค. 16x16 ์ macroblock์ ๋ํด์, luma๋ 16x16๋ก ์์ถ์ ํ๊ณ chroma๋ 8x8 ๋ธ๋ก์ผ๋ก ์์ถ์ ํฉ๋๋ค.
Prediction
Prediction์ด๋, ์ด๋ฏธ์ง์ ์ผ๋ถ๋ถ์ ์ฌ์ฌ์ฉํ์ฌ ๋ค๋ฅธ(์๊ฐ ๋ฐ ๊ณต๊ฐ) ์์ญ์ ํจ์จ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค.
์ฌ๊ธฐ์ ํคํ๋ ์๊ฐ์ ๋ณด๊ฐ(์์ธก)์ ์ํด์๋ โTM_PREDโ๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๊ณ , ์ด๋ฏธ์ง ๋ด๋ถ์์์ ์์ธก์ ์ํด์๋ โSPLITMVโ๋ผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค. ์ด๋ฌํ ๋ ํผ๋ฐ์ค ํ๋ ์๋ค์ ์ด์ฉํ์ฌ ๋ณด๊ฐ ํ๋ ์๋ค์ ๋ง๋ค๊ฒ ๋์ฃ .
๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก๋ ๋ณด๊ฐ์ ์ํด์๋ โ๊ธฐ์ค ํ๋ ์(Reference Frame)โ ์ด๋ผ๋ ๊ฐ๋ ์ด ํ์ํ๋ฐ, ์ค์ ํ์๊ฐ ๋๊ณ ํต์ฌ์ด ๋๋ ํ๋ ์์ โGolden Reference Frameโ ์ด๋ผ๊ณ ์ผ์ปซ๊ณ , ์ค๋ก์ง ๋์ฝ๋ฉ ๋ชฉ์ ์ผ๋ก๋ง ์ฐ์ด๋ โAlternative Reference frameโ ์ด๋ผ๋ ๊ฐ๋ ๋ํ ์กด์ฌํฉ๋๋ค.
์ด๋ฏธ์ง๊ฐ ๋ณด๊ฐ(Inter)์์๋ ๊ฐ ํฝ์ ๋ณ๋ก bicubic interpolation์ ์ฌ์ฉํ๊ณ , ์ด๋ฅผ ๊ทผ์ฒ ์ฌ๋ฌ ํฝ์ ๋ค์๊ฒ ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ์ธ์ฝ๋ฉํ๋ค๊ณ ํฉ๋๋ค. ๋ณํ๋์ ๊ธฐ๋กํ๋ ๋์ ์ธํฐํด๋ ์ด์ ์ ์ฌ์ฉํ๋ค๋ ๊ฒ ๊ฝค ์ฐธ์ ํ๋ค์.
์ด๋ฏธ์ง ์์ฒด๋ฅผ ๊ตฌ์ฑ(Intra)ํ ๋๋ ํฌ๊ฒ 4๊ฐ์ง ์ ๋ต์ด ์ฌ์ฉ๋๋ค๊ณ ํฉ๋๋ค.(H, V, DC, TM). ์ฌ๊ธฐ์ TM_PRED
๊ฐ ํน์ดํ๋ฐ, ๋๊ฐ์ ๋ฐฉํฅ์ ํฝ์
์ ์ฌ์ฉํ์ฌ ๋ณด๊ฐ์ ํ๋ค๊ณ ํฉ๋๋ค.
- ๋ค๋ง ๊ถ๊ธํ ์ ์, intra prediction์ผ๋ก ์ธ์ฝ๋ฉ ํ ์ ์๋ ์ํฉ์ ์ด๋ป๊ฒ ํ๋ ํ๋์ง์ ๋ํ ์ ๋ณด๋ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ํน์ window size๋ก ์ผ์ผ์ด cosine similarity ๊ฐ์ ๊ฒ์ ์ด์ฉํ์ฌ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ ์ํ๋๋ ๊ฑธ๊นโฆ
- ๊ทธ๋ฆฌ๊ณ Reference Frame์ ์ด๋ป๊ฒ ํ๋ ํ๋ ๊ฒ์ธ์ง์ ๋ํ ์ค๋ช ๋ ์ ์ ๋์์๋ค์ ๐ค ์ด ๋ถ๋ถ๋ ์๋ง ๋ค๋ฅธ ์ฝ๋ฑ๊ณผ ์ ์ฌํ๊ฒ ์ํธ๋กํผ ์ฌ์ฉํด์ ํ์ง ์์๊น ์ง๋ ์ง์ํฉ๋๋ค.
์ด์ธ์๋ โฆ
Flexible reference frame, ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ผ๋์ ๋ ๋ฐ์ดํฐ ํํฐ์
๋ ๋ฑ์ผ๋ก ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์์ผฐ๋ค๊ณ ํฉ๋๋ค. ์์ธํ ํ
ํฌ๋์ ๋
ผ๋ฌธ ์ฐธ๊ณ
์ฐธ์กฐ
'๊ฐ๋ฐ > Engineering' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Sized Memory Deallocation (0) | 2022.11.02 |
---|---|
[๋ฒ์ญ] ์๋น์ค ์ฅ์ ๋ก๋ถํฐ ์ป์ 7๊ฐ์ง ๊ตํ (0) | 2022.11.02 |
AWS Step Functions (0) | 2022.10.31 |
๋์ฉ๋ ๋ก๋๋ฐธ๋ฐ์ ์ค๊ณ (0) | 2022.07.24 |
Storage as a DW (Data Warehouse) (0) | 2022.07.04 |