一个静态2D图形渲染器+一个静态图像压缩算法的实现(Python)(更新中…)

发布于 19 天前  8 次阅读


背景

本学期的课设是实现文本字符的哈夫曼编码,但是总觉得太表层了,加之之前做misc题目时,对能量通道,rgb通道,FFT算法等东西完全没看懂且很感兴趣,正好之前有3D-shader的一些编程经验,所以来想来写一个图像编码算法,查了一些资料发现,这个项目的体量比预期要大得多,特此记录一些关键资料,以备查找

由于需要用到一些矩阵运算,所以就偷懒了,用Python写会比C++方便一些

本文预期是以最笨最原始的方式实现,所以不会太考虑优化,如果您是需要正经搞这方面开发的话,本文不太适合您,如果您是单纯需要了解一下计算机怎么渲染2D图形的,那么本文很适合您

正文

首先是线性代数的各种内容,可以看马同学的笔记和3B1B的视频,我就不再赘述一遍了,以下内容默认读者已经复习了一遍线代,并理解线代的本质是对坐标轴内的平面图形的变换,which can be used for image compression

本文的算法实现:本文算法实现基于JPEG和 h.264的iFRAME部分

首先是一些压缩算法的视觉上的生理基础

人对明暗的感受是大于对色彩的感受的。大家可以回忆一下看无描边的彩色美术作品,比如油画,以及纯粹铅笔作画的作品,比如素描之间的感官区别

比如下图(待补充图片)

可以发现,纯粹的颜色通道难以让人在视觉上辨认原始物体是一朵花,但是灰度通道下的图像,可以让人很清楚的看明白,这是一朵花

嘿嘿,这里出现了一个名词,xxx通道。这个是什么含义呢

大家可以这样想,要是我让显卡显示红色像素,那我肯定是要给一组表示红色强度的数据,对吧。那么这组数据就是R矩阵,而R矩阵向显卡写的通道,就是R通道。既然他是一个矩阵。这组数据同样也能被直接放入显卡的G通道,这样就会显示强度相同的绿色,以此类推B通道同理