Changeset 2114


Ignore:
Timestamp:
Dec 3, 2007, 6:48:45 PM (13 years ago)
Author:
Sam Hocevar
Message:
  • Factored all non-rectangular matrix examples.
  • Apparently 2-5-1 was wrong before. Updated.
Location:
www/study
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • www/study/study.py

    r2113 r2114  
    478478
    479479# Output 2.5.1: cross matrix
    480 def test251(src):
     480# Output 2.5.2: hex matrix
     481# Output 2.5.3: 4-wise cross matrix
     482# Output 2.5.4: 3-wise hex matrix
     483def test25x(src, mat, v1, v2):
     484    # 1. count non-zero pixels
     485    n = 0
     486    for line in mat:
     487        for x in line:
     488            if x > 0:
     489                n += 1
     490    # 2. create list of vectors
     491    l = []
     492    x = y = 0
     493    while (x, y) not in l:
     494        l.append((x, y))
     495        (x, y) = ((x + v1[0]) % n, (y + v1[1]) % n)
     496        if (x, y) in l:
     497            (x, y) = ((x + v2[0]) % n, (y + v2[1]) % n)
     498    # 3. create big matrix
     499    m = [[0] * n for i in range(n)]
     500    for v in l:
     501        for y in range(len(mat)):
     502            for x in range(len(mat[0])):
     503                if mat[y][x] == 0:
     504                    continue
     505                m[(v[1] + y + n) % n][(v[0] + x + n) % n] = mat[y][x]
     506    (w, h) = src.size()
     507    dest = Image((w, h))
     508    for y in range(h):
     509        for x in range(w):
     510            c = src.getGray(x, y)
     511            threshold = m[y % n][x % n] / (1. + n)
     512            d = c > threshold
     513            dest.setGray(x, y, d)
     514    return dest
     515
     516if chapter(2):
    481517    mat = [[0, 5, 0],
    482518           [4, 1, 2],
    483519           [0, 3, 0]]
    484     lookup = [(1,2), (1,0), (0,1), (1,1), (2,1)]
    485     (w, h) = src.size()
    486     dest = Image((w, h))
    487     for y in range(h):
    488         for x in range(w):
    489             c = src.getGray(x, y)
    490             (i, j) = lookup[(x + 3 * y) % 5]
    491             threshold = mat[j][i] / 6.
    492             c = c > threshold
    493             dest.setGray(x, y, c)
    494     return dest
    495 
    496 if chapter(2):
    497     test251(lenna256bw).save("out2-5-1.png")
    498     test251(gradient256bw).save("grad2-5-1.png")
    499 
    500 # Output 2.5.2: hex matrix
    501 def test252(src):
     520    v1 = (2, -1)
     521    v2 = (1, 2)
     522    test25x(lenna256bw, mat, v1, v2).save("out2-5-1.png")
     523    test25x(gradient256bw, mat, v1, v2).save("grad2-5-1.png")
    502524    mat = [[0, 5, 3, 0],
    503525           [7, 1, 6, 4],
    504526           [0, 8, 2, 0]]
    505     lookup = [(3,1), (1,0), (2,0), (1,2), (2,2), (0,1), (1,1), (2,1)]
    506     (w, h) = src.size()
    507     dest = Image((w, h))
    508     for y in range(h):
    509         for x in range(w):
    510             c = src.getGray(x, y)
    511             (i, j) = lookup[(x + 5 * y) % 8]
    512             threshold = mat[j][i] / 9.
    513             c = c > threshold
    514             dest.setGray(x, y, c)
    515     return dest
    516 
    517 if chapter(2):
    518     test252(lenna256bw).save("out2-5-2.png")
    519     test252(gradient256bw).save("grad2-5-2.png")
    520 
    521 # Output 2.5.3: 4-wise cross matrix
    522 def test253(src):
     527    v1 = (2, -2)
     528    v2 = (3, 1)
     529    test25x(lenna256bw, mat, v1, v2).save("out2-5-2.png")
     530    test25x(gradient256bw, mat, v1, v2).save("grad2-5-2.png")
    523531    mat = [[ 0,  0,  0, 19,  0,  0],
    524532           [ 0, 17, 15,  3,  7,  0],
     
    527535           [ 0, 16,  4,  8, 10,  0],
    528536           [ 0,  0, 12,  0,  0,  0]]
    529     l0 = [(2,4), (3,4), (4,4), (3,0), (0,2), (1,2), (2,2), (3,2), (4,2), (1,4)]
    530     l1 = [(2,5), (1,1), (2,1), (3,1), (4,1), (1,3), (2,3), (3,3), (4,3), (5,3)]
    531     (w, h) = src.size()
    532     dest = Image((w, h))
    533     for y in range(h):
    534         for x in range(w):
    535             c = src.getGray(x, y)
    536             if y & 1:
    537                 (i, j) = l1[(x + 2 * y - 2) % 10]
    538             else:
    539                 (i, j) = l0[(x + 2 * y) % 10]
    540             threshold = mat[j][i] / 21.
    541             c = c > threshold
    542             dest.setGray(x, y, c)
    543     return dest
    544 
    545 if chapter(2):
    546     test253(lenna256bw).save("out2-5-3.png")
    547     test253(gradient256bw).save("grad2-5-3.png")
    548 
    549 # Output 2.5.4: 3-wise hex matrix
    550 def test254(src):
     537    v1 = (4, -2)
     538    v2 = (2, 4)
     539    test25x(lenna256bw, mat, v1, v2).save("out2-5-3.png")
     540    test25x(gradient256bw, mat, v1, v2).save("grad2-5-3.png")
    551541    mat = [[ 0, 13,  7,  0,  0,  0,  0],
    552542           [19,  1, 16, 10, 15,  9,  0],
     
    555545           [ 0, 20,  2, 17, 11,  0,  0],
    556546           [ 0,  0, 23,  5,  0,  0,  0]]
    557     lookup = [(4,4), (1,0), (2,0), (2,5), (3,5), (0,1), (1,1), (2,1),
    558               (3,1), (4,1), (5,1), (1,2), (2,2), (3,2), (4,2), (5,2),
    559               (6,2), (2,3), (3,3), (4,3), (5,3), (1,4), (2,4), (3,4)]
    560     (w, h) = src.size()
    561     dest = Image((w, h))
    562     for y in range(h):
    563         for x in range(w):
    564             c = src.getGray(x, y)
    565             (i, j) = lookup[(x + 5 * y) % 24]
    566             threshold = mat[j][i] / 25.
    567             c = c > threshold
    568             dest.setGray(x, y, c)
    569     return dest
    570 
    571 if chapter(2):
    572     test254(lenna256bw).save("out2-5-4.png")
    573     test254(gradient256bw).save("grad2-5-4.png")
     547    v1 = (5, -1)
     548    v2 = (-1, 5)
     549    test25x(lenna256bw, mat, v1, v2).save("out2-5-4.png")
     550    test25x(gradient256bw, mat, v1, v2).save("grad2-5-4.png")
    574551
    575552##############################################################################
Note: See TracChangeset for help on using the changeset viewer.