详解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实现的udp协议Server和Client代码实例
Jun 04 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
用Python实现KNN分类算法
Dec 22 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
django自带调试服务器的使用详解
Aug 29 Python
Django继承自带user表并重写的例子
Nov 18 Python
Python random库使用方法及异常处理方案
Mar 02 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
如何使用Tkinter进行窗口的管理与设置
Jun 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
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
python计算最大优先级队列实例
2013/12/18 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
解读! Python在人工智能中的作用
2017/11/14 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
大学生蛋糕店创业计划书
2014/01/13 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
政协委员个人总结
2015/03/03 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers