详解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基础入门之seed()方法的使用
May 15 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
python过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
详解用python实现简单的遗传算法
Jan 02 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
python实现超级马里奥
Mar 18 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
Python命令行参数定义及需要注意的地方
Nov 30 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
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
JS Timing
2007/04/21 Javascript
javascript+xml技术实现分页浏览
2008/07/27 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
python实现从wind导入数据
2019/12/03 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
预备党员思想汇报
2014/01/08 职场文书
迎新晚会邀请函
2014/02/01 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
郭明义电影观后感
2015/06/08 职场文书
任长霞观后感
2015/06/16 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
sass 常用备忘案例详解
2021/09/15 HTML / CSS