“SASTdaily出现在无限之声的专栏中啦!点击无限之声菜单栏左侧“无限精彩”,即可查看SASTdaily往期的精彩内容!另,为了SASTdaily能够更好地为同学们服务,我们在阅读原文中链接了关于对SASTdaily的建议和勘误的问卷,如果您对我们有什么宝贵的建议,或者发现了文章中的谬误及不足之处,欢迎点击阅读原文,留下您的建议和指正!”如今的编程语言的种类数已经超过了世界的国家数了,那么PHP到底是不是世界上最好的语言呢?——这个话题不是我们今天开撕的主题oДO看到很多同学正在使用MATLAB、Python、OpenCV、Caffe等等语言和工具在进行着实验室的图片处理(搬砖),然而发现自己都不知道……图片是怎么存放在计算机里的抑或是,隐约地听说过红黄蓝三原色(品红、黄、青),但对于BMP、JPG、PNG这样的图片文件束手无策搞不出东西啊……你是否考虑着要弃坑C++了(/=_=)/~┴┴不必担心——前面的推送既然已经介绍了C/C++可以进行界面的设计,相信你在看过这篇文章以后,不仅轻松使用C++进行图片处理,还可以手写C++受限玻尔兹曼机,手搭C++神经网络,一举淘汰Caffe(谁叫它安装辣么炒鸡麻烦)作为背景的介绍,首先,我们需要知道什么是“颜色”( ̄﹏ ̄)有着优秀高中文化水平的你,甩我一脸——这不就是RGB红绿蓝三原色嘛╮( ̄▽ ̄)╭好吧,其实几乎也是这个,但是作为电子系的同学,“把傅立叶变换融入到了血液中“(张真人语)的电子系同学,我会告诉你——颜色是“功率谱密度”(什么鬼,(╯‵□′)╯︵┻━┻,一言不合就开车)好吧,但所幸的是——很多种不同的功率谱密度,都对于正常的人的眼睛表征一个颜色更加幸运的对于普通的人的眼睛,使用三种功率谱密度的不同线性组合,几乎把所有颜色全部涵盖了,而这三种功率谱密度的最常见组合就是——红绿蓝RGB。但仅仅是“几乎”,仍有部分的颜色,不被各种显示屏显示。只有下面舌形图中只有褐色三角内的颜色可以被显示(那你问我其他部分怎么显示的……我告诉你,就是象征地显示一下,其实也不能被显示)(所以还是看看窗外那些在显示屏上看不到的颜色吧)其次,我们需要知道图片的像素点的颜色通常是怎么被存储的以BMP为例,首先是文件头:(A和B)其中具体的意思为A.bfType指定文件类型,必须是0xD,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”。A.bfSize指定文件大小,包括这14个字节。A.bfReserved1,A.bfReserved2为保留字,不用考虑A.bfOffBits为从文件头到实际的位图数据的偏移字节数,即图1.3中前三个部分的长度之和。B.biSize指定这个结构的长度,为40。B.biWidth指定图象的宽度,单位是象素。B.biHeight指定图象的高度,单位是象素。B.biPlanes必须是1,不用考虑。B.biBitCount指定表示颜色时要用到的位数,常用的值为1(黑白二色图),4(16色图),8(色),24(真彩色图)(新的.bmp格式支持32位色,这里就不做讨论了)。B.biCompression指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。B.biSizeImage指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:biSizeImage=biWidth’×biHeight要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=,则biWidth’=;如果biWidth=,biWidth’=)。如果biCompression为BI_RGB,则该项可能为零B.biXPelsPerMeter指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在第4章详细介绍。B.biYPelsPerMeter指定目标设备的垂直分辨率,单位同上。B.biClrUsed指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2biBitCount。B.biClrImportant指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。——-——-——-——-——-——文件头解析完毕后,就是正式的内容了。对于24位以下的图片,即上述的B.biBitCount为1、4、8等等小于24的数值,需要用到调色盘,否则跳过。分别代表了每个像素点颜色红绿蓝的分量,其中如果不rgbReserved是保留字,不会显示到图片上,其实是冗余信息。下面就是真正的数据内容了(终于……感动擦泪)对于2色位图,用1位就可以表示该象素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个象素。对于16色位图,用4位可以表示一个象素的颜色,所以一个字节可以表示2个象素。对于色位图,一个字节刚好可以表示1个象素。等等……需要注意的是:每一行的字节数必须是4的整倍数,如果不是,则需要补齐。这在前面介绍B.biSizeImage时已经提到了。而且,图片的上下左右的行列是翻转颠倒的,不是正常的第几行第几列,不过相信聪明的你一试就知道规律了。(数据部分已经介绍完了……很短……)第三部分,你就可以读取图片进行你想要的图片处理操作了快快手写人工网络吧什么不太会???[????]?没关系,参考《概率论与随机过程(下)》欧志坚老师留的第一次大作业“受限玻尔兹曼机”稍微改改就是了?(×?×)?接下来,不满足于BMP格式的同学,可以尝试JPG和PNG或是GIF。1第一步为了使人眼最敏感的信息亮度Y(彩色细节失明现象),保留下来,我们需要进行一个线性变换:之后贪心的(不对,是抠门的)JPG,还会对图片进行采样,每两行数据只保留一行。2第二步,进行DCT(离散余弦变换)变换将图片分成8*8的小块,每一块都进行变换2D-DCT:得到类似于下图的基的加权系数即2D-DCT的结果3第三步,按量化表进行量化。1第四步,进行编码使用0值的行程长度编码和熵编码得到最终结果。读取JPG有一定难度,小编当时写C++头文件的时候代码总共用了多行(也许是写法实在太差了……⊙︿⊙)如果你还没有看懂什么是DCT,快快复习谷哥哥的《信号与系统》吧?ω?。(该部分的介绍参考了谷源涛老师《信号与系统》课件的部分内容,再次表示向谷哥哥致敬并表示感谢)不止于此C/C++还可以进行音频文件的读写,看到《数字信号处理》课程设计(大作业)必须使用C/C++完成……(╬▔皿▔)┙へ┻┻只好手写C/C++读取wav了。wav是RIFF(ResourceInterchangeFileFormat,"资源交互文件格式"),有很“规矩”的文件头:之后就是数据域,全部是数据啦(注意分,单、双声道)至此,我们发现完全可以使用C++完成图像、声音的信号处理任务。让我们用C/C++来完成专业限选课《数字图像处理》、《语音信号处理》的大作业吧~哈哈( ̄▽ ̄")小编又一次被C/C++功能的全面强大所震撼,如果可以和往期的“C++做界面——土库的控制台界面”所结合,不就能有了美观、还真·自带BGM的如花界面了吗…哇—?﹏?有兴趣的同学不满足于C/C++的,可以尝试进行“面向与非门的程序开发”,甚至请教亲爱的国林哥哥,进行“面向金属氧化物半导体场效应晶体管的程序开发”。(可爱的小编提醒:这曾经是一道《电子电路》的考题,同学们请谨记……)以上就是本期的全部内容了。只用标准库的东西就可以使C/C++完成意想不到的事情,写出来的程序应用性大大提高。大家有空也可以尝试、学习一个哦~谢谢,我们下期再见~最后祝您身体健康如故先生峨眉练功敬上
2017西医综合复习肿瘤七常见肿药学专业知识二几百题解析
转载请注明:http://www.nydjfy.com/pxxx/1841.html