光栅算法

许多图形是通过光栅显像给用户的,将图像作为像素的阵列,

光栅设备

光栅设备可被分为以下几个层次

  1. 输出

    • 显示:(透射型)液晶显示器LCD (自发光)发光二极管显示LED
    • 拷贝:喷墨打印机(二进制)热升华打印机(连续可调)
  2. 输入
    • 二维数组输入:数码相机
    • 一维数组输入:平板扫描仪

显示设备

  1. 现有显示器,放映机等都是基于固定像素阵列的,分为自发光:直接控制发出光的量;透射型:改变能通过它的光的量。因此透射型显示需要一个光源来照亮它。
  2. 自发光显示,每个像素是由一个或更多发光二极管组成的,它可以根据流过它的电流大小发出不同亮度的光。显示的像素被分为三个独立控制的子像素,在一定距离之外看的时候,就分别不出独立的子像素而是呈现出三个子像素混合过的颜色。
  3. LCD是透射型显示,液晶可以通过施加的电压来使其分子结构向通过它的光的偏振方向旋转,电压影响旋转的程度。在LCD像素后面有一层偏振膜,被偏振光照亮 。像素前面的第二层偏振膜反射垂直朝向偏振光。如果施加的电压是默认的,液体中间的晶体层不会改变极化方式,所有的光都被阻挡了,像素处于“关闭”(最小强度)状态。如果设定高电压那么液晶将向偏振方向旋转90度,所有的光通过像素的背面将并从前面逃脱,像素完全“开启”。而设置中间电压,液晶将向偏振方向部分旋转,使前偏振器部分阻挡光,光会在中间强度。LCD在每个像素内都有红色,绿色和蓝色子像素,是三个独立的像素,上面有红色,绿色和蓝色滤色片。

像素 图形与几何

光栅图像是一个大的像素数组,我们用光能量的二维分布:从显示器发出的光是关于显示器上位置的函数;落到相机传感器上的光是关于传感器平面上位置的函数。我们可以将图像抽象成 I ( x , y ) : R − V I(x,y):R-V I(x,y):R−V R属于矩形上的二元组几何,而V是像素可能取值的值集。最简单的情况是灰度图,V属于正实数集合,矩形上每点只有亮度而没有颜色。
但是光栅化图像是如何把离散的像素映射连续的图像上的呢?相机或扫描仪像素是像素点周围平均颜色的量度,实际上是图像上颜色的一个平均,这被称作是采样点,简单来说, 如果像素的值是x,这意味着图像上这一网格点临近地区的值为x。
我们需要用实际的二维屏幕坐标来表示像素的位置,且用整数点阵作为像素的中心

由于像素占用一定的空间区域,如果一个图像有 n x n_x nx​行 n y n_y ny​列,故最终的矩形面积为 R = [ − 0.5 , n x − 0.5 ] × [ − 0.5 , n y − 0.5 ] R=[-0.5,n_x-0.5]\times[-0.5, n_y-0.5] R=[−0.5,nx​−0.5]×[−0.5,ny​−0.5]

像素的值

像素的值应当是浮点数,一个浮点数代表灰度图,三个代表RGB图像,我们使用32-bit浮点数来存储它,我们经常使用这个格式,因为精度不错,但是这格式有太多像素,每个像素占用空间太大,故需要太多存储空间,为了更快速显示图片,我们需要把范围减小,尽管光的亮度在物理上是无限的,但是放到显示设备上,它是有上限的,取决于设备允许的最大值。故在8位图中,像素值为 0 , 1 255 … 254 255 , 1 0,\frac{1}{255} \dots \frac{254}{255}, 1 0,2551​…255254​,1 用浮点数存储的图像有更宽的像素值范围,我们称其为HDR图像,而用整数存储的称其为LDR图像。一些典型图像存储格式如下:

  • 1-bit 灰度图 文本和其他不需要中间灰色的图
  • 8-bit 固定范围RGB web和email用图
  • 8/10-bit 固定范围RGB 电脑显示用
  • 12/14-bit 固定范围RGB 相机的RAW格式
  • 16-bit 固定范围RGB 专业摄影用途
  • 16-bit 固定范围灰度 医学影像
  • 16-bit 半精度浮点RGB HDR图像 实时渲染的中间格式
  • 32-bit 浮点数RGB 通用的软件渲染和处理HDR图像的格式
    减少像素精度有两种后果,首先对固定像素范围图像编码时,可能会将超出表示范围的像素值截断;还可能在色彩平滑过渡区域产生因可用颜色范围不足而产生的色带。

显示器亮度与gamma值

现代显示器将输入像素的值转换为亮度级别,没有亮度为0的点,因为屏幕会反射光。需要注意的是,显示器对输入的响应是非线性的,如果输入0 0.5 1.0 显示器可能显示亮度为0 0.25 1.0,这一非线性的特性的近似描述用gamma值表示, I n t e n s i t y = ( M a x I n t e n s i t y ) a γ Intensity=(Max Intensity)a^\gamma Intensity=(MaxIntensity)aγ a是输入的值,如果显示器的gamma值为2,输入a为0.5 那么显示亮度为0.25 ,我们可以通过给予a=0.5 来近似测量gamma值,如果我们知道了gamma值,就可以对a进行gamma校正 a ′ = a 1 γ a' = a^{\frac{1}{\gamma}} a′=aγ1​

Alpha合成

把前景物体和背景物体混合的最重要部分是像素混合,它表明了有百分之多少的像素被前景图层覆盖了,如果想把前景颜色和背景颜色混合 c = α c f + ( 1 − α ) c b c = \alpha c_f + (1-\alpha)c_b c=αcf​+(1−α)cb​ 对于不透明的前景图层,说明前景覆盖了 α \alpha α 不部分的颜色,剩余部分 a − α a-\alpha a−α覆盖着背景颜色,对于透明图层,说明前景遮挡了 1 − α 1-\alpha 1−α的背景色,自己贡献了 α \alpha α的颜色来替代被遮挡的部分

a代表了在灰度图种,多少像素会被存储,同时也可以是RGB图中的第四频道,即RGBA 图,每个像素会占用32bits

图像存储

大多RGB图 每个频道占用8bit 这会造成一个百万像素的图片会占用很大的空间,所以我们用一些无损的或者有损的存储格式

  • jpeg 有损压缩存储格式,基于人类视觉阈值来压缩图片,对于自然图片效果较耗
  • tiff 无损压缩8/16bit 的RGB图
  • ppm 无损 未压缩格式,直接存储8-bitRGB图
  • png 无损格式

对于简单的应用,我们倾向直接使用ppm格式,可以直接使用数组来写入像素值。

计算机图形(Cha.3 光栅化)相关推荐

  1. WebGL光栅化流水线

    三种图元 Point Line Triangle WebGL绘制流程 准备数据阶段:提供顶点坐标.索引(三角形绘制顺序).uv(决定贴图坐标).法线(决定光照效果),以及各种矩阵(比如投影矩阵) 生成 ...

  2. OpenGL中着色器,渲染管线,光栅化

    https://www.zhihu.com/question/29163054 光栅(shan一声)化(Rasterize/rasteriztion). 这个词儿Adobe官方翻译成栅格化或者像素化. ...

  3. 4、计算机图形学——光栅化、抗锯齿、画家算法和深度缓冲算法(Z-buffer)

    一.光栅化(Rasterization) 1.1.概念 光栅raster这个词就是德语中屏幕的意思,光栅化的意思就是将图像绘制在屏幕上进行显示. 1.2.三角形光栅化过程简述 首先,为什么要以三角形的 ...

  4. 复杂多边形光栅化算法

    虽然已经一年多没有维护gbox这个图形库项目了,最近确实时间不够用... 今年的重点是把xmake彻底正好,至少在架构和大功能(包依赖管理)上,要完全落实下来,后期就是零散的维护和插件功能扩展了.. ...

  5. 【转】光栅化操作阶段

    1.从顶点处理进入硬件处理阶段,在这里,先将顶点组装成图元,再将各个图元光栅化为片元集合. 2.光栅化过程:剪裁操作.透视除法.背面剔除操作.视口转换已经扫描转换. 3.剪裁操作:三角形与视椎体空间关 ...

  6. 【转】直线光栅化算法-Bresenham算法

    [转]直线光栅化算法-Bresenham算法 https://blog.csdn.net/cjw_soledad/article/details/78886117 posted on 2019-03- ...

  7. OpenGL保守光栅化

    OpenGL保守光栅化 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <stdio.h> #include "GL/glu ...

  8. matlab z变换离散化_用C++编写一个简单的光栅化渲染器:3D篇

    3D光栅化与2D光栅化在图元绘制方面差别并不大,3D光栅化主要是多了很多坐标系(Local,world,View...),除此外遮挡算法和裁剪算法也会稍微复杂一些. 本篇文章的重点就主要集中在各种坐标 ...

  9. 谈谈Hybird3D中的光栅化优化

    看到空明流转分享了他的SALVIA 0.5.2优化谈,我也来说说Hybird3D中和光栅化相关的一些优化技术. Hybird3D的设计目标是打造一款准实时的软件高质量渲染器,采用了光栅化和光线跟踪混合 ...

最新文章

  1. Nat. Methods | 学习微生物与代谢产物之间相互作用的神经网络
  2. 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
  3. OpenStack的部署T版(九)——控制台部署
  4. oracle10g优化器默认,Oracle10g数据库优化实用心得小结
  5. mac编辑器coda使用小贴条
  6. ASP.NET Core中使用令牌桶限流
  7. 许多参数和丢失的信息
  8. 设计计算机程序时 要考虑计算的过程,算法和程序设计练习题复习课程(6页)-原创力文档...
  9. dir612路由器虚拟服务器设置,dir612虚拟服务器设置
  10. POJ 1159 - Palindrome 优化空间LCS
  11. 网络与并行计算机,并行计算机系统结构网络版 白中英,杨旭东编著.pdf
  12. ubuntu-16.04安装程序报错 you might want to run 'apt-get -f install' to correct these
  13. centos下安装JAVA开发工具(1)------JDK
  14. 18 Strings for Mac(Xcode文件翻译工具)
  15. 印象笔记 离线版_印象笔记离线版
  16. 《南风窗》长篇报道:仇恨引爆悲剧
  17. 《全职高手》人物词频分析和词云图片生成
  18. 梨子的小白英语职业口语笔记(一)
  19. 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
  20. 安装deepin微信报错: dpkg: 依赖关系问题使得 deepin.com.wechat:i386 的配置工作不能继续 解决办法如下:

热门文章

  1. uniapp简单生成海报
  2. Android项目:手机安全卫士(12)—— 通讯卫士之电话短信黑名单设置与拦截
  3. 模拟器(duckstation, citra,yuzu,ryujinx)便携绿色化的设置方法
  4. Linux下Oracle中文数据显示为倒着的问号?(已解决)
  5. Hive Catalog
  6. 如何用计算机名查看是否正确,IP能访问和计算机名不能访问解决办法
  7. prometheus监控cup_prometheusCPU资源监控实例
  8. “长安蔚来”落户南京:李斌任董事长 杨放任CEO
  9. 代码审查插件:Devart Review Assistant Crack
  10. 【学习笔记】BZOJ4479 吃货jyy