纹理映射

转载 2015年11月19日 21:00:41

(图像拼接的项目中要用到纹理映射,用opencv自带的cvwarpperspective太慢,考虑用查表方式的映射来改善)

百度到以下内容,备用:
转自:http://www.cnblogs.com/wangguchangqing/p/4039095.html

1.几何变换的基本概念

1.1 坐标映射关系

图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:

  1. 原图像任意像素计算该像素在变换后图像的坐标位置
  2. 变换后图像的任意像素在原图像的坐标位置

对于第一种计算,只要给出原图像上的任意像素坐标,都能通过对应的映射关系获得到该像素在变换后图像的坐标位置。将这种输入图像坐标映射到输出的过程称为“向前映射”。反过来,知道任意变换后图像上的像素坐标,计算其在原图像的像素坐标,将输出图像映射到输入的过程称为“向后映射”。但是,在使用向前映射处理几何变换时却有一些不足,通常会产生两个问题:映射不完全,映射重叠

  1. 映射不完全 
    输入图像的像素总数小于输出图像,这样输出图像中的一些像素找不到在原图像中的映射。 
    image 
    上图只有(0,0),(0,2),(2,0),(2,2)四个坐标根据映射关系在原图像中找到了相对应的像素,其余的12个坐标没有有效值。
  2. 映射重叠 
    根据映射关系,输入图像的多个像素映射到输出图像的同一个像素上。 
    image 
    上图左上角的四个像素(0,0),(0,1),(1,0),(1,1)都会映射到输出图像的(0,0)上,那么(0,0)究竟取那个像素值呢?

要解决上述两个问题可以使用“向后映射”,使用输出图像的坐标反过来推算改坐标对应于原图像中的坐标位置。这样,输出图像的每个像素都可以通过映射关系在原图像找到唯一对应的像素,而不会出现映射不完全和映射重叠。所以,一般使用向后映射来处理图像的几何变换。从上面也可以看出,向前映射之所以会出现问题,主要是由于图像像素的总数发生了变化,也就是图像的大小改变了。在一些图像大小不会发生变化的变换中,向前映射还是很有效的。

 

1.2.插值算法

对于数字图像而言,像素的坐标是离散型非负整数,但是在进行变换的过程中有可能产生浮点坐标值。例如,原图像坐标(9,9)在缩小一倍时会变成(4.5,4.5),这显然是一个无效的坐标。插值算法就是用来处理这些浮点坐标的。常见的插值算法有最邻近插值法、双线性插值法,二次立方插值法,三次立方插值法等。本文主要介绍最邻近插值和双线性插值,其他一些高阶的插值算法,以后再做研究。

  1. 最邻近插值 
    也被称为零阶插值法,最简单插值算法,当然效果也是最差的。它的思想相当简单,就是四舍五入,浮点坐标的像素值等于距离该点最近的输入图像的像素值。 
    image 
    上面的代码可以求得(x,y)的最邻近插值坐标(u,v)。 
    最邻近插值几乎没有多余的运算,速度相当快。但是这种邻近取值的方法是很粗糙的,会造成图像的马赛克、锯齿等现象。
  2. 双线性插值 
    它的插值效果比最邻近插值要好很多,相应的计算速度也要慢上不少。双线性插值的主要思想是计算出浮点坐标像素近似值。那么要如何计算浮点坐标的近似值呢。一个浮点坐标必定会被四个整数坐标所包围,将这个四个整数坐标的像素值按照一定的比例混合就可以求出浮点坐标的像素值。混合比例为距离浮点坐标的距离。 
    假设要求坐标为(2.4,3)的像素值P,该点在(2,3)和(3,3)之间,如下图 
    image u和v分别是距离浮点坐标最近两个整数坐标像素在浮点坐标像素所占的比例 
    P(2.4,3) = u * P(2,3) + v * P(3,3),混合的比例是以距离为依据的,那么u = 0.4,v = 0.6。 
    上面是只在一条直线的插值,称为线性插值。双线性插值就是分别在X轴和Y轴做线性插值运算。 
    下面利用三次的线性插值进行双相信插值运算 
    image 
    (2.4,3)的像素值 F1 = m * T1 + (1 – m) * T2 
    (2.4,4)的像素值 F2 = m * T3 + (1 – m ) * T4 
    (2.4,3.5)的像素值 F = n * F1 + (1 – n) * F2 
    这样就可以求得浮点坐标(2.4,3.5)的像素值了。 
    求浮点坐标像素F,设该浮点坐标周围的4个像素值分别为T1,T2,T3,T4,并且浮点坐标距离其左上角的横坐标的差为m,纵坐标的差为n。 
    F1 = m * T1 + (1 – m) * T2 
    F2 = m * T3 +  (1 – m) *T4 
    F = n * F1 + (1 – n) * F2 
    上面就是双线性插值的基本公式,可以看出,计算每个像素像素值需要进行6次浮点运算。而且,由于浮点坐标有4个坐标近似求得,如果这个四个坐标的像素值差别较大,插值后,会使得图像在颜色分界较为明显的地方变得比较模糊。

[图形学] 纹理映射原理详解

目录 1.标准纹理映射 2.投影纹理映射 3.立方体纹理映射 4.滤波与分级细化         为了获得更真实的细节,一张或多张纹理映射将会应用到物体的表面,正如下图所显示的。物...
  • ZJU_fish1996
  • ZJU_fish1996
  • 2016年08月26日 12:24
  • 5696

OpenGL学习脚印: 二维纹理映射(2D textures)

写在前面 前面两节介绍了向量和矩阵,以及坐标和转换相关的数学,再继续讨论模型变换等其他包含数学内容的部分之前,本节介绍二维纹理映射,为后面学习做一个准备。纹理映射本身也是比较大的主题,本节只...
  • ziyuanxiazai123
  • ziyuanxiazai123
  • 2016年05月20日 17:17
  • 15800

opengl纹理映射

  • 2013年06月17日 18:19
  • 7.73MB
  • 下载

深入探索透视纹理映射(下)

-潘宏 -2010年5月5日 -本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: popyy@netease.com   在上一篇文章中,我们探讨了学习透视...
  • cbbbc
  • cbbbc
  • 2016年05月30日 10:51
  • 889

立方体的纹理映射算法

  • 2009年10月29日 12:42
  • 284KB
  • 下载

深入探索透视纹理映射(上)

-潘宏-2010年5月3日-本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教-email: popyy@netease.com 在这篇文章中,我们将探讨图形流水线中另一个复杂的主题—...
  • popy007
  • popy007
  • 2010年05月04日 17:11
  • 15765

图像处理学习笔记之图像的几何变换(1)坐标映射

几何图像按照某种法则或规律变换成另一种几何图像的过程叫做图像的几何变换。图像的几何变换不改变图像像素值,只是将一幅图像中的位置坐标映射到另一幅图像中。常见的几何变换有平移、镜像、旋转、缩放、仿射等。图...
  • linshanxian
  • linshanxian
  • 2017年02月24日 11:23
  • 1103

创建图像映射

图像映射即一个图片的不同区域对应不同链接。图像映射分为: (1)服务器端图像映射:将点击的坐标发送给服务器,由服务器的脚本来决定。 (2)客户端图像映射:根据点击位置不同确定链接目的。通过后添加和...
  • qq_25178609
  • qq_25178609
  • 2016年03月25日 15:50
  • 490

纹理映射

纹理映射是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。 纹理映射是真实感图像制作的一个重要部分,运用它可以方便地制作出极具真实感的图形而不必花费很多时间考虑物体的表现细节。 然而纹理加载的...
  • yhhwatl
  • yhhwatl
  • 2016年12月21日 22:55
  • 380

opengl纹理与映射原理及案例资料

  • 2012年05月30日 09:24
  • 1021KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:纹理映射
举报原因:
原因补充:

(最多只允许输入30个字)