详解Python计算机视觉 图像扭曲(仿射扭曲)
Python  /  管理员 发布于 7年前   309
对图像块应用仿射变换,我们将其称为图像扭曲(或者仿射扭曲)。该操作不仅经常应用在计算机图形学中,而且经常出现在计算机视觉算法中。
一、仿射变换原理
仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。对于三个点,仿射变换可以将一副图像进行扭曲,使得三对对应点对可以完美地匹配上。仿射变换具有6个自由度,有三个对应点对可以给出6个约束条件(对于这三个对应点对,x和y坐标必须都要匹配)
仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射。由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
二、图像中的图像
仿射扭曲简单的一个例子是,将图像或者图像的一部分放置在另一幅图像中,使得它们能够和指定的区域或者标记物对齐。
以下是代码:
from PCV.geometry import warp, homographyfrom PIL import Imagefrom 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]# 计算HH = homography.Haffine_from_points(tp2,fp2)im1_t = ndimage.affine_transform(im1,H[:2,:2],(H[0,2],H[1,2]),im2.shape[:2])# 三角形的alphaalpha = 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]]# 计算HH = 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])# 三角形的alphaalpha = warp.alpha_for_triangle(tp2,im2.shape[0],im2.shape[1])im4 = (1-alpha)*im3 + alpha*im1_tsubplot(144)imshow(im4)axis('off')show()
在实验过程中,也出现了一些问题。
问题一:
为解决问题,先去PCV\PCV-master\PCV\geometry中找到wary.py和homegraphy.py文件,把print后面的语句都加上括号。但是在检查了好几遍括号以后,问题都没有解决,所以重装了一次pcv以后,异常就解决了。(重装pcv的方法在前面的博客有记录)
问题二:
因为是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计算机视觉 图像扭曲(仿射扭曲)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号