Blame view

mjpeg/base.py 880 Bytes
2b474806   Chunk   init.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
## -*- coding: utf-8 -*-

from numpy import array, vstack, hstack, kron, ones
from random import SystemRandom

sysrnd = SystemRandom()


def uMask(u=7):
    return array([[(x + y < u) & (x + y > 0) for x in range(8)] for y in range(8)])


acMaskBlock = array(
    [[False] + [True for x in range(7)]] +
    [[True for x in range(8)] for y in range(7)]
)


def acMask(h1, w1, mask=acMaskBlock):
    """Return a mask of the given size for the AC coefficients of a
       JPEG coefficient matrix."""
    (h, w) = (h1 / 8, w1 / 8)
    A = vstack([mask for x in range(h)])
    A = hstack([A for x in range(w)])
    return A


def repmat(M, rep): return kron(ones(rep), M)


def getfreq(A, i, j):
    """
      Return a submatrix of a JPEG matrix A including only frequency (i,j)
      from each block.
    """
    (M, N) = A.shape
    return A[xrange(i, M, 8), :][:, xrange(j, N, 8)]