可视计算概论课程Lab1
前言
Lab1作为让大家认识计算机可视化的入门级别Lab,许多方法都是比较片面的应用,而不深究其中的原理下面就做一个Lab1的report,或者说是回顾。
Image Dithering
引言
这一部分主要需要你实现四个函数,分别为Uniform Random, Blue Noise, Ordered和Error Defuse。
Uniform Random
这里主要就是调用C++标准库函数random和cime,从而生成均匀分布在(-1, 1)之间的随机数,然后对每一个像素其RGB三色通道加上这样一个随机数再去转换,可以做到让Error更平均,虽然看上去有些地方的Error显然增大了,但平均下来会好很多,失真的情况会有所缓解。
Blue Noise
这个主要是采取了与上述噪音不同的“蓝噪音”,其具体生成方式较为复杂,可以参考连接。
Ordered
从某种意义上来说,这种方法有点作弊的嫌疑,因为这其实是用了更高的分辨率,不过方法本身是好的。就是根据排列规则,将灰度分为10类,然后每一类用(3x3)的像素表达原先的一个像素。
Error Defuse
我们知道每一次近似都会产生误差,而当一个地方产生的误差较多就会出现比较明显的失真现象,该方法就是将每个地方的误差分配到之后要计算的像素中,使得看上去总体来说好了一点。
Image Filtering
引言
这个其实就是感受图片卷积的方法,这一部分你需要实现两个功能——Blurring, Edge。
Blur
这个我做的是取平均值,即输出图片的每个像素,是原图中该像素周围3x3像素的平均值,边缘的时候进行补0。
Edge Detection
边缘检测主要就是利用那些特殊的卷积块,进行卷积,从而计算得出这个地方是不是边缘,这里需要对横边和竖边进行平方和,以确定所有的边,其实也可以调参,但是好像不太需要?
Image Inpainting
这一部分可以理解为抠图plus,将一张图片完美融合到另一张图片中,这里用的方法其具体的计算过程助教完成了,(数学技巧高超),我们需要确定是边界条件。这里的边界条件由于我们是想保持物体本身的样子,所以我们需要将A-B设为边界,而不是A。
Line Drawing
这个没什么好说的,就是采用上课讲的方法进行划线。
Triangle Drawing
与上述方法同理,我的想法是先画出边,再将每条边内部填充成三角形。
Image Supersampling
这个的想法是,先将一张图片放大(长宽各到原来的rate倍),然后再采用卷积的方式取平均值恢复到原图。
这里的放大令人震惊,本来以为采用插值,但最后却是emm,简单的算了一下,感觉有点算了重复像素的感觉,不过效果好像不错,不太理解为什么这个与插值像等价。
rate=1
这个有明显的走样,可以看到领带处一言难尽。
rate=5
与上一张照片对比,可以看到反走样效果显著。
Bezier Curve
这个没什么好说的,就是画一条贝塞尔曲线,这里用的方法为暴力算,其实感觉还好。
其实一开始做我还想着能不能在多项式的基础上进行计算,后来发现,这样是不行的,因为C++精度有限,大数+小数会将小数吞掉,结果画出来是一条直线,errr,或许如果精度能够实现高一点这样的计算方式会更优,毕竟只需要加法。