详解Python计算机视觉 图像扭曲(仿射扭曲)


Posted in Python onMarch 27, 2019

对图像块应用仿射变换,我们将其称为图像扭曲(或者仿射扭曲)。该操作不仅经常应用在计算机图形学中,而且经常出现在计算机视觉算法中。

一、仿射变换原理

仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。对于三个点,仿射变换可以将一副图像进行扭曲,使得三对对应点对可以完美地匹配上。仿射变换具有6个自由度,有三个对应点对可以给出6个约束条件(对于这三个对应点对,x和y坐标必须都要匹配)

仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射。由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。

详解Python计算机视觉 图像扭曲(仿射扭曲)

二、图像中的图像

仿射扭曲简单的一个例子是,将图像或者图像的一部分放置在另一幅图像中,使得它们能够和指定的区域或者标记物对齐。
以下是代码:

from PCV.geometry import warp, homography
from PIL import Image
from pylab import *
from scipy import ndimage

# 仿射扭曲im1到im2的例子

im1 = array(Image.open('jida.jpg').convert('L'))
im2 = array(Image.open('beijing.jpg').convert('L'))
# 选定一些目标点
tp = array([[420,830,830,420],[400,350,1060,1000],[1,1,1,1]])
#标记物的坐标tp是用齐次坐标意义下的坐标表示的
#array为 第一张图片贴到第二张图片的四个角点的坐标
#tp = array([[675,826,826,677],[55,52,281,277],[1,1,1,1]])
im3 = warp.image_in_image(im1,im2,tp)
#image_in_image()函数的输入参数为两幅图像和一个坐标
figure()
gray()
subplot(141)
axis('off')
imshow(im1)
subplot(142)
axis('off')
imshow(im2)
subplot(143)
axis('off')
imshow(im3)

# 选定im1角上的一些点
m,n = im1.shape[:2]
fp = array([[0,m,m,0],[0,0,n,n],[1,1,1,1]])
# 第一个三角形
tp2 = tp[:,:3]
fp2 = fp[:,:3]
# 计算H
H = homography.Haffine_from_points(tp2,fp2)
im1_t = ndimage.affine_transform(im1,H[:2,:2],
(H[0,2],H[1,2]),im2.shape[:2])
# 三角形的alpha
alpha = warp.alpha_for_triangle(tp2,im2.shape[0],im2.shape[1])
im3 = (1-alpha)*im2 + alpha*im1_t
# 第二个三角形
tp2 = tp[:,[0,2,3]]
fp2 = fp[:,[0,2,3]]
# 计算H
H = homography.Haffine_from_points(tp2,fp2)
#Haffine_from_points()返回给定对应点对的最优仿射变换
im1_t = ndimage.affine_transform(im1,H[:2,:2],
(H[0,2],H[1,2]),im2.shape[:2])
# 三角形的alpha
alpha = warp.alpha_for_triangle(tp2,im2.shape[0],im2.shape[1])
im4 = (1-alpha)*im3 + alpha*im1_t
subplot(144)
imshow(im4)
axis('off')
show()

详解Python计算机视觉 图像扭曲(仿射扭曲)

在实验过程中,也出现了一些问题。

问题一:

详解Python计算机视觉 图像扭曲(仿射扭曲)

为解决问题,先去PCV\PCV-master\PCV\geometry中找到wary.py和homegraphy.py文件,把print后面的语句都加上括号。但是在检查了好几遍括号以后,问题都没有解决,所以重装了一次pcv以后,异常就解决了。(重装pcv的方法在前面的博客有记录)

详解Python计算机视觉 图像扭曲(仿射扭曲)

问题二:

详解Python计算机视觉 图像扭曲(仿射扭曲)

因为是matplotlib发生了异常,所以我把matplotlib卸载了(在终端输入pip uninstall matplotlib),然后重装matplotlib,我在终端输入pip install matplotlib以后,安装无法成功,显示Could not install packages due to an EnvironmentError: [Errno 13] Permission denied。

这时候解决方法如下,输入:pip install matplotlib --user便可成功安装(注意:是有两个-)。

详解Python计算机视觉 图像扭曲(仿射扭曲)

详解Python计算机视觉 图像扭曲(仿射扭曲)

解决以上两个问题后,代码可正常运行。

以上所述是小编给大家介绍的Python计算机视觉 图像扭曲(仿射扭曲)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python函数缺省值与引用学习笔记分享
Feb 10 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
Python上下文管理器和with块详解
Sep 09 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
解决python replace函数替换无效问题
Jan 18 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
Django自带的用户验证系统实现
Dec 18 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 #Python
Pandas读写CSV文件的方法示例
Mar 27 #Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 #Python
超简单使用Python换脸实例
Mar 27 #Python
python爬虫爬取微博评论案例详解
Mar 27 #Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 #Python
详解python中@的用法
Mar 27 #Python
You might like
php微信公众号开发之关键词回复
2018/10/20 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
angularjs指令之绑定策略(@、=、&)
2017/04/13 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
原生js生成图片验证码
2020/10/11 Javascript
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
大数据分析用java还是Python
2020/07/06 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
高中军训第一天感言
2014/03/06 职场文书
技校毕业生自荐信
2014/06/03 职场文书
承诺书样本
2014/08/30 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
2015年公司新年寄语
2014/12/08 职场文书
python缺失值的解决方法总结
2021/06/09 Python
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL