Convert color image to grayscale image
1 Algorithm
center position κ³Ό window size(BLK)λ₯Ό μ λ ₯λ°λλ€. μ λ ₯λ°λ κ²λ€μ΄ 0λ³΄λ€ μμ κ²½μ°μλ λ€μ μ λ ₯νλλ‘ do-whileλ‘ μ²λ¦¬νλ€. (out of boundary)
μμνλ μ§μ μ startX, startY, λλλ μ§μ μ endX, endY λ‘ μ μνλ€.
> startX = (centerX - BLK < 0)? 0 : centerX - BLK;
endX = (centerX + BLK > width) ? width : centerX + BLK;
startY = (centerY - BLK < 0) ? 0 : centerY - BLK;
endY = (centerY + BLK > height) ? height : centerY + BLK;
yμΆ λ°λ³΅λ¬Έμ startY ~ endY, xμΆ λ°λ³΅λ¬Έμ startX ~ endX κΉμ§ λ°λ³΅νλ€.
> grayscale = (red + green + blue) / 3
> red = green = blue = grayscale
2 Code
Image Resizing - NN(Nearest Neighbor)
image resizing λ°©λ²μλ NN(Nearest Neighbor), Bi-linear, Bi-cubic μΈ κ°μ§ λ°©λ²μ΄ μ‘΄μ¬νλ€. λ€λ₯Έ λ°©λ²λ λ§λ€! μ€λ λ°°μ΄ λ΄μ©μ NN, Bi-linear λ κ°μ§ λ°©λ²μ΄λ€.
μ°μ NN(Nearest Neighbor)μ μ΄μ©ν΄ λλ°° νλ, λλ°° μΆμλ₯Ό κ°λ¨ν ꡬνν΄λ³΄μλ€. mini_pixel[3][3] λ°°μ΄μ μ μν΄μ λλ°° νλλ₯Ό νκ³ , big_pixel[6][6] λ°°μ΄μ μ μν΄μ λ λ°° μΆμλ₯Ό νλ€. μ½λμ κ²°κ³Όλ μλμ κ°λ€. up scalingμ μ μ©ν λμλ λ°λ³΅λ¬Έμ κΈ°μ‘΄ μμ λ°°μ΄μ λ§μΆμ΄ λ리면μ [y*2+0][x*2+0] κ³Ό κ°μ΄ μ κ·Όνμ¬ κ°μ λμ νλ€. down scalingμ ν° λ°°μ΄μ λ§μΆμ΄ λ리면μ λ°λ³΅λ¬Έμ 2μΉΈ(down scaling λ²μ)μ© λ°μ΄λμ΄ [y/2][x/2] μ κ°μ΄ μ κ·Όνμ¬ κ°μ λμ νλ€. λ λ€ inputμ λ§μΆ°μ λ°λ³΅λ¬Έμ λ리면 λλ κ² κ°λ€!
2 Down Scaling μ½λ
Image Resizing - Bi-linear interpolation
image resizing μ νλ©΄μ λ§μ½ 0.7 λ°°μ¨λ‘ νλ€λ©΄, κΈ°μ‘΄ (1, 1)μ’ν κ°μ (0.7, 0.7)μ΄ λλ€. μ΄ ν½μ μ΄ κ°κ² λλ κ°μ κ³μ°ν λ μ£Όλ³ 4κ°μ ν½μ μ μ΄μ©ν΄ weighted sum μ μ·¨νλ€. ν½μ μ κ°μ κ³μ°ν λ forward filling, backward filling λ κ°μ§ λ°©μμ΄ μλλ° forward fillingμ input image μ’νμμ result image μ’νλ‘ scale μ κ³±ν΄μ£Όλ λ°©μμ΄κ³ , backward filling λ°©μμ result image κ° μλ€κ³ κ°μ νμ¬, κ·Έ μ’νμ 1/scale μ κ³±ν΄ input image μμ μλ μ΄λ€ μμΉμ μ‘΄μ¬νλκ°λ₯Ό μ°Ύμκ°λ λ°©μμ΄λ€.
λ΄κ° μ¬μ©ν λ³μλ result imageμ μ’νλ x, y λ‘ μ μνκ³ input imageμ μ’νλ posX = x / scale, posY = y/scale μ΄λΌκ³ μ μνλ€. scaleμ΄ λλ μ§ κ°μ΄κΈ° λλ¬Έμ posX, posY λ float dataκ° λ κ²μ΄λ©° (int)posX, (int)posX + 1, (int)posY, (int)posY + 1 κ°λ€μ μ΄μ©ν΄μ μ£Όλ³ 4κ° ν½μ κ°μΌλ‘ μ΅μ’ ν½μ κ°μ κ³μ°νλ€. ν΅μ¬μ μΈ λΆλΆμ μλ μ½λμ΄λ€. λ¬Όλ‘ , result κ°μ²΄λ 미리 μ μν΄λμ΄μΌνλ€.
Image rotation with forward filling
Input image(img κ°μ²΄)λ₯Ό μνλ μ λ ₯ κ°(scale degree)μΌλ‘ νμ μμΌ Output image(result κ°μ²΄)μ ν½μ λ¨μλ‘ κ³μ°νμ¬ μ μ₯νλ€. Output image(result κ°μ²΄)λ input imageμ μ¬μ΄μ¦λ κ°λ€λ μ λ κ³ λ €ν΄μ€λ€.
μ λ ₯ λ°μ κ°λ(scale degree)λ μ‘μλΆλ²μ΄κΈ° λλ¬Έμ, λ€μ μμ μνμ¬ νΈλλ²μΌλ‘ λ³νν΄μ€λ€. radian = scale * PI / 180 μΌλ‘ κ³μ°ν ν μΌκ°ν¨μ κ³μ° μμλ radian κ°μ μ΄μ©νλ€.
Rotation matrix μ [x y]λ₯Ό νλ ¬ κ³±ν κ²°κ³Όλ [posX posY] μ΄λ€. posX = x * cos(radian) β y * sin(radian), posY = x * sin(radian) + y * cos(radian) μΌλ‘ κ³μ°ν΄μ€λ€.
μ¬κΈ°μλ Input imageμ μ€μ¬ μ§μ μ κΈ°μ€μΌλ‘ νμ ν΄μΌ νλ―λ‘ μμ μμμ λ³νν΄μ€λ€. posX = (x-centerX) * cos(radian) β (y-centerY) * sin(radian) + centerX, posY = (x-centerX) * sin(radian) + (y-centerY) * cos(radian) + centerY μΌλ‘ κ³μ°νλ€.
ν΅μ¬μ μΈ μ½λλ λ€μκ³Ό κ°λ€.
κ²°κ³Ό μ¬μ§μ 10λ, 45λ, -45λ 0λ νμ ν μ¬μ§μ΄λ€. 180λ νμ νμ λλ κ²μμ μ μ΄ μκΈ°λ©΄μ μ‘°κΈ κΉ¨μ§λ€. μ½κ°μ κΉ¨μ§μ μμ§λ§, νμ μ μ μμ μΌλ‘ λλ κ²μ νμΈνλ€.
Image rotation with bi-linear interpolation
Input image(img κ°μ²΄)λ₯Ό μνλ μ λ ₯ κ°(scale degree)μΌλ‘ νμ μμΌ Output image(result κ°μ²΄)μ ν½μ λ¨μλ‘ κ³μ°νμ¬ μ μ₯νλ€. Output image(result κ°μ²΄)λ input imageμ μ¬μ΄μ¦λ κ°λ€λ μ λ κ³ λ €ν΄μ€λ€.
μ λ ₯ λ°μ κ°λ(scale degree)λ μ‘μλΆλ²μ΄κΈ° λλ¬Έμ, λ€μ μμ μνμ¬ νΈλλ²μΌλ‘ λ³νν΄μ€λ€. radian = scale * PI / 180 μΌλ‘ κ³μ°ν ν μΌκ°ν¨μ κ³μ° μμλ radian κ°μ μ΄μ©νλ€.
Backward filling λ°©μμΌλ‘ μ°μ result μ x, y μ’νλ₯Ό κ°μ§κ³ input imageμ μ’ν posX, posY κ°μ μ°Ύλλ€. κ°μ μ°ΎκΈ° μν΄μλ μμμ μ¬μ©ν rotation matrixμ inverse matrixλ₯Ό μ°Ύμμ κ³μ°ν΄μ€λ€. μ€μ¬μ κΈ°μ€μΌλ‘ κ³μ°ν΄μ£Όμ΄μΌ νκΈ° λλ¬Έμ, μ€μ¬ μ’ν(centerX, centerY) λ³μλ₯Ό μ΄μ©ν΄ μλ μμ κ³μ°ν΄μ£Όμλ€.
μ΅μ’ μνλ ¬μ [[cos -sin][sin cos]] μ΄κ³ , posX = (x-centerX) * cos(radian) + (y-centerY) * sin(radian) + centerX, posY = -(x-centerX) * sin(radian) + (y-centerY) * cos(radian) + centerY μΌλ‘ input imageμ μ’ν κ°μ μ°Ύμμ€λ€.
μ°ΎμλΈ μ’νλ float κ°μ΄κΈ° λλ¬Έμ bi-linear interpolation(μλ°©ν₯ μ ν 보κ°λ²)μ μ΄μ©ν΄μ μ£Όλ³ 4κ°μ μ’νλ€μ κ°μ€μΉλ₯Ό μ£Όμ΄ ν½μ κ°μ κ³μ°νλ€.
Bi-linear interpolation λ°©μμ μ΄μ©νμ¬ κΉ¨μ§μ΄ μμμ νμΈνλ€.