图像处理导论课 瞎造轮子

图像处理导论作业2——图片放大

瞎写的,写的比较烂,且健壮性不好

并不能适用于各种情况,完成作业而已

from PIL import Image
import numpy as np
def read_img(imgfile):
    img = Image.open(imgfile)
    return img
img = read_img('hj.jpeg')

1. 最近邻域插值

def resize1(img,n):
    arr = np.array(img)
    nline = n*arr.shape[0]
    nrow = n*arr.shape[1]
    newarr = np.zeros([nline,nrow,3],np.uint8)
    
    for i in range(nline):
        for j in range(nrow):
            newarr[i][j] = arr[i//n][j//n]
    newimg = Image.fromarray(newarr)
    return newimg

2. 双线性插值

def resize2(img, n):
    arr = np.array(img)
    nline = n*arr.shape[0]
    nrow = n*arr.shape[1]
    newarr = np.zeros([nline,nrow,3],np.uint8)
    
    fl = float(arr.shape[0]-1)/float(nline-1)
    fr = float(arr.shape[1]-1)/float(nrow-1)
    for i in range(nline):
        for j in range(nrow):
            x0 = i * fl
            y0 = j * fr
            x1, y1 = int(x0), int(y0)
            x2 = arr.shape[0]-1 if x1+1 >= arr.shape[0] else x1+1
            y2 = arr.shape[1]-1 if y1+1 >= arr.shape[1] else y1+1
            fx1, fy1 = x0 - x1, y0 - y1
            fx2, fy2 = 1 - fx1, 1 - fy1
            v = [0,0,0]
            for k in range(3):
                v[k] = arr[x2,y2][k]*fx1*fy1+arr[x1,y2][k]*fx2*fy1+arr[x1,y1][k]*fx2*fy2+arr[x2,y1][k]*fx1*fy2
            newarr[i][j] = v
    newimg = Image.fromarray(newarr)
    return newimg

3. 结果比较

img1 = resize1(img, 4)
img2 = resize2(img, 4)
img3 = img.resize([4*img.size[0], 4*img.size[1]],Image.ANTIALIAS)
img # 原图

1124519-20170329000103248-111734202.png

img1 # 最近邻域插值

1124519-20170329000116873-820748335.png

img2 # 双线性插值

1124519-20170329000123904-106538706.png

img3 # PIL自带算法

1124519-20170329000155201-812557520.png

#(滑稽)

EOF

转载于:https://www.cnblogs.com/VV0H/p/6637705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值