可视计算概论课程Lab1

可视计算概论课程Lab1

  • 前言
  • Image Dithering
    • 引言
    • Uniform Random
    • Blue Noise
    • Ordered
    • Error Defuse
  • Image Filtering
    • 引言
    • Blur
    • Edge Detection
  • Image Inpainting
  • Line Drawing
  • Triangle Drawing
  • Image Supersampling
      • rate=1
      • rate=5
  • Bezier Curve

前言

Lab1作为让大家认识计算机可视化的入门级别Lab,许多方法都是比较片面的应用,而不深究其中的原理下面就做一个Lab1的report,或者说是回顾。

Image Dithering

引言

这一部分主要需要你实现四个函数,分别为Uniform Random, Blue Noise, Ordered和Error Defuse。
可视计算概论课程Lab1_第1张图片可视计算概论课程Lab1_第2张图片

Uniform Random

这里主要就是调用C++标准库函数random和cime,从而生成均匀分布在(-1, 1)之间的随机数,然后对每一个像素其RGB三色通道加上这样一个随机数再去转换,可以做到让Error更平均,虽然看上去有些地方的Error显然增大了,但平均下来会好很多,失真的情况会有所缓解。

可视计算概论课程Lab1_第3张图片

Blue Noise

这个主要是采取了与上述噪音不同的“蓝噪音”,其具体生成方式较为复杂,可以参考连接。
可视计算概论课程Lab1_第4张图片

Ordered

从某种意义上来说,这种方法有点作弊的嫌疑,因为这其实是用了更高的分辨率,不过方法本身是好的。就是根据排列规则,将灰度分为10类,然后每一类用(3x3)的像素表达原先的一个像素。
可视计算概论课程Lab1_第5张图片

Error Defuse

我们知道每一次近似都会产生误差,而当一个地方产生的误差较多就会出现比较明显的失真现象,该方法就是将每个地方的误差分配到之后要计算的像素中,使得看上去总体来说好了一点。
可视计算概论课程Lab1_第6张图片

Image Filtering

引言

这个其实就是感受图片卷积的方法,这一部分你需要实现两个功能——Blurring, Edge。
可视计算概论课程Lab1_第7张图片

Blur

这个我做的是取平均值,即输出图片的每个像素,是原图中该像素周围3x3像素的平均值,边缘的时候进行补0。

可视计算概论课程Lab1_第8张图片

Edge Detection

边缘检测主要就是利用那些特殊的卷积块,进行卷积,从而计算得出这个地方是不是边缘,这里需要对横边和竖边进行平方和,以确定所有的边,其实也可以调参,但是好像不太需要?
可视计算概论课程Lab1_第9张图片

Image Inpainting

这一部分可以理解为抠图plus,将一张图片完美融合到另一张图片中,这里用的方法其具体的计算过程助教完成了,(数学技巧高超),我们需要确定是边界条件。这里的边界条件由于我们是想保持物体本身的样子,所以我们需要将A-B设为边界,而不是A。

Line Drawing

这个没什么好说的,就是采用上课讲的方法进行划线。

可视计算概论课程Lab1_第10张图片

Triangle Drawing

与上述方法同理,我的想法是先画出边,再将每条边内部填充成三角形。

可视计算概论课程Lab1_第11张图片

Image Supersampling

这个的想法是,先将一张图片放大(长宽各到原来的rate倍),然后再采用卷积的方式取平均值恢复到原图。

这里的放大令人震惊,本来以为采用插值,但最后却是emm,简单的算了一下,感觉有点算了重复像素的感觉,不过效果好像不错,不太理解为什么这个与插值像等价。

rate=1

这个有明显的走样,可以看到领带处一言难尽。
可视计算概论课程Lab1_第12张图片

rate=5

与上一张照片对比,可以看到反走样效果显著。
可视计算概论课程Lab1_第13张图片

Bezier Curve

这个没什么好说的,就是画一条贝塞尔曲线,这里用的方法为暴力算,其实感觉还好。

其实一开始做我还想着能不能在多项式的基础上进行计算,后来发现,这样是不行的,因为C++精度有限,大数+小数会将小数吞掉,结果画出来是一条直线,errr,或许如果精度能够实现高一点这样的计算方式会更优,毕竟只需要加法。

可视计算概论课程Lab1_第14张图片

你可能感兴趣的:(计算机图形学,图形渲染)