Python数字图像处理重采样算法

这篇博客介绍了图像处理中的重采样技术,包括最邻近法和双线性内插法。最邻近法通过四舍五入找到新坐标对应的原像素值;双线性内插则通过权重分配结合周边四个像素值来插值。这些方法用于调整图像大小,保持视觉效果。
摘要由CSDN通过智能技术生成

1.最邻近法,在进行采样后的原图像的每个坐标变为浮点型,先进行四舍五入寻找整数值然后利用公式寻找原图像对应的像素,采样后的(i,j)对应原图像中的((i/l),(j/l))取整。

row=image.shape[0]
col=image.shape[1]
channels=image.shape[2]
l=2.0#放大缩小系数
'''
重采样三种方法
最邻近法
双线性内插法
三次卷积内插法
'''
def NearestNeighbour(image,l):
    newrow=round(row*l)
    newcol=round(col*l)
    img=np.zeros((newrow,newcol,channels),np.uint8)
    for i in range(newrow):
        for j in range(newcol):
             x=int(i/l)
             y=int(j/l)
             img[i,j]=image[x,y]
    return img
img=NearestNeighbour(image,l)
cv2.imshow('NearestNeighbour',img)
cv2.waitKey(0)

2.双线性内插法,选择重采样后的大小然后找到变化因子,寻找之前的原图像的坐标应该是浮点数,然后向下取整,找到权重,对其周围四个区域分不同的权重相乘

def bilinear(src_img, dst_shape):
    """
    双线性插值法,来调整图片尺寸

    :param org_img: 原始图片
    :param dst_shape: 调整后的目标图片的尺寸
    :return:    返回调整尺寸后的图片矩阵信息
    """
    dst_img = np.zeros((dst_shape[0], dst_shape[1], 3), np.uint8)
    dst_h, dst_w = dst_shape
    src_h = src_img.shape[0]
    src_w = src_img.shape[1]
    # i:纵坐标y,j:横坐标x
    # 缩放因子,dw,dh
    scale_w = src_w / dst_w
    scale_h = src_h / dst_h

    for i in range(dst_h):
        for j in range(dst_w):
            src_x = float((j + 0.5) * scale_w - 0.5)
            src_y = float((i + 0.5) * scale_h - 0.5)
			
			# 向下取整,代表靠近源点的左上角的那一点的行列号	
            src_x_int = math.floor(src_x)
            src_y_int = math.floor(src_y)
            
            # 取出小数部分,用于构造权值
            src_x_float = src_x - src_x_int
            src_y_float = src_y - src_y_int

            if src_x_int + 1 == src_w or src_y_int + 1 == src_h:
                dst_img[i, j, :] = src_img[src_y_int, src_x_int, :]
                continue
            dst_img[i, j, :] = (1. - src_y_float) * (1. - src_x_float) * src_img[src_y_int, src_x_int, :] + \
                               (1. - src_y_float) * src_x_float * src_img[src_y_int, src_x_int + 1, :] + \
                               src_y_float * (1. - src_x_float) * src_img[src_y_int + 1, src_x_int, :] + \
                               src_y_float * src_x_float * src_img[src_y_int + 1, src_x_int + 1, :]
    return dst_img

3.三次卷积内插

有点复杂

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值