详解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调用C/C++动态链接库的方法详解
Jul 22 Python
python按照多个字符对字符串进行分割的方法
Mar 17 Python
在centos7中分布式部署pyspider
May 03 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
Python中偏函数用法示例
Jun 07 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Python实现京东秒杀功能代码
May 16 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 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输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
php支付宝APP支付功能
2020/07/29 PHP
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python opencv之SURF算法示例
2018/02/24 Python
python事件驱动event实现详解
2018/11/21 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
Python中的heapq模块源码详析
2019/01/08 Python
Django之PopUp的具体实现方法
2019/08/31 Python
python将unicode和str互相转化的实现
2020/05/11 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
村委会主任先进事迹
2014/01/15 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
竞选学委演讲稿
2014/09/13 职场文书
运动会加油稿100字
2014/09/19 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
创业计划书之花店
2019/09/20 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
Mysql Show Profile
2021/04/05 MySQL