Webp(VP8 μ½λ±)μ΄ μ΄λ―Έμ§λ₯Ό μμΆνλ λ°©μ
π¨ ν΄λΉ λΆμΌμ λν΄ μλ λ΄μ©μ΄ κ±°μ μμΌλ―λ‘ κ²μ¦λμ§ μμ λ΄μ© λ° μλͺ»λ λ΄μ©μ΄ μ‘΄μ¬ν μ μμ΅λλ€. νΌλλ°± λ¨κ²¨μ£Όμλ©΄ κ°μ νλλ‘ νκ² μ΅λλ€.
μ΅κ·Ό 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, λ³λ ¬ μ²λ¦¬λ₯Ό μΌλμ λ λ°μ΄ν° νν°μ
λ λ±μΌλ‘ μ±λ₯ μ΅μ νλ₯Ό μμΌ°λ€κ³ ν©λλ€. μμΈν ν
ν¬λμ λ
Όλ¬Έ μ°Έκ³