详解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 解决中文写入Excel时抛异常的问题
May 03 Python
Python Pandas数据结构简单介绍
Jul 03 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python 数据提取及拆分的实现代码
Aug 26 Python
Python图片的横坐标汉字实例
Dec 04 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
python 下划线的不同用法
Oct 24 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
python 高阶函数简单介绍
Feb 19 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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修改session_id示例代码
2014/01/08 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
临床医学专业毕业生的自我评价
2013/10/17 职场文书
打架检讨书500字
2014/01/29 职场文书
员工安全生产承诺书
2014/05/22 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
个人承诺书格式范文
2015/04/29 职场文书
海洋天堂观后感
2015/06/05 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫