python 图像插值 最近邻、双线性、双三次实例


Posted in Python onJuly 05, 2020

最近邻:

import cv2
import numpy as np
def function(img):
 height,width,channels =img.shape
 emptyImage=np.zeros((2048,2048,channels),np.uint8)
 sh=2048/height
 sw=2048/width
 for i in range(2048):
  for j in range(2048):
   x=int(i/sh)
   y=int(j/sw)
   emptyImage[i,j]=img[x,y]
 return emptyImage
 
img=cv2.imread("e:\\lena.bmp")
zoom=function(img)
cv2.imshow("nearest neighbor",zoom)
cv2.imshow("image",img)
cv2.waitKey(0)

双线性:

import cv2
import numpy as np
import math
def function(img,m,n):
 height,width,channels =img.shape
 emptyImage=np.zeros((m,n,channels),np.uint8)
 value=[0,0,0]
 sh=m/height
 sw=n/width
 for i in range(m):
  for j in range(n):
   x = i/sh
   y = j/sw
   p=(i+0.0)/sh-x
   q=(j+0.0)/sw-y
   x=int(x)-1
   y=int(y)-1
   for k in range(3):
    if x+1<m and y+1<n:
     value[k]=int(img[x,y][k]*(1-p)*(1-q)+img[x,y+1][k]*q*(1-p)+img[x+1,y][k]*(1-q)*p+img[x+1,y+1][k]*p*q)
   emptyImage[i, j] = (value[0], value[1], value[2])
 return emptyImage
 
img=cv2.imread("e:\\lena.bmp")
zoom=function(img,2048,2048)
cv2.imshow("Bilinear Interpolation",zoom)
cv2.imshow("image",img)
cv2.waitKey(0)

双三次:

import cv2
import numpy as np
import math
 
def S(x):
 x = np.abs(x)
 if 0 <= x < 1:
  return 1 - 2 * x * x + x * x * x
 if 1 <= x < 2:
  return 4 - 8 * x + 5 * x * x - x * x * x
 else:
  return 0
def function(img,m,n):
 height,width,channels =img.shape
 emptyImage=np.zeros((m,n,channels),np.uint8)
 sh=m/height
 sw=n/width
 for i in range(m):
  for j in range(n):
   x = i/sh
   y = j/sw
   p=(i+0.0)/sh-x
   q=(j+0.0)/sw-y
   x=int(x)-2
   y=int(y)-2
   A = np.array([
    [S(1 + p), S(p), S(1 - p), S(2 - p)]
   ])
   if x>=m-3:
    m-1
   if y>=n-3:
    n-1
   if x>=1 and x<=(m-3) and y>=1 and y<=(n-3):
    B = np.array([
     [img[x-1, y-1], img[x-1, y],
      img[x-1, y+1],
      img[x-1, y+1]],
     [img[x, y-1], img[x, y],
      img[x, y+1], img[x, y+2]],
     [img[x+1, y-1], img[x+1, y],
      img[x+1, y+1], img[x+1, y+2]],
     [img[x+2, y-1], img[x+2, y],
      img[x+2, y+1], img[x+2, y+1]],
 
     ])
    C = np.array([
     [S(1 + q)],
     [S(q)],
     [S(1 - q)],
     [S(2 - q)]
    ])
    blue = np.dot(np.dot(A, B[:, :, 0]), C)[0, 0]
    green = np.dot(np.dot(A, B[:, :, 1]), C)[0, 0]
    red = np.dot(np.dot(A, B[:, :, 2]), C)[0, 0]
 
    # ajust the value to be in [0,255]
    def adjust(value):
     if value > 255:
      value = 255
     elif value < 0:
      value = 0
     return value
 
    blue = adjust(blue)
    green = adjust(green)
    red = adjust(red)
    emptyImage[i, j] = np.array([blue, green, red], dtype=np.uint8)
 
 return emptyImage
 
img=cv2.imread("e:\\lena.bmp")
zoom=function(img,1024,1024)
cv2.imshow("cubic",zoom)
cv2.imshow("image",img)
cv2.waitKey(0)

补充知识:最邻近插值法(The nearest interpolation)实现图像缩放

也称零阶插值。它输出的像素灰度值就等于距离它映射到的位置最近的输入像素的灰度值。但当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。

具体计算方法:对于一个目的坐标,设为 M(x,y),通过向后映射法得到其在原始图像的对应的浮点坐标,设为 m(i+u,j+v),其中 i,j 为正整数,u,v 为大于零小于1的小数(下同),则待求象素灰度的值 f(m)。利用浮点 m 相邻的四个像素求f(m)的值。

function re_im = nearest(im, p, q)
%最邻近插值法,输入目标图像和行缩放、纵缩放倍数
%ziheng 2016.3.27
[m,n] = size(im);
im_R = im(:,:,1);
im_G = im(:,:,2);
im_B = im(:,:,3);
l = round(m*p);
h = round(n*q)/3;
re_R = uint8(zeros(l,h));
re_G = uint8(zeros(l,h));
re_B = uint8(zeros(l,h));
for dstx = 1:l
 for dsty = 1:h
   srcx = max(1,min(m,round(dstx/p)));
   srcy = max(1,min(n/3,round(dsty/q)));
   re_R(dstx,dsty) = im_R(srcx,srcy);
   re_G(dstx,dsty) = im_G(srcx,srcy);
   re_B(dstx,dsty) = im_B(srcx,srcy);
 end
end
re_im = cat(3,re_R,re_G,re_B);
figure,imshow(re_im);

以上这篇python 图像插值 最近邻、双线性、双三次实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编写生成验证码的脚本的教程
May 04 Python
Python入门之modf()方法的使用
May 15 Python
python中list列表的高级函数
May 17 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
python实现AES加密解密
Mar 28 Python
Python3匿名函数lambda介绍与使用示例
May 18 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
python cv2.resize函数high和width注意事项说明
Jul 05 #Python
Python中flatten( ),matrix.A用法说明
Jul 05 #Python
python线性插值解析
Jul 05 #Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 #Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 #Python
Django --Xadmin 判断登录者身份实例
Jul 03 #Python
详解Python多线程下的list
Jul 03 #Python
You might like
php5.3 废弃函数小结
2010/05/16 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python File readlines() 使用方法
2018/03/19 Python
django中模板的html自动转意方法
2018/05/27 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
职业女性的职业规划
2014/03/04 职场文书
中学生寄语大全
2014/04/03 职场文书
车辆委托书范本
2014/10/05 职场文书
2014年度个人工作总结
2014/11/07 职场文书
教师辞职书范文
2015/02/26 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书