测试scipy.interpolate.interp2d对于低分辨率图像插值处理结果

简 介: 利用scipy.interpolate.interp2d可以对图像进行插值,获得图像在各个方向的渐进过度过程。这可以为后面在一些特征点进行超像素处理中提供更加精确光滑的数据处理过程。

关键词 插值interp2dscipyinterpolateinterp2d

 

interp2d函数
目 录
Contents
函数功能
函数参数
函数返回
举例
图像插值
插值图像
原始图像
插值图像
插值总结

 

§01 interp2d函数


1.1 函数功能

  根据 scipy.interpolate.interp2d 中对于interp2d的用法进行了介绍。

class scipy.interpolate.interp2d(x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=nan)

1.1.1 函数参数

  • x, y : array_like
      Arrays defining the data point coordinates.

  If the points lie on a regular grid, x can specify the column coordinates and y the row coordinates, for example:

x = [0,1,2]; y = [0,3]; z = [[1,2,3], [4,5,6]]
Otherwise, x and y must specify the full coordinates for each point, for example:

x = [0,1,2,0,1,2]; y = [0,0,0,3,3,3]; z = [1,2,3,4,5,6]
If x and y are multi-dimensional, they are flattened before use.

  • z : array_like
      The values of the function to interpolate at the data points. If z is a multi-dimensional array, it is flattened before use. The length of a flattened z array is either len(x)*len(y) if x and y specify the column and row coordinates or len(z) == len(x) == len(y) if x and y specify coordinates for each point.

  • kind : {‘linear’, ‘cubic’, ‘quintic’}, optional
      The kind of spline interpolation to use. Default is ‘linear’.

  • copy : bool, optional
      If True, the class makes internal copies of x, y and z. If False, references may be used. The default is to copy.

  • bounds_error : bool, optional
      If True, when interpolated values are requested outside of the domain of the input data (x,y), a ValueError is raised. If False, then fill_value is used.

  • fill_value : number, optional
      If provided, the value to use for points outside of the interpolation domain. If omitted (None), values outside the domain are extrapolated.

1.1.2 函数返回

  • values_x : ndarray, shape xi.shape[:-1] + values.shape[ndim:]
      Interpolated values at input coordinates.

1.2 举例

from scipy import interpolate
x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
f = interpolate.interp2d(x, y, z, kind='cubic')

▲ 图1.2.1 函数取值

▲ 图1.2.1 函数取值

▲ 图1.2.2 插值之后的图像

▲ 图1.2.2 插值之后的图像

xnew = np.arange(-5.01, 5.01, 1e-2)
ynew = np.arange(-5.01, 5.01, 1e-2)
znew = f(xnew, ynew)
plt.plot(x, z[0, :], 'ro-', xnew, znew[0, :], 'b-')
plt.show()

▲ 图1.2.3 对于x轴方面的插值结果

▲ 图1.2.3 对于x轴方面的插值结果

▲ 图1.2.4  插值前的函数

▲ 图1.2.4 插值前的函数

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *

from scipy import interpolate
from tqdm import tqdm

gifpath = '/home/aistudio/GIF'
if not os.path.isdir(gifpath):
    os.makedirs(gifpath)
gifdim = os.listdir(gifpath)
for f in gifdim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

theta = linspace(0, 2*pi, 50)
x = arange(-5.01, 5.01, 0.25)
y = arange(-5.01, 5.01, 0.25)
xx,yy = meshgrid(x,y)

z = sin(xx**2+yy**2 + t)
f = interpolate.interp2d(x,y,z, kind='cubic')

xxx = arange(-5.01, 5.01, 0.01)
yyy = arange(-5.01, 5.01, 0.01)
id = 0
for t in tqdm(theta):
    z = sin(xx**2+yy**2 + t)
    f = interpolate.interp2d(x,y,z, kind='cubic')
    zzz = f(xxx, yyy)
    plt.figure(figsize=(8,8))
    plt.imshow(zzz)
    savefile = os.path.join(gifpath, '%03d.jpg'%id)
    id += 1
    plt.savefig(savefile)
    plt.close()

▲ 图1.2.5  插值后的函数

▲ 图1.2.5 插值后的函数

 

§02 像插值


2.1 插值图像

  利用在 利用圆圈轮廓面积求取圆环半径:cv2.findContours, contourArea 抑菌圈金属模板扫描图片,通过 cv2.resize之后形成64×64的分辨率的图像。

2.1.1 原始图像

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import cv2
from scipy                  import interpolate

filename = '/home/aistudio/work/Scanner/ScanDiagBlock/img258.jpg'

img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray32 = cv2.resize(gray, (64,64))

plt.figure(figsize=(10,10))
plt.imshow(gray32)
plt.savefig('/home/aistudio/stdout.jpg')

▲ 图2.1.1 设置成分辨率为64×64图片

▲ 图2.1.1 设置成分辨率为64×64图片

2.1.2 插值图像

x = arange(64)
y = arange(64)
f = interpolate.interp2d(x,y,gray32, kind='cubic')

xx = arange(0, 64, 0.1)
yy = arange(0, 64, 0.1)
zz = f(xx, yy)
plt.figure(figsize=(10,10))
plt.imshow(zz)
plt.savefig('/home/aistudio/stdout.jpg')
(1)立方插值

▲ 图2.1.2 插值后的图像

▲ 图2.1.2 插值后的图像

(2)线性插值

▲ 图2.1.3 线性插值

▲ 图2.1.3 线性插值

(3)四次方插值

▲ 图2.1.4 四次方插值

▲ 图2.1.4 四次方插值

 

值总结 ※


  用scipy.interpolate.interp2d可以对图像进行插值,获得图像在各个方向的渐进过度过程。这可以为后面在一些特征点进行超像素处理中提供更加精确光滑的数据处理过程。


■ 相关文献链接:

● 相关图表链接:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST3.PY                     -- by Dr. ZhuoQing 2022-01-27
#
# Note:
#============================================================
from headm import *                 # =
import cv2
from scipy                  import interpolate
filename = '/home/aistudio/work/Scanner/ScanDiagBlock/img258.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray32 = cv2.resize(gray, (64,64))
plt.figure(figsize=(10,10))
plt.imshow(gray32)
plt.savefig('/home/aistudio/stdout.jpg')
#------------------------------------------------------------
x = arange(64)
y = arange(64)
f = interpolate.interp2d(x,y,gray32, kind='quintic')
 #------------------------------------------------------------
xx = arange(0, 64, 0.1)
yy = arange(0, 64, 0.1)
zz = f(xx, yy)
plt.figure(figsize=(10,10))
plt.imshow(zz)
plt.savefig('/home/aistudio/stdout.jpg')
#------------------------------------------------------------
#        END OF FILE : TEST3.PY
#============================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值