图像采样python

2021/9/18 22:06:40

本文主要是介绍图像采样python,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

之前总是听上采样,下采样一直不懂,这学期学了数字图像课终于明白了。

采样

是指对图像像素点的选择或拒绝,采样是对图像在空间上的操作,采样分为上采样和下采样,上采样是用来增大图像的,下采样是用来缩小图像的。

为了增加图像的大小采用上采样,会出现一个问题:新的图像会有一些像素点在原来的小图像中没有对应的像素,需要采用插值的办法来补充像素点。比如最近邻插值,双线性插值,三次插值。

最近邻插值法:
在放大图像时,多出来的像素点由最近邻的像素点构成
在这里插入图片描述
算法流程:
计算新图形(放大后或缩小后)的坐标点像素值对应于原图像中哪一个像素点填充的。
在这里插入图片描述
解释:src是原图,dst是新图,原来的图像宽度/高度除以新图像的宽度/高度可以得到缩放比例,假如是缩小图片括号内的数字小于1,放大则大于1,相当于系数,再乘以新图片的宽度/高度,就实现了缩放。

def NN_interpolation(img,dstH,dstW):
	#左边的参数要写全,不要漏了通道数
	srcH,srcW,t=img.shape
	retimg=np.zeros((dstH,dsW,3),dtype=np.unit8)
	for i in range(dstH-1):
		for j in range(dstW-1):
			srcx=round(i*(srcH/dstH))
			srcy=round(j*(srcW/dstW))
			retimg[i,j]=img[srcx,srcy]
	return retimg

完整代码

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np 
import math
 
# 最近邻插值算法
# dstH为新图的高;dstW为新图的宽
def NN_interpolation(img,dstH,dstW):
    scrH,scrW,t=img.shape#src原图的长宽
    retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
    for i in range(dstH-1):
        for j in range(dstW-1):
            scrx=round(i*(scrH/dstH))
            scry=round(j*(scrW/dstW))
            retimg[i,j]=img[scrx,scry]
    return retimg
 
im_path='./pikaqiu.jpeg'
image=np.array(Image.open(im_path))

plt.figure(figsize=(16, 8))

plt.subplot(1,2,1)
plt.imshow(image)

image1=NN_interpolation(image,image.shape[0]*2,image.shape[1]*2)
#从array转换成image
image1=Image.fromarray(image1.astype('uint8')).convert('RGB')
image1.save('out.png')
plt.subplot(1,2,2)
plt.imshow(image1)

长宽各放大2倍:可以看见放大的图像有点突兀。
在这里插入图片描述

在这里插入图片描述


双线性插值

在两个方向分别进行一次线性插值(首先在一个方向上使用线性插值,然后再在另一个方向上使用线性插值执行双线性插值。尽管每个步骤在采样值和位置上都是线性的,但是插值总体上不是线性的,而是在采样位置上是二次的。)并且选择x方向和y方向进行插值的先后顺序没有唯一标准。

由单线性插值出发:
在这里插入图片描述
在这里插入图片描述

上述的式子都是直线的斜率,经过移项得到y的式子

推广到双线性插值
在这里插入图片描述

**目的:**求P点的像素值
**已知:**我们已知了Q11、Q21、Q12、Q22、P的坐标。也知道Q11、Q21、Q12、Q22的像素值。 先用关于X的单线性插值去分别计算R1、R2的像素值:

在这里插入图片描述

关于上面的式子,我还想了一下,因为Q11和Q21都是在同一个y轴上的,他怎么能由斜率相等得到一个式子呢?
后来我仔细观察发现,这不是简单的XOY坐标图,他是包含了灰度值的.

再使用关于y方向的单线性插值计算P点的像素值
在这里插入图片描述
到此就可以求出P点的像素值了


各种双线性插值的直观展示:
在这里插入图片描述


未完待更——



这篇关于图像采样python的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程