Matlab 透视变换 原理及其代码实现

article/2025/10/3 20:34:23

一、透视变换内涵

透视变换本质:将一个图像投影到新的视平面

透视变换思路:

  1. 将二维坐标系转换为三维坐标系。

  2. 将三维坐标系投影到新的二维坐标系。

该过程属于非线性变换过程,一个菱形在经过非线性变换后得到一个四边形,但是不在平行。

透视变换又可以称为投影变换,仿射变换属于透视变换的特例。透视变换能够保持直线性,即原图中的直线,在经透视变换后仍为直线。

二、透视变换的详细原理

总体思路:

  1. 求出投影映射矩阵:根据4个基准坐标对

  2. 反求出源图像坐标:根据映射矩阵内参数,求一个二元一次方程组
    在这里插入图片描述

透视变换矩阵变换公式为:
在这里插入图片描述
另外定点,即移动到的目标点为:
在这里插入图片描述

其中透视变换矩阵:
![在这里插入图片描述](https://img-blog.csdnimg.cn/9b20c20e806c4db0b9399097be916b0f.pn

要移动的点,即源目标点(可以手动标记)为:
在这里插入图片描述

这是一个从二维空间变换到三维空间的转换,因为图像在二维平面,故除以Z,(X’;Y’;Z’)表示图像上的点:
在这里插入图片描述
另a33=1,展开上面的公式,可得到一个点为:
在这里插入图片描述
四个点,即可得到8个方程,便可求解出透视变换矩阵A。
在这里插入图片描述

三、Matlab代码实现

clear all;
close all;
clc;img= imread('1.jpg');
img= rgb2gray(img);
imshow(mat2gray(img));
[M N] = size(img);dot=ginput();       %取四个点,依次是左上,右上,左下,右下,这里我取的是书的四个角
w=round(sqrt((dot(1,1)-dot(2,1))^2+(dot(1,2)-dot(2,2))^2));     %从原四边形获得新矩形宽
h=round(sqrt((dot(1,1)-dot(3,1))^2+(dot(1,2)-dot(3,2))^2));     %从原四边形获得新矩形高y=[dot(1,1) dot(2,1) dot(3,1) dot(4,1)];        %四个原顶点
x=[dot(1,2) dot(2,2) dot(3,2) dot(4,2)];%这里是新的顶点,我取的矩形,也可以做成其他的形状
%大可以原图像是矩形,新图像是从dot中取得的点组成的任意四边形.:)
Y=[dot(1,1) dot(1,1) dot(1,1)+h dot(1,1)+h];     
X=[dot(1,2) dot(1,2)+w dot(1,2) dot(1,2)+w];B=[X(1) Y(1) X(2) Y(2) X(3) Y(3) X(4) Y(4)]';   %变换后的四个顶点,方程右边的值
%联立解方程组,方程的系数
A=[x(1) y(1) 1 0 0 0 -X(1)*x(1) -X(1)*y(1);             0 0 0 x(1) y(1) 1 -Y(1)*x(1) -Y(1)*y(1);x(2) y(2) 1 0 0 0 -X(2)*x(2) -X(2)*y(2);0 0 0 x(2) y(2) 1 -Y(2)*x(2) -Y(2)*y(2);x(3) y(3) 1 0 0 0 -X(3)*x(3) -X(3)*y(3);0 0 0 x(3) y(3) 1 -Y(3)*x(3) -Y(3)*y(3);x(4) y(4) 1 0 0 0 -X(4)*x(4) -X(4)*y(4);0 0 0 x(4) y(4) 1 -Y(4)*x(4) -Y(4)*y(4)];fa=inv(A)*B;        %用四点求得的方程的解,也是全局变换系数
a=fa(1);b=fa(2);c=fa(3);
d=fa(4);e=fa(5);f=fa(6);
g=fa(7);h=fa(8);rot=[d e f;a b c;g h 1];        %公式中第一个数是x,Matlab第一个表示y,所以我矩阵1,2行互换了pix1=rot*[1 1 1]'/(g*1+h*1+1);  %变换后图像左上点
pix2=rot*[1 N 1]'/(g*1+h*N+1);  %变换后图像右上点
pix3=rot*[M 1 1]'/(g*M+h*1+1);  %变换后图像左下点
pix4=rot*[M N 1]'/(g*M+h*N+1);  %变换后图像右下点height=round(max([pix1(1) pix2(1) pix3(1) pix4(1)])-min([pix1(1) pix2(1) pix3(1) pix4(1)]));     %变换后图像的高度
width=round(max([pix1(2) pix2(2) pix3(2) pix4(2)])-min([pix1(2) pix2(2) pix3(2) pix4(2)]));      %变换后图像的宽度
imgn=zeros(height,width);delta_y=round(abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])));            %取得y方向的负轴超出的偏移量
delta_x=round(abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])));            %取得x方向的负轴超出的偏移量
inv_rot=inv(rot);for i = 1-delta_y:height-delta_y                        %从变换图像中反向寻找原图像的点,以免出现空洞,和旋转放大原理一样for j = 1-delta_x:width-delta_xpix=inv_rot*[i j 1]';       %求原图像中坐标,因为[YW XW W]=fa*[y x 1],所以这里求的是[YW XW W],W=gy+hx+1;pix=inv([g*pix(1)-1 h*pix(1);g*pix(2) h*pix(2)-1])*[-pix(1) -pix(2)]'; %相当于解[pix(1)*(gy+hx+1) pix(2)*(gy+hx+1)]=[y x],这样一个方程,求y和x,最后pix=[y x];if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=M && pix(2)<=Nimgn(i+delta_y,j+delta_x)=img(round(pix(1)),round(pix(2)));     %最邻近插值,也可以用双线性或双立方插值end  end
end
figure;
imshow(uint8(imgn));

四、效果展示

在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/KIhlu1xd.shtml

相关文章

art上的透视变换

透视变换 透视变换在比赛中非常重要&#xff0c;我们在地图识别与微调时用到了透视变换。 1. 微调上的使用 在车抵达目标板附件时&#xff0c;摄像头检测到目标板后&#xff0c;可以通过透视变换确定图片距车的位置。这里需要强调下&#xff0c;我们使用的透视变换与四轮使用…

透视变换(Perspective Transform)

**透视变换(Perspective Transform)**是将图片投影到一个新的视角或平面&#xff0c;变换公式如下。 在之前的章节中我们学习过仿射变换(affine transform) 可以看到&#xff0c;而射变换的变换矩阵是3x2的变换矩阵。和仿射变换不同的是&#xff0c;透视变换的变换矩阵是一个3…

仿射变换与透视变换区别

仿射变换 1) 用途 旋转 (线性变换)&#xff0c;平移 (向量加)&#xff0e;缩放(线性变换)&#xff0c;错切&#xff0c;反转 2) 方法 仿射变换是一种二维坐标到二维坐标之间的线性变换&#xff0c;它保持了二维图形的“平直性”&#xff08;直线经过变换之后依然是直线&…

用OpenCV进行透视变换

1. 引言 欢迎回来&#xff01;今天我们将焦点聚焦在我在图像处理中最喜欢的话题之一——透视变换。使用该技术&#xff0c;可以灵活方便的实现各种各样好玩的特效。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 单应矩阵 我们首先展开对单应矩阵的深入研究。作为图…

透视变换矩阵详解

原文&#xff1a; OpenGLProjection Matrix (songho.ca) 看这篇文章主要是因为对learnopengl深度测试这一章的些许疑惑&#xff0c; 为什么在片段着色器中&#xff0c;存储的每一个fragment的深度值并不是线性分布&#xff1f;体现在想要显示出场景里面所有物体的深度值&#x…

【图像处理】透视变换 Perspective Transformation

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane)&#xff0c;也称作投影映射(Projective Mapping)。通用的变换公式为&#xff1a; u,v是原始图片左边&#xff0c;对应得到变换后的图片坐标x,y,其中。变换矩阵可以拆成4部分&#xff0c;表示…

Opencv中的透视变换

唐宇迪视频学习笔记 def four_point_transform(image, pts):# 获取输入坐标点rect order_points(pts)(tl, tr, br, bl) rect# 计算输入的w和h值widthA np.sqrt(((br[0] - bl[0]) ** 2) ((br[1] - bl[1]) ** 2))widthB np.sqrt(((tr[0] - tl[0]) ** 2) ((tr[1] - tl[1])…

OpenCV中的透视变换介绍

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达本文转自&#xff1a;opencv学堂 透视变换原理 透视变换是将图像从一个视平面投影到另外一个视平面的过程&#xff0c;所以透视变换也被称为投影映射&#xff08;Project…

仿射变换和透视变换

透视变换 1. 欧式变换2. 相似变换3. 仿射变换4. 射影变换/透视变换概念OpenCV 实现 3D 空间存在集中变换方式。 1. 欧式变换 欧式变换保持了向量的长度和夹角&#xff0c;相当于我们把一个刚体原封不动地进行了移动或旋转&#xff0c;不改变它自身的样子&#xff0c;其矩阵表…

基于OpenCV的图像透视变换详解(从理论到实现再到实践)

一、仿射变换与透视变换 一直无法理解两种仿射变换与透视变换的区别&#xff0c;因此详细学习了两种变换的具体细节&#xff0c;重新书写了公式&#xff0c;并给出自己的一些看法。 1.仿射变换 可以认为&#xff0c;仿射变换是透视变换的一种特例。 仿射变换是一种二维坐标到二…

透视变换(perspective transformation)

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane)&#xff0c;也称作投影映射(Projective Mapping)。如下图所示 透视变换 透视变换的原理和公式推导见如下博客 【图像处理】透视变换 Perspective Transformation 【OpenCV】透视变换 Perspe…

OpenCV 透视变换

OpenCV 透视变换 1. 简介2. 仿射变换2.1. 平移2.2. 旋转2.3. 放缩2.4. 错切2.5. 仿射变换 3. 透视变换 1. 简介 汽车的360度全景影像&#xff0c;从拍照视角变成鸟瞰图 这种变换常常用到透视变换 在了解透视变换前&#xff0c;需要了解一下其他的变换&#xff0c;包括 平移&am…

深入探索透视投影变换

深入探索透视投影变换 最近更新&#xff1a;2013年11月22日 -Twinsen编写 -本人水平有限&#xff0c;疏忽错误在所难免&#xff0c;还请各位数学高手、编程高手不吝赐教 -email: popyynetease.com -B站专栏&#xff1a; https://b23.tv/oWsl6PD 透视投影是3D固定流水线的重要组…

图像透视变换原理及实现

上篇博客讲解了图像的仿射变换原理及实现&#xff0c;这篇博客讲讲透视变换的原理和实现&#xff0c;透视变换也叫投影变换&#xff0c;仿射变换是透视变换的特例。主要是透视变换能保持“直线性”&#xff0c;即原图像里面的直线&#xff0c;经透视变换后仍为直线。下面给出数…

(十四)透视变换

透视变换(Perspective Transformation) 一 图像变换与平面坐标系的关系 1、旋转&#xff1a; 2、平移&#xff1a; 3、刚体变换 4、仿射变换 5、投影变换&#xff08;单应性变换&#xff09; 6 总结一下&#xff1a; 1、刚体变换&#xff1a;平移旋转&#xff0c;只改变物体…

图像畸变矫正——透视变换

图像畸变矫正——透视变换 由于相机制造精度以及组装工艺的偏差引入的畸变&#xff0c;或者由于照片拍摄时的角度、旋转、缩放等问题&#xff0c; 可能会导致原始图像的失真&#xff0c;如果要修复这些失真&#xff0c;我们可以通过透视变换&#xff0c;对图像进行畸变矫正。 …

透视变换原理实例代码详解

导读 在上篇文章中&#xff0c;我们介绍了仿射变换&#xff0c;我们只需要通过一个两行三列的变换矩阵M就能够对图像实现平移、缩放、翻转、旋转操作。我们发现这些变换其实都属于平面变换&#xff0c;如果我们想要进行空间变换呢&#xff1f; 将上图的扑克牌单独提取出来&am…

[解疑]图像、矩阵的二维空间变换

本文经过参考多个文章整理而成&#xff0c;感谢各位博主的无私分享。 综述 图像&#xff08;2维平面&#xff09;到图像&#xff08;2维平面&#xff09;的四种变换包括&#xff1a;等距变换&#xff0c;相似变换&#xff0c;仿射变换&#xff0c;投影变换。对图像的几何变换…

数字图像处理(入门篇)十四 透视变换

目录 一 透视变换 二 实践 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果图 一 透视变换 现实生活中的空间是三维的&#xff0c;图像中的物体存在近大远小的特征&#xff0c;这种畸变仿射变换不能矫正。因此&#xff0c;我们需要使用到三维空间的变化&…

【图像理论】透视变换

透视变换&#xff1a; 定义&#xff1a;本质是将图像投影到一个新的视平面。仿射变换可以理解为透视变换的特殊形式。利用透视中心、像点、目标点三点共线的条件&#xff0c;按透视旋转定律使承影面&#xff08;透视面&#xff09;绕迹线&#xff08;透视轴&#xff09;旋转某…