详解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 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
Python过滤列表用法实例分析
Apr 29 Python
神经网络相关之基础概念的讲解
Dec 29 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
由面试题加深对Django的认识理解
Jul 19 Python
python找出因数与质因数的方法
Jul 25 Python
python实现与redis交互操作详解
Apr 21 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
python遍历路径破解表单的示例
Nov 21 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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写的小东西
2006/12/06 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
php生成圆角图片的方法
2015/04/07 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
python 自动提交和抓取网页
2009/07/13 Python
win与linux系统中python requests 安装
2016/12/04 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Django REST framework 视图和路由详解
2019/07/19 Python
keras 读取多标签图像数据方式
2020/06/12 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python 绘制国旗的示例
2020/09/27 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
数据库连接池的工作原理
2012/09/26 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
餐厅采购员岗位职责
2014/03/06 职场文书
文化产业实施方案
2014/06/07 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python