解决透视变换后图片信息丢失的问题

article/2025/9/26 3:10:45

        问题背景:最近在做图像拼接,思路是首先对输入的两幅图进行特征提取,提取的方法使用的是经典的SIFT(Scale-invariant feature transform)算法;然后进行特征匹配,匹配的思路是将一幅图中的特征点以K-D树的形式进行存储,再遍历另一幅图的所有特征点,在这颗K-D树中寻找与之匹配的特征点;匹配依据为最临近点与次临近点欧氏距离的比值,该比值人为设定,越小,匹配精度越高,相应的匹配点数目也会减少;利用欧氏距离匹配得到的结果,再使用RANASC(Random Sample Consensus)算法进行匹配点的筛选,滤除其中的错配点;使用上一步得到的较为精确的匹配点计算图2到图1的变换矩阵,该矩阵为3行3列,最后一个元素为1,除此之外共8个参数,因此,最少只需要四对匹配点就可以求得该矩阵;最后再基于上述变换矩阵对图2进行透视变换,把图1叠加到变换后的图2上,再做相应的融合,即完成了两幅图片的拼接。


        其实上述整个处理流程都是比较常见且通用的方法,具体的代码实现是参考一位博主关于SIFT的讲解。但是在使用过程中,还是出现了不少问题。此处主要介绍在根据变换矩阵进行透视变换时出现的图片信息丢失的问题。


       问题描述:先描述一下我遇到的问题和现象。由于暂时还没有理解到透视变换的本质,不过据我的实验效果,我推测是利用一个3*3的矩阵对图片中的每一个像素点求取一个新的坐标位置,再将原始坐标对应的RGB信息赋值到新坐标上,对于变换后可能产生的空隙采用插值的方式进行处理。标题中所谓的“图片信息丢失”问题,即在变换后,原图的某些区域被截取,不能展现完整的原图信息。具体效果如下图所示:


图1. 原图


图2. 透视变换后的结果

         图1是原始图片,根据求取的变换矩阵,对其进行变换后,得到如图2所示的结果。可以看到,图2右上角区域的部分信息已经被截取,造成信息丢失。


图3. 原始图片


图4. 变换后的图片

        上幅经过透视变换的图片左上角信息缺失。


         问题原因:通过计算原图四个角经透视变换后的新坐标,发现产生这一现象的原因是原坐标变换后的新坐标为负,而在一副图像中,通常以左上角的顶点作为原点(0,0),向右向下坐标都增大。因此为负数的坐标无法保存在变换后的图像中。例如原图左上角(0,0)变换后的坐标为(1000,-500),则该点就会被丢弃。


          解决方法:首先根据特征匹配阶段得到的变换矩阵计算原图四个角经过变换后的坐标,得到最小的X坐标minX以及最小的Y坐标minY,判断minX和minY是否小于零,如果其中一个数小于零,则表明会出现图像变换后信息丢失。现假设图像可以保存坐标点为负的信息,只是无法显示,如下图所示:

图5. 变换示意图

         上图示意了一幅图经过变换后的情况,整个矩形区域用于保存变换后的图像,蓝色部分是变换后能够看到的部分,绿色部分在Y方向上的坐标为负,不能看到,造成信息缺失。如果上述假设成立(即图片能保存坐标为负的绿色区域,只是无法显示),则我们可以通过将整幅图像向下平移,再将白色矩形增大,即可实现显示。但实际上,经过透视变换到目标图像后,坐标为负的区域已经被舍掉,因此实际的情况是下图所示:


图6. 信息缺失的图片

        因此我们无法通过透视变换后信息已经缺失的图片恢复全部信息。透视变换本质上时用一个矩阵将原图变换到目标图像上,既然我们不能从变换结果入手,那可以考虑改变变换矩阵或者原图,从而达到目的。因此有两种方法:

             (1)改变变换矩阵,原图不变;

             (2)先对原图进行平移,变换矩阵不变。

         本文中采用第一种方法。假设经过特征匹配求取的变换矩阵为H,原始图像某像素坐标为(x0, y0),改点经H变换后的坐标为(x, y),则有:

                                                             ,

                                                                 

          设 ,当MIn(y)或者Min(x)小于零时,则会出现信息丢失。此处以y坐标为例。当MIn(y)<0,则y-Min(y)>=0,所以有:

                                               

          可以看出,对图像在Y轴上进行平移,反应在变换矩阵上即是将H的第二行元素进行相应改变,改变后的变换矩阵为:

                                                      

       用次矩阵对原图进行透视变换,即可解决在Y方向上坐标为负的情况。同理,可以解决在X方向上的坐标为负的问题。对上文中的第一幅图进行变换后的结果如下图所示:


        通过上述方法,可以解决图片经过透视变换后信息丢失的问题。不过在具体操作时,给目标图片分配最够大的空间来放置变换后的图片也是必须的,否则,也可能出现类似的问题,甚至在程序运行时出现错误。


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

相关文章

wx.getImageInfo(Object object)获取图片信息

微信小程序第一周总结 总结人&#xff1a;陈曦 wx.getImageInfo(Object object)获取图片信息 在小程序/小游戏中使用网络相关的 API 时&#xff0c;每个微信小程序需要事先设置一个通讯域名&#xff0c;小程序只可以跟指定的域名与进行网络通信。包括普通 HTTPS 请求&#xff…

利用Python实现图片信息隐藏

最近上了一门信息隐藏的课,讲的关于技术层面的内容还是蛮多的,但是我也没记住几个。吭吭,言归正传,这两天要交大作业,自己手动实现一种图像信息隐藏,查了一番资料后,决定Python来做(主要是调用包方便),原理很简单,主要利用修改图像RGB通道的某一通道值来隐藏二维信息…

Python获取图片信息小栗子

1.首先我们需要先导入所需要的包&#xff0c;没有的话可以【 pip install ~】 来获取 import requests from lxml import etree 2.接下来我们要进行UA伪装&#xff0c;伪装的目的就是把电脑伪装成人 因为很多wangzahn都有反扒机制&#xff0c;不进行伪装的话根本就无法进行爬…

线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?

matlab中如何应用regress()函数进行线性回归分析&#xff1f;回归分析是研究一个随机变量与一个或多个普通变量之间的相关系的统计方法。如果做回归分析&#xff0c;有很多软件都已经封装好了的&#xff0c;我们只需直接调用就可以了。例如Matlab中的regress()就是做线性回归分…

[Matlab]篇----回归分析Matlab命令(regress篇)

[Matlab]篇—-回归分析Matlab命令&#xff08;regress篇) 一、简介 最近在做回归分析方面的东西&#xff0c;网上查阅相关资料&#xff0c;通过实际调试&#xff0c;对调试结果进行总结。 回归分析法指利用数据统计原理&#xff0c;对大量统计数据进行数学处理&#xff0c;并…

回归(Regression )

回归&#xff08;Regression &#xff09; 模型定义 Regression 就是找到一个函数 functionfunction &#xff0c;通过输入特征 x&#xff0c;输出一个数值 Scalar。 模型应用 股市预测&#xff08;Stock market forecast&#xff09; 输入&#xff1a;过去10年股票的变动、…

数学建模:回归分析——regress 函数

matlab中regress 函数 https://jingyan.baidu.com/article/ca41422f6777aa1eae99ed87.htmlhttps://jingyan.baidu.com/article/ca41422f6777aa1eae99ed87.html 结果 附录 1、数据文本&#xff1a;data1_1 0 68 110 121 23 111 100 37 66 110 12 169 50 46 87 117 16 155 25…

[matlab]多元线性回归-regress函数的用法

转载博客原址&#xff1a;https://blog.csdn.net/YinJianxiang/article/details/81464245 回归分析 回归分析 (英语&#xff1a;Regression Analysis) 是一种统计学上分析数据的方法&#xff0c;目的在于了解两个或多个变量间是否相关、相关方向与强度&#xff0c;并建立数学…

机器学习——regression

1 用线性回归找到最佳拟合直线 线性回归 优点&#xff1a;结果易于理解&#xff0c;计算上不复杂 缺点&#xff1a;对非线性的数据拟合不好 使用数据类型&#xff1a;数值型数据和标称型数据。 回归方程&#xff1a;是根据样本资料通过回归分析所得到的反映一个变量&#xff0…

回归问题(Regression)

Regression 前言Dependent vs. Explanatory VariablesHandle Numerical Labelssquared error和variance什么区别 Linear RegressionLinear Regression in 1 Dimension Least Squares &#xff08;最小二乘&#xff0c;重点&#xff09;Least Squares ObjectiveMinimizing a Dif…

Fama-Macbeth回归图形化:EAP.fama_macbeth.Fama_macbeth_regress.plot()

实证资产定价&#xff08;Empirical asset pricing&#xff09;已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍&#xff0c;也可以通过Pypi直接查看。 Pypi: pip install --upgrade EAP HomePage&#xff1a; EAP Empirical Asset Prici…

[MATLAB]一元线性回归(regress参数检验说明)

今天学习了统计回归模型&#xff0c;统计回归模型是基于统计理论建立的最基本最常用的一类数据驱动模型。本篇博文主要围绕regress函数的参数进行讲解&#xff01; 一元线性回归模型的概念 这也要从一个女装公司讲起&#xff01; 问&#xff1a;请用函数关系描述身高与腿长的…

matlab中的regress函数总结

clc cleardataxlsread(ty_num.xlsx); %第三列是全区&#xff1b;第四列是偶极子data1xlsread(w_E.xlsx); %第一列是w&#xff0c;第二列是东%设置x的值&#xff0c;第1列全为1 x(:,2)data(:,1); x(:,1)1;ydata1(:,3); [b,bint,r,rint,stats]regress(y,x);b的值为系数&#xff0…

回归(regression)

1. 回归&#xff08;regression&#xff09; 1.1 起源与定义 回归最早是被高尔顿提出的。他通过研究发现&#xff1a;如果父母都比较高一些&#xff0c;那么生出的子女身高会低于父母的平均身高&#xff1b;反之&#xff0c;如果父母双亲都比较矮一些&#xff0c;那么生出的子…

STATA regress回归结果分析

对于STATA回归结果以前一直不清不楚&#xff0c;每次都需要baidu一波&#xff0c;因此今天将结果相关分析记录下&#xff1a; 如上图 上面左侧的表是用来计算下面数据的&#xff0c;分析过程中基本不会用到 右侧从上往下 1.Number of obs 是样本容量 2.F是模型的F检验值&a…

MATLAB regress命令

1 regress命令 用于一元及多元线性回归&#xff0c;本质上是最小二乘法。在Matlab 命令行窗口输入help regress &#xff0c;会弹出和regress的相关信息&#xff0c;一一整理。 调用格式&#xff1a; B regress(Y,X)[B,BINT] regress(Y,X)[B,BINT,R] regress(Y,X)[B,BINT,R…

MATLAB回归分析命令——regress命令

题目 假设向量y[7613.51 7850.91 8381.86 9142.81 10813.6 8631.43 8124.94 9429.79 10230.81 10163.61 9737.56 8561.06 7781.82 7110.97]; x1[7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]; x2[16.22 16.85 17.93 17.28 17.23 17 19 18.22…

matlab中多元线性回归regress函数精确剖析(附实例代码)

matlab中多元线性回归regress函数精确剖析(附实例代码) 目录 前言 一、何为regress&#xff1f; 二、regress函数中的参数 三、实例分析 总结 前言 regress函数功能十分强大&#xff0c;它可以用来做多元线性回归分析&#xff0c;它不仅能得出线性回归函数中各个系数&#…

Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案

本文为原创&#xff0c;转载请注明出处。 昨天在ubuntu上安装完yar之后发现yar还是不能用&#xff0c;感觉有些不对劲。 通过在微博上请教 Laruence 大神和公司的大大之后&#xff0c;问题解决了&#xff0c;下面就来分享这一成果。 如果还没有做好安装工作&#xff0c;请看…

最新yar扩展安装和使用

先说windows客户端的安装 yar扩展下载地址&#xff1a;https://pecl.php.net/package/yar 下载对应的版本 点击DLL可以查看支持的PHP版本,我本地是phpstudy搭建的环境,php版本是7.19.nts 所以我下载了7.1 Non Thread Safe (NTS) x64 解压后里面的php_yar.dll和php_yar.pdb文件…