详解Python计算机视觉 图像扭曲(仿射扭曲)

时间:2021-05-22

对图像块应用仿射变换,我们将其称为图像扭曲(或者仿射扭曲)。该操作不仅经常应用在计算机图形学中,而且经常出现在计算机视觉算法中。

一、仿射变换原理

仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。对于三个点,仿射变换可以将一副图像进行扭曲,使得三对对应点对可以完美地匹配上。仿射变换具有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计算机视觉 图像扭曲(仿射扭曲)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章