ASCII Art之tone-based生成方法实现
前言
大家好我又回来了……其实开这个系列完全是为了熟悉Markdown语法。但是想了想还是有必要有始有终,于是准备按计划填坑。这篇文章讲解tone-based方法生成ascii图像的实现。
1.tone-based方法原理
我们知道图像的像素点是由RGB三种颜色构成的,而在上古时代还没有发明彩色显示屏的时候。图像都是以灰度图的方式进行呈现,每个像素点只包含亮度一个信息。
我们谈论像素的时候,谈论的是一个抽象的概念,它是对图像基本单位的一种抽象。事实上,不同的设备,像素点的大小,排布方式,亮度来源都不同。而由于真正决定人眼感受到的清晰度的指标是视野的张角,同样的像素分辨率在不同的距离,给人的感受可能不同。当离得足够远时,即使很大尺寸的像素点也可以很“清晰”;距离越近,看到的图像就越模糊。介于人对于低分辨率图像的识别能力还是比较强的。这就构成了tone-based方法生成ascii art的理论基础。即使用单个字符代替像素点,来表示降采样后的图像(低分辨率版本的图像)。
评价一张图像,我们除了要看其分辨率大小,还要看它的颜色鲜艳程度。对于灰度图来说,我们需要关心的是像素点能够表达多少种不同的亮度,也即灰度等级。那么随之而来的一个问题是,ascii字符能够表示多少灰度等级?或者说,同种颜色打印的ascii字符为什么能够表示不同的灰度?首先我们来看一张图。