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 却要好。
左边图是使用 Anti-Grain Geometry 渲染的,右边的是使用 Adobe SVG Viewer。
使用5级去锯齿的 Adobe SVG Viewer 渲染时,狮子的须会看起来很平滑。至少在 CRT 显示器上看起来是这样的。但是,大形图像的渲染仍然告诉我们,Adobe Viewer 的去锯齿分层是不够的。
显然, Anti-Grain Geometry 可以渲染得更好,但是,对于像素覆盖值到亮度之间的对应依赖使用一个简单的线性关系并不是最好的,需要进行校正。在颜色管理中,这被称为 Gamma 校正。为了进行 gamma 校正,我使用了一个 256 个值的数组,可以给出对应覆盖值的像素的亮度。如果数组中的值都等于它们的索引值,比如,0,1,2,3,4……也就等于是没有进行 Gamma 校正。这个数组可以使用任何方法来进行计算,但最简单的方法是使用 B-Spline 曲线,通过两个相关点和四个象限(kx1, ky1, kx2, ky2)来决定它的形状。 我创建了一个程序,使用特殊的 gamma 校正控制来计算 gamma 值数组中的各个值。这个程序中画了 6 个非常扁的椭圆,6个小圆圈,以及一些其它的用来测试去锯齿效果的图像。
无 gamma 校正
控制点可以在它们所在的象限内移动,下面的图在 CRT 显示器上看起来的效果就要好多了。
为 CRT 进行的 gamma 校正
对于某些的宽度和亮度,我们可以获得最好的显示显示效果,但这种情况并不通用。上面的例子中,就是一种虽然对某些参数下并非最好效果,但在平均情况下效果很好的(Gamma校正方法),在CRT显示器上是如此,在LCD上也是如此。下面是一些其它形状gamma典型的例子。
另外,gamma 校正的效果与图像的内容关系也很密切。上面例子中,那些画椭圆效果很好的gamma值,描画文字时效果却不太好。文字需要比较明显的边界形状,但大形的几何图像用平滑的边界看起来更好些。
下面在 CRT 上这是使用了 gamma 校正之后画的狮子,现在它看起来要比 Adobe SVG Viewer 看起来要好了。
你可以下载这个程序:Gamma Control。
这个程序的源代码在分布的程序包的 example 目录中可以找到。
分享到:
相关推荐
"agg2.5源码+文档" 是一个开源项目,主要提供了一个强大的、跨平台的2D图形库。这个库的名称"agg"是“Anti-Grain Geometry”的缩写,它是一个高度优化的C++库,专为高质量的矢量图形渲染而设计。这个库的版本号2.5...
3. **色彩管理**:AGG提供了全面的色彩空间支持,包括RGB、CMYK、灰度等多种颜色模型,以及色彩转换和色彩空间校正功能。 4. **光栅化引擎**:AGG的光栅化引擎能高效地将矢量图形转化为像素,同时支持不同的渲染...
AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要设计用于高性能的图形绘制和处理。这个图形库是由Evgeny Panasenkov开发,它以C++编写,提供了高度优化的算法来处理图形操作,如线条绘制、曲线绘制、...
•如果要用AGG的控件和窗体,要加入[AGG]\src\ctrl\*.cpp和[AGG]\src\platform\<OS>\*.cpp,头文件在[AGG]\include\ctrl和[AGG]\include\platform里 •如果要用到TrueType字体显示,要加入[AGG]\font_win32_tt目录下...
在计算机图形学中,抗锯齿处理是提高图像质量的关键技术之一。agg库采用先进的算法,提供平滑的边缘渲染,即使在高分辨率下也能保持良好的视觉效果,有效减少像素化的现象,使得线条和曲线看起来更加自然流畅。 **2...
AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要用于生成高质量的矢量图形。在Windows平台上,如果你需要使用AGG库进行图形处理或开发项目,你可能会遇到如何在Visual Studio 2013环境下编译和集成AGG...
AGG(Anti-Grain Geometry)是一个开源的二维图形绘制库,主要由C++编写,设计目标是提供高质量、高性能的2D图形渲染。在"agg二维开发入门例程"中,你将学习如何利用AGG进行图形绘制,以及如何进行开发工作。这个...
AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要设计用于高性能的图形绘制和处理。它提供了一套高效的算法和数据结构,用于实现高质量的矢量图形和位图图形操作。在MFC(Microsoft Foundation Classes...
Agg-Sharp 是 Agg 的 .NET 移植。AGG 是一个开源的二维图形引擎。它提供一套结合了亚像素(subpixel accuracy)技术与反走样(anti-aliasing)技术的图形算法,实现高效率、高质量的二维图形处理功能。AGG 的另一个...
Agg(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要由Alexander Romanov开发,用于创建高质量的矢量图形。这个库提供了一种高效且灵活的方式来处理图形,适用于各种应用程序,如图像处理软件、游戏开发、...
1、支持ALPHA、GAMMA等变色处理,以及用户自定义的变色处理; 2、支持任意2D图形变换; 3、支持SVG和PostScript描述,适于网上图形生成; 4、支持高质量的图形处理,支持反走样插值等高级功能; 5、支持...
### AGG学习手册知识点解析 #### 一、AGG简介 **AGG**(Anti-Grain Geometry)是一个开源的2D图形库,以其高效、跨平台的特点而著称。相较于GDI+(Graphics Device Interface Plus),AGG不仅提供了更为灵活的编程...
AGG(Anti-Grain Geometry)是一个强大的2D图形库,设计用于在各种操作系统和硬件平台上提供高效且高质量的2D渲染。这个开源项目由Maxim Shemanarev开发,其核心理念是通过数学和算法优化来实现无锯齿、高精度的图形...
扫描线光栅化器是AGG中的核心组件之一,负责将图形数据转化为一组水平扫描线。 - **扫描线** (`Scanline`):表示图像中的每一行像素。 - **头文件**:`agg_scanline_u.h` - **类型**:`agg::scanline_u8` - **...
在MFC中进行图形绘制时,通常可以使用两种图形库:GDI(Graphics Device Interface)和AGG(Anti-Grain Geometry)。本篇文章将深入探讨这两种图形库在MFC环境下的应用及其特性。 首先,GDI是Windows操作系统内建的...
AGG,全称为“Anti-Grain Geometry”,是一款开源的2D图形渲染库,专为生成高质量、抗锯齿的图像而设计。它提供了一种高效且灵活的方式来创建和操作图形,尤其适用于需要高精度和高性能的场景,比如专业级的图形设计...
一个很优秀的2D图形引擎. Anti-Grain Geometry (AGG) - Version 2.5 A high quality rendering engine for C++ Copyright (C) 2002-2006 Maxim Shemanarev
"AGG Lite",这个标题暗示我们关注的是一个轻量级的图形绘制库,可能是一个专为嵌入式系统或资源有限的环境设计的版本。AGG,全称Anti-Grain Geometry,是一个著名的C++矢量图形库,用于高质量的2D图形渲染。它以其...
agg_v2.0.0.apk
- `apply`: 相比之下,`apply`更加**通用**,它可以应用于整个DataFrame或其任何子部分,并执行任意的Python或NumPy函数,甚至用户自定义函数(UDF)。`apply`并不局限于聚合,它允许对数据进行更复杂的操作,如...