Python计算机视觉 图像扭曲(仿射扭曲)
对图像块应用仿射变换,我们将其称为图像扭曲(或者仿射扭曲)。该操作不仅经常应用在计算机图形学中,而且经常出现在计算机视觉算法中。
一、仿射变换原理
仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。对于三个点,仿射变换可以将一副图像进行扭曲,使得三对对应点对可以完美地匹配上。仿射变换具有6个自由度,有三个对应点对可以给出6个约束条件(对于这三个对应点对,x和y坐标必须都要匹配)
仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射。由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
二、图像中的图像
仿射扭曲简单的一个例子是,将图像或者图像的一部分放置在另一幅图像中,使得它们能够和指定的区域或者标记物对齐。
以下是代码(代码参考同学博客 https://blog.csdn.net/weixin_43843780/article/details/88672426 ):
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()
实验运行结果:
在实验过程中,也出现了一些问题。
问题一:
为解决问题,先去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计算机视觉 图像扭曲(仿射扭曲)相关推荐
- Python计算机视觉——图像到图像的映射
Python计算机视觉--图像到图像的映射 文章目录 Python计算机视觉--图像到图像的映射 写在前面 1 单应性变换 1.1 直接线性变换算法 1.2 仿射变换 2 图像扭曲 2.1 图像中的图 ...
- Python计算机视觉——图像搜索
文章目录 第七章--图像搜索 一.前期准备知识 1.基于内容的图像检索 2.视觉单词 二.图像搜索 流程1 流程2 流程3 三.使用几何特性对结果排序 第七章--图像搜索 主要内容:利用文本挖掘技术对 ...
- Python计算机视觉——图像内容分类
文章目录 第八章 图像内容分类 (一)K邻近分类法(KNN) (二)贝叶斯分类器 (三)支持向量机 (四)光学字符识别 第八章 图像内容分类 本章介绍图像分类和图像内容分类算法. 先介绍一些简单而有效 ...
- 【python】图像映射:单应性变换与图像扭曲
[python]图像映射:单应性变换与图像扭曲 单应性变换(Homography) 图像扭曲(仿射变换) 图中图 分段仿射扭曲 单应性变换(Homography) 单应性变换(Homography)即 ...
- python图像的几何运算_python中图像的几何扭曲
我想用python对图像执行几何变换,沿着给定的曲线"拉直"或校正图像.似乎scikit图像ProjectiveTransform()和{}对于这一点非常好,但是文档很少.我遵循了 ...
- python计算机视觉学习第三章——图像到图像的映射
目录 引言 一. 单应性变换 1.1 直接线性变换算法 1.2 仿射变换 二. 图像扭曲 2.1 图像中的图像 2.2 分段仿射扭曲 2.2 图像配准 三.创建全景图 3.1 RANSAC(随机一致性 ...
- Python计算机视觉编程学习笔记 三 图像到图像的映射
图像到图像的映射 (一)单应性变换 1.2 仿射变换 (二)图像扭曲 2.1 图像中的图像 2.2 图像配准 (三)创建全景图 3.1 RANSAC 3.2 拼接图像 (一)单应性变换 单应性变换是将 ...
- Python计算机视觉编程第三章——图像到图像的映射
Python计算机视觉编程 图像到图像的映射 (一)单应性变换 1.1 直接线性变换算法 1.2 仿射变换 (二)图像扭曲 2.1 图像中的图像 2.2 图像配准 (三)创建全景图 3.1 RANSA ...
- 三、【python计算机视觉编程】图像到图像的映射
图像到图像的映射 (一)单应性变换 (1)直接线性变换算法(DLT) (2)仿射变换(affine) (二)图像扭曲 (1)图像中的图像 (2)分段仿射扭曲 (3)图像配准 (三)创建全景图 (1)R ...
- python计算机视觉编程——立体图像之计算视差图
计算视差图 一.立体图像 1.1概念 1.2关于图像配准算法 二.立体重建之计算视差图 2.1归一化及算法概念 2.2匹配流程 三.实验测试 3.1实验要求 3.2实验代码 3.3实验结果分析 3.4 ...
最新文章
- Python pandas
- linux ubuntu 虚拟机中配置samba的实现文件共享的方法
- wireshark的Random packet generator是什么
- NYOJ 762 第k个互质数(二分 + 容斥)
- git lfs的安装和使用详细案例
- php模板初级教程,风格模板初级不完全修改教程
- 在将hibernate的session托管给spring过程中的问题
- springboot情操陶冶-@SpringBootApplication注解解析
- android 图片弹跳效果,设置点的弹跳效果
- 证券计算机行业研究,20210630-首创证券-计算机行业深度报告:物联网,研究框架.pdf...
- 解决办法!!!!UnsupportedClassVersionError Unsupported major.minor version 52.0
- JVM垃圾收集算法及垃圾收集器
- 答题系统 html源码,答题系统.html
- 数学杂记(1)一些无处安放的数学推导
- [terry笔记]Python字符串
- vmware中linux连接不上wifi
- 用纯CSS3实现QQ LOGO
- cv::omni::StereoCalibrate 源码解析 (一) —— 单目标定
- android elevation 白色,关于android:elevation的疑问
- 【STM8L】STM8L之timer2定时中断
热门文章
- 无线网卡连接internet,有线网卡向另一台电脑分享网络(笔记本当有线路由器)...
- 【IOS】获取iOS设备唯一标识的演进UDID, MAC Address,UUID,IDFA,IDFV,OpenUDID
- ntds(600)ntdsa:系统错误1453配额不足及恢复过程记录
- 闹钟函数alarm()的解释与实践
- 【工具】用PPT排版打印海报时图片分辨率问题
- 软件测试设计之——场景设计法,判定表法
- 使用Zack.EventBus 对rabbitMQ简化操作
- PMP分享 | 脚踏实地,仰望星空
- 如何安装浏览器插件,一篇文章全搞定
- 五十条参透世间尘世的话语