Commit eaae4cb6 authored by 袁通's avatar 袁通
Browse files

Finish first two without edge

parent 293b6402
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -8,7 +8,12 @@ Shrink: [205, 205]

import numpy as np
from skimage import io, data
import math
from scipy import interpolate

def small_map2(x, range):
    ratio = x/range
    return 3.01 + ratio*(range-8.02)

def bicubic_11810818(input_file, dim):
    # Load image
@@ -20,8 +25,19 @@ def bicubic_11810818(input_file, dim):
    out_image = np.zeros(dim, dtype=np.uint8)

    # Perform Exchange
    for col in range(out_width):
        for row in range(out_height):
            pix_x = small_map2(col*((in_width-1)/(out_width-1)), out_width)
            pix_y = small_map2(row*((in_height-1)/(out_height-1)), out_height)
            x=[math.floor(pix_x)-1, math.floor(pix_x), math.floor(pix_x)+1, math.floor(pix_x)+2]
            y=[math.floor(pix_y)-1, math.floor(pix_y), math.floor(pix_y)+1, math.floor(pix_y)+2]
            z=in_image[math.floor(pix_x)-1:math.floor(pix_x)+3, math.floor(pix_y)-1:math.floor(pix_y)+3]
            f = interpolate.interp2d(x, y, z, kind='cubic')

            out_image[col, row] = f(col, row)

    # Save Image
    print(out_image)
    io.imsave("bicubic_11810818.tif", out_image)


+208 KiB

File added.

No diff preview for this file type.

+5 −1
Original line number Diff line number Diff line
@@ -39,7 +39,11 @@ def bilinear2_11810818(input_file, dim):
            y = small_map(row*((in_height-1)/(out_height-1)), out_height)
            left=linear(y-math.floor(y), in_image[math.floor(x), math.floor(y)], in_image[math.floor(x), math.floor(y)+1])
            right=linear(y-math.floor(y), in_image[math.floor(x)+1, math.floor(y)], in_image[math.floor(x)+1, math.floor(y)+1])
            out_image[col, row] = round(linear(x-math.floor(x), right, left))
            horizontal=linear(x-math.floor(x), left, right)
            top=linear(x-math.floor(x), in_image[math.floor(x), math.floor(y)], in_image[math.floor(x)+1, math.floor(y)])
            bottom=linear(x-math.floor(x), in_image[math.floor(x), math.floor(y)+1], in_image[math.floor(x)+1, math.floor(y)+1])
            vertical=linear(y-math.floor(y), top, bottom)
            out_image[col, row] = round(0.5*(vertical+horizontal))

    print(out_image)
    # Save Image
+53 −0
Original line number Diff line number Diff line
"""
LAB2 Task 1_2

Use bilinear interpolation interpolation to interpolate a grey scale image
Enlarge: [461, 461]
Shrink: [205, 205]
"""

import numpy as np
from skimage import io, data
import math


def linear(x, y1, y2):
    if y2 > y1:
        return y1 + x * (y2-y1)
    else:
        return y2 + (1-x)*(y1-y2)


def small_map(x, range):
    ratio = x/range
    return 0.01 + ratio*(range-0.02)


def bilinear3_11810818(input_file, dim):
    # Load image
    in_image = io.imread(input_file)
    print(in_image)
    out_width = dim[0]
    out_height = dim[1]
    in_width = in_image.shape[0]
    in_height = in_image.shape[1]
    out_image = np.zeros(dim, dtype=np.uint8)
    # out_image = np.zeros(dim)

    # Perform Exchange
    for col in range(out_width):
        for row in range(out_height):
            x = small_map(col*((in_width-1)/(out_width-1)), out_width)
            y = small_map(row*((in_height-1)/(out_height-1)), out_height)

            left=linear(y-math.floor(y), in_image[math.floor(x), math.floor(y)], in_image[math.floor(x), math.floor(y)+1])
            right=linear(y-math.floor(y), in_image[math.floor(x)+1, math.floor(y)], in_image[math.floor(x)+1, math.floor(y)+1])

            out_image[col, row] = round(linear(x-math.floor(x), left, right))

    # Save Image
    io.imsave("shrank_bilinear_11810818.tif", out_image)


if __name__ == '__main__':
    bilinear3_11810818("rice.tif", [205, 205])
 No newline at end of file
Loading