Approximation and prediction residual pyramids

知识请看课本,这里交流代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt#二维卷积操作
def correl2d(img, window):      #window表示滤波模板,img表示原始矩阵#获取模板的行和列m = window.shape[0]n = window.shape[1]#边界通过0灰度值填充扩展(在原来的基础上扩大m-1行,n-1列),保证图像大小不变img1 = np.zeros((img.shape[0]+m-1,img.shape[1]+n-1))#然后从扩充后的矩阵中截取和输入图像(矩阵)同样大小的一块儿,当然是从中间截取的img1[(m-1)//2:(img.shape[0]+(m-1)//2),(n-1)//2:(img.shape[1]+(n-1)//2)] = imgimg2 = np.zeros(img.shape)#逐像素移动模板for i in range(img2.shape[0]):for j in range(img2.shape[1]):temp = img1[i:i+m,j:j+n]img2[i,j] = np.sum(np.multiply(temp,window))return img2  def Downsampler2d(img, factor=2):#默认下采样因子为 2factor = int(factor)height = img.shape[0]width = img.shape[1]newimg = np.zeros([int(width / factor), int(height / factor)])for i in range(newimg.shape[0]):for j in range(newimg.shape[1]):newimg[i,j] = img[factor*i, factor*j]return newimgdef Upsampler2d(img, factor=2):factor = int(factor)height = img.shape[0]width = img.shape[1]newimg = np.zeros([int(width * factor), int(height * factor)])for i in range(height):for j in range(width):newimg[i*factor, j*factor] = img[i, j]return newimgdef get_bilinear_filter(filter_shape, upscale_factor):##filter_shape is [width, height, num_in_channels, num_out_channels]kernel_size = 2*upscale_factor - upscale_factor%2### Centre location of the filter for which value is calculatedif kernel_size % 2 == 1:centre_location = upscale_factor - 1else:centre_location = upscale_factor - 0.5bilinear = np.zeros([filter_shape[0], filter_shape[1]])for x in range(filter_shape[0]):for y in range(filter_shape[1]):value = (1 - abs((x - centre_location)/ upscale_factor)) * (1 - abs((y - centre_location)/ upscale_factor))bilinear[x, y] = valuereturn bilinearGaussianLowpass = np.array([[1, 2, 1],[2, 4, 2],[1, 2, 1]]) / 16img_a1 = cv2.imread('Fig0704_Vase.tif',0)img_a2 = correl2d(img_a1, GaussianLowpass)
img_a2 = Downsampler2d(img_a2)img_a3 = correl2d(img_a2, GaussianLowpass)
img_a3 = Downsampler2d(img_a3)img_a4 = correl2d(img_a3, GaussianLowpass)
img_a4 = Downsampler2d(img_a4)
#show
# plt.figure('original')
# plt.imshow(img_a1, cmap='gray')
# plt.axis('off') #去掉坐标轴
# plt.figure('approximation pyramid')
# plt.imshow(img_a2, cmap='gray')
# plt.axis('off') #去掉坐标轴
# plt.show
#save
plt.imsave('approximation pyramid_a2.jpg', img_a2, cmap='gray')
plt.imsave('approximation pyramid_a3.jpg', img_a3, cmap='gray')
plt.imsave('approximation pyramid_a4.jpg', img_a4, cmap='gray')Bilinear_Interpolation_Filter = get_bilinear_filter((4,4), 2)
LaplacianFilter = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])img_b3 = Upsampler2d(img_a4)
img_b3 = correl2d(img_b3, Bilinear_Interpolation_Filter)
img_b3 = correl2d(img_b3, LaplacianFilter)img_b2 = Upsampler2d(img_a3)
img_b2 = correl2d(img_b2, Bilinear_Interpolation_Filter)
img_b2 = correl2d(img_b2, LaplacianFilter)img_b1 = Upsampler2d(img_a2)
img_b1 = correl2d(img_b1, Bilinear_Interpolation_Filter)
img_b1 = correl2d(img_b1, LaplacianFilter)plt.imsave('Laplacian_pyramid_b3.jpg', img_b3, cmap='gray')
plt.imsave('Laplacian_pyramid_b2.jpg', img_b2, cmap='gray')
plt.imsave('Laplacian_pyramid_b1.jpg', img_b1, cmap='gray')
  • 第一个函数为卷积操作,0填充,没有设置步长
  • 第二个和第三个函数是下采样和上采样函数,函数如课本一样
  • 第三个是获得双线性插值卷积核,这里获得的是(4,4)大小卷积核,详细讲解看:
    双线性插值(Bilinear Interpolation)
    结果
    近似金字塔







后面的结果不知道对吗,希望大家教一下

Python代码:数字图像处理(DIP)7.1.1图像金字塔example7.1相关推荐

  1. 第2章 Python 数字图像处理(DIP) --数字图像基础3 - 图像内插 - 最近邻内插 - 双线性插值 - 双三次内插 - 图像放大

    目录 图像内插 放大图像 图像内插 内插通常在图像放大.缩小.旋转和几何校正等任务中使用.内插并用它来调整图像的大小(缩小和放大),缩小和放大基本上采用图像重取样方法 最近邻内插,这种方法将原图像中最 ...

  2. 第2章 Python 数字图像处理(DIP) --数字图像基础2 - 图像感知要素 - 图像取样和量化 - 空间分辨率和灰度分辨率

    目录 图像感知与获取 一个简单的成像模型 图像取样和量化 空间分辨率和灰度分辨率 图像感知与获取 一个简单的成像模型 我们用形如 f(x,y)f(x,y)f(x,y) 的二维函数来表示图像.在空间坐标 ...

  3. 第1章 Python 数字图像处理(DIP) --绪论

    Python 数字图像处理 关于本专栏 此专栏为 Python 数字图像处理(DIP)(冈萨雷斯版),专栏里文章的内容都是来自书里,全部手打,非OCR,因为很多公式,都是用LaTex输入,力求更好看的 ...

  4. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  5. 数字图像处理——实验一 Python中数字图像处理的基本操作

    数字图像处理--实验一 Python中数字图像处理的基本操作 一.实验目的 二.实验主要仪器设备 三.实验原理 3.1 数字图像的表示和类别 3.2 opencv-python图像文件格式 四.实验内 ...

  6. 数字图像处理笔记(一)——图像存储空间,分辨率,图像内插

    数字图像处理笔记(一)--图像存储空间,分辨率,图像内插 本系列笔记是笔者在学习冈萨雷斯<数字图像处理>第三版时做的总结,日后看的时候方便点,如果有幸得到大家的讨论,喜上眉梢. 本节参考书 ...

  7. 图像处理边缘增强matlab,数字图像处理实验 matlab 图像增强 边缘检测 图像操作.doc...

    数字图像处理实验 matlab 图像增强 边缘检测 图像操作 实验1 点运算和直方图处理 实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理. ...

  8. 第2章 Python 数字图像处理(DIP) --数字图像基础5 -- 算术运算、集合、几何变换、傅里叶变换等

    目录 数字图像处理所有的基本数字工具介绍 算术运算 集合运算和逻辑运算 空间运算 向量与矩阵运算 图像变换 图像和随机变量 数字图像处理所有的基本数字工具介绍 算术运算 # 相加 img_ori = ...

  9. 数字图像处理与python实现_数字图像处理学习(2)—— 图像直方图均衡与图像匹配(python实现)...

    数字图像处理学习(2)-- 直方图均衡与图像匹配 1. 直方图均衡(Histogram Equalization) 1.1 直方图均衡化概念 1.2 直方图均衡实现简单思路 1.3 直方图均衡实现代码 ...

  10. Python实现数字图像处理之5种彩色空间转换(单图+多图+视频)

    本文主要运用用Python代码实现了5种彩色空间之间的转换! 具体而言,包括: 1)RGB → CMY: 2)  CMY → RGB: 3)  RGB → HSI: 4)  HSI → RGB: 5) ...

最新文章

  1. 学计算机如何防辐射,长期对电脑怎么防辐射
  2. DIV CSS完美兼容IE6/IE7/FF的通用方法
  3. 算法—详细讲解单向循环链表的实现(python)
  4. python怎么实现检验_[python skill]利用python实现假设性检验方法
  5. 跨平台导PDF,结合wkhtmltopdf很顺手
  6. arduino使用oled代码_【惊不?】Arduino改造古董卡西欧计算器为作弊神器
  7. c语言搬山游戏,C语言实现搬山游戏代码解析
  8. 沈伟华:图神经网络的三连问
  9. 【云周刊】第148期:“盲人摸象、感而不动、雾里看花”,阿里闵万里谈城市大脑三大挑战...
  10. 如何删除计算机中的“天翼云盘”图标
  11. com.lowagie.text-2.1.7jar
  12. Android中将图片设为灰度(Kotlin)
  13. 3399 android root,RK3399 android8.1 app获取root权限
  14. linux 文件比较覆盖,Linux系统 wget 覆盖本地文件
  15. Java程序设置本地代理
  16. (神州优车)数据交换平台架构分享
  17. 育碧遭黑客攻击:用户账号被窃
  18. LoadRunner 回放出错
  19. 联想拯救者系统重装?不求人教程
  20. ABB机器人FTP传输机器人文件

热门文章

  1. python3邮件_python3使用SMTP发送HTML格式邮件
  2. XMLHttpRequest
  3. [Jobdu] 题目1214:丑数
  4. ASP.NET MVC学前篇之Ninject的初步了解
  5. 使用windows调用Linux远程桌面
  6. uwsgi安装过程中遇到的问题
  7. 海洋女神建新installshield交流群了,原来的老群都满了,请加新群哦,记得认真填写验证信息...
  8. Linux下网络流量实时监控工具 大全
  9. 页面生成周期中的两个Application池的详情小弟了解
  10. 地址栏射击游戏!对,你没看错,就是在地址栏上玩的游戏,有图有真相!