`
liyiwen007
  • 浏览: 105674 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[翻译]AGG 之 Gamma 校正

阅读更多

Gamma Correction

Using Gamma Correction in Anti-Aliasing

原文地址:http://www.antigrain.com/research
/gamma_correction/index.html#PAGE_GAMMA_CORRECTION

翻译:唐风

我的插嘴:继续翻译 AGG 官方网上的文档,原因有二:一是因为 AGG 作者写的东西都和 AGG 的实现有点关系,学习他写的文档是理解代码最好的途径之一。二是喜欢 AGG 作者做事的风格,可以感觉得到那种精益求精的追求。可惜的是 AGG 就这么停止了开发,好在留下的代码和文档已经够让我学一阵子了。

 


 

去锯齿是很复杂困难的。它的困难之处不仅仅在于算法上,也在于图像的视觉效果是与显示设备有关的。去锯齿的图像在 CRT 显示器和 LCD 显示器上的效果是不一样的。通常,这是一门叫颜色管理(Color Management)的科学(或许应该叫艺术)。Anti-Grain Geometry 使用的是一种尽量让我们达到最好效果的去锯齿方法。渲染的过程中会计算每个边界像素的覆盖值,这个值会反应成去锯齿的级别(Anti-Aliasing levels)。 Anti-Aliasing Geometry 使用 256 级,这对于任何实际用途来说都已经足够了,(这种详细的分级产生的效果)比大部分5级去锯齿的软件要好,比如 Adobe的大部分产品,以及 True-Type 的字体渲染器等。我非常确定我使用的渲染方法能给出最好的效果。但当我试着使用 Anti-Grain Geometry 和 Adobe SVG Viewer 去渲染同一个图片时,我发现 Adobe SVG Viewer 虽然只用了5级的去锯齿层级,但效果有时候看起来要比 Anti-Grain Geometry 却要好。

gamma_lion1   gamma_lion2

左边图是使用 Anti-Grain Geometry 渲染的,右边的是使用 Adobe SVG Viewer。

 


 

使用5级去锯齿的 Adobe SVG Viewer 渲染时,狮子的须会看起来很平滑。至少在 CRT 显示器上看起来是这样的。但是,大形图像的渲染仍然告诉我们,Adobe Viewer 的去锯齿分层是不够的。

gamma_lion1e  gamma_lion2e

 


 

gamma

显然, Anti-Grain Geometry 可以渲染得更好,但是,对于像素覆盖值到亮度之间的对应依赖使用一个简单的线性关系并不是最好的,需要进行校正。在颜色管理中,这被称为 Gamma 校正。为了进行 gamma 校正,我使用了一个 256 个值的数组,可以给出对应覆盖值的像素的亮度。如果数组中的值都等于它们的索引值,比如,0,1,2,3,4……也就等于是没有进行 Gamma 校正。这个数组可以使用任何方法来进行计算,但最简单的方法是使用 B-Spline 曲线,通过两个相关点和四个象限(kx1, ky1, kx2, ky2)来决定它的形状。 我创建了一个程序,使用特殊的 gamma 校正控制来计算 gamma 值数组中的各个值。这个程序中画了 6 个非常扁的椭圆,6个小圆圈,以及一些其它的用来测试去锯齿效果的图像。

 


 

gamma1

无 gamma 校正

 


 

控制点可以在它们所在的象限内移动,下面的图在 CRT 显示器上看起来的效果就要好多了。

gamma2

为 CRT 进行的 gamma 校正

 


 

对于某些的宽度和亮度,我们可以获得最好的显示显示效果,但这种情况并不通用。上面的例子中,就是一种虽然对某些参数下并非最好效果,但在平均情况下效果很好的(Gamma校正方法),在CRT显示器上是如此,在LCD上也是如此。下面是一些其它形状gamma典型的例子。

gamma3

gamma4

gamma5

 

 

 


 

 

另外,gamma 校正的效果与图像的内容关系也很密切。上面例子中,那些画椭圆效果很好的gamma值,描画文字时效果却不太好。文字需要比较明显的边界形状,但大形的几何图像用平滑的边界看起来更好些。

 


 

下面在 CRT 上这是使用了 gamma 校正之后画的狮子,现在它看起来要比 Adobe SVG Viewer 看起来要好了。

gamma_lion3   gamma_lion3e

你可以下载这个程序:Gamma Control。

这个程序的源代码在分布的程序包的 example 目录中可以找到。

分享到:
评论

相关推荐

    agg-2.5 AGG是一个开源、高效的跨平台2D图形库

    •如果要用AGG的控件和窗体,要加入[AGG]\src\ctrl\*.cpp和[AGG]\src\platform\<OS>\*.cpp,头文件在[AGG]\include\ctrl和[AGG]\include\platform里 •如果要用到TrueType字体显示,要加入[AGG]\font_win32_tt目录下...

    Agg的.NET移植Agg-Sharp.zip

    Agg-Sharp 是 Agg 的 .NET 移植。AGG 是一个开源的二维图形引擎。它提供一套结合了亚像素(subpixel accuracy)技术与反走样(anti-aliasing)技术的图形算法,实现高效率、高质量的二维图形处理功能。AGG 的另一个...

    agg 开源的、高效的2D图形库

    1、支持ALPHA、GAMMA等变色处理,以及用户自定义的变色处理; 2、支持任意2D图形变换; 3、支持SVG和PostScript描述,适于网上图形生成; 4、支持高质量的图形处理,支持反走样插值等高级功能; 5、支持...

    一个AGG的测试事例

    AGG测试,一个AGG的测试事例。一个GDI和AGG在MFC下使用的例子。

    agg2.5源码+文档

    开源跨平台2d图形库,agg2.5源码+文档

    2d图形开发库agg

    2d图形开发库AGG,跨平台渲染库,C源代码

    AGG图形库资料

    保存&分享AGG图形库相关资料,文档+2.5源码

    agg二维开发入门例程

    agg二维绘图工具源码及入门例程及安装开发入门

    Agg学习资料

    包括: 基于AGG算法库的通用图形接口设计.pdf AGG绝好资料.doc 介绍和推荐AGG.doc

    agg-2.5.zip

    一个很优秀的2D图形引擎. Anti-Grain Geometry (AGG) - Version 2.5 A high quality rendering engine for C++ Copyright (C) 2002-2006 Maxim Shemanarev

    agg在windows平台编译

    AGG在windows系统visual studio 2013平台编译及开发;已经上传了编译成功的AGG.lib, 使用时将include文件夹添加到链接库即可。

    agg-2.5 2D图形库

    agg为开源的高效跨平台2D图形开发库,内部包含了大量的GDI图形绘制源码和示例!

    AGG 官方用户手册

    1,AGG官方用户手册 2,英文原版 3,精心编辑完整索引 4,mnorst出品,必属佳作

    agg_svg_viewer补丁包

    AGG是一个开源的二维图形引擎,它提供了一个功能有限的SVG解析、渲染工具svg_viewer。我对svg_viewer做了如下改进: - 支持解析 、<ellipse> 元素,以及<rect> 的 rx、ry 属性(圆角矩形)。 - 支持格式为 rgb(ddd...

    agg2_lite_agg_

    AGG Lite

    Agg在Windows下的编译 字符集 Unicode

    Agg在Windows下的编译与使用 AGG(Anti-Grain Geometry)是一个开源免费的图形库。 官网地址: www.antigrain.com 环境: Win10 x64 Visual Studio 2013 字符集 Unicode 主要是编译称为Lib库,然后提供给其他程序...

    agg_v2.0.0.apk

    agg_v2.0.0.apk

    agg-2.4-2.1.i386.rpm

    ( agg-2.4-2.1.i386.rpm )

    用AGG实现高质量图形输出.zip

    用AGG实现高质量图形输出.zip,AGG图像引擎介绍

    agg学习手册

    学习agg的好文档,详细介绍了AGG的图形变换流程,很好的学习手册

Global site tag (gtag.js) - Google Analytics