如何自学图像编程

简介:

现在,图像类信息越来越多了,对图像的编程需求也越来越多。图像类项目的特点是性价比高,单行代码的价格一般是普通的程序的10倍,每行代码能够卖几块钱。很多人把目光放在这个上面。刚才又有网友咨询,做图像要看些什么书?结合我的自学经验,写一篇博客谈谈这个问题。
 
 需要先明确几个问题:
 (1)你的基础如何?做图形图像的话,对数学要求比较高,至少要有大学数学的基础——微积分、线性代数、概率统计和数值分析都会用到的。不然,书看不下去,没法自学。如果要做深入的话,对英语也有一定的要求,绝大部分深入的资料都是英文的。

 (2)做哪个层面的?与硬件严重相关的只能选C,做应用层的话可以选C++和C#,我个人推荐C#,当然,智能手机还是推荐C++。做Web层面的话,目前最佳选择是Flash(其实Silverlight比Flash更适合做Web图像,好歹Silverlight有byte类型,有struct,但Silverlight的普及度不够),Html5/Canvas目前只能做简单的应用,复杂的还不行。如果只是做算法,matlab就够了,但一般不是科班出生,很少做纯算法的。做纯算法还有个缺点就是,算法转换为收入很难。鉴于C#写算法并不比用matlab写算法慢,不建议摸matlab。但matlab代码要能看懂,因为论文中很多算法是用matlab写的。

 (3)有没有克服困难的勇气。图像类项目大多不大,普遍的几千行代码就可以搞定。就这几千行代码,难度越大的钱越多。关键词就是困难和难度,工作量往往不是问题。也就是说,你越牛逼,越值钱。牛逼是没有止境的,不像那些靠体力的项目,身体是个硬的限制。

 下面的书籍,如果是写的英文名字,那就是推荐阅读英文版,如果是中文名字,那就说明,中文版写的/翻译的也不错,推荐看中文版而非英文版。都是可以直接下载到的或买到的。
 
 首先是两本核心书籍:
 (1) Image Processing,Analysis and Machine Vision 3ED。(中文名:《图像处理、分析与机器视觉》)
 (2) Computer Vision: Algorithms and Application(中文名:《计算机视觉——算法与应用》)

 第一本书偏重于基础,但是它写的可不基础。写的很简且信息量极大,但核心概念都讲了,重点算法大部分都列出来了。第二本书偏重于工程应用,概述了各个领域的有效算法,点到为止。
 如果看第二本没困难的话,可以忽略掉第一本。第一本书也不好读,一上来就讲了狄拉克分布,因此,要想从头到尾都看懂是几乎不可能的,但是它的内容的前后依存性不大,看不懂的直接略过去就行了,只看能看懂的即可。
 没必要看完,我也只看了30-40%感兴趣的部分,其它的要么是不感兴趣的,要么是看不懂的。
 只需要大学数学基础就可以开始看,能看懂部分就可以做项目了。找到和项目相关的内容,找到相应的参考文献,直接去看论文实现论文的算法即可。绝大部分重要论文Google Scholar都能搜到原文,如果英文水平不够,也可以在几个期刊网搜中文的论文,不是特别前沿的东西,中文的论文也有涉及到的。
 看书的重点是理解,理解算法最佳方式是自己把算法写一遍。可以参考OpenCV的代码来写。理解一个算法之后,这个算法就可以为你赚钱,不理解,是很难用对算法的。自己写算法。你才对这个算法的性能有直观的感受,知道可以通过哪些方式来改进它,知道怎么在性能和算法效果之间进行取舍,这对项目来说,是很重要的。
 不建议买第二本书的中文版,它的中文版阉割了参考文献和索引这两个最有使用价值的部分。
 
 把这两本书全部看完吃透,单靠大学水平的数学是不够的,至少得数学系本科生级别的知识储备。如果大学数学忘了,建议先复习一遍。
 自学推荐:
 (1)陈天权版《数学分析(一、二、三)》。这是国内最难的一套数学分析教材,为什么推荐它呢?它自成条理,信息量丰富,把图像分析深入所需的数学内容都包括进去了:微积分、点集拓扑、实分析、泛函、变分、复分析、流形……,重要概念都讲了。学完了,看论文问题不大。缺点就是难。可是,图像类项目的特点也是难。遇难而上是必须的。这套书虽难,但是思路极其清晰,就是看的慢一点而已。要知道,计算机所能发挥出的威力只是数学理论的一部分,随着计算机的计算能力越来越强,越来越多的数学方法会引入到程序中来,对于图像分析领域尤其如此。所以要未雨绸缪,别看有的数学知识现在用不上,说不定哪天就用到了。
 (2)Lax的《线性代数及其应用》。作者是沃尔夫奖得主,写的很简洁明要,且不与大学学的线性代数重复。
 (3)《Numerical Recipes》。数值分析有这一本书就够了,秒杀众书的书。这本书只看感兴趣的或当前用到的即可。

 

 鉴于图形和图像的关系越来越紧密,关于图形学的书籍也是值得一读的。推荐两本:
 (1)David F.Rogers的《计算机图形学的算法基础》。这本书实在是太经典了,就是有点老,比较基础。
 (2)《实时计算机图形学》这本书讲的都是比较现代的,正好结合上一本看。

 

 图像编程 = 算法 + 性能。因此,性能优化方面也得看。比如这本:《软件优化技术--IA-32平台的高性能手册》。
 
 会用Photoshop对图像编程很重要。Photoshop有强大的编辑功能和特效库,很多时候,可以用Photoshop先进行预研究,确定项目是否可行。可行的话,我们再把Photoshop的操作过程用算法来实现,实际项目中,经常会这么操作的。 Photoshop 推荐一本书:李金明、李金荣的《Photoshop CS5完全自学教程》。这本书写的非常棒,就是书名有点土,和那些垃圾书的书名很像。
 
 如果用C/C++的话,推荐《学习OpenCV(中文版)》,翻译的不错。如果用C#的话,没啥好书可以推荐,可以看看我博客中的文章。如果用Flash的话,推荐《Foundation ActionScript 3.0 Image Effects》。
 
 如果做的是和彩图有关的话,推荐《彩色数字图像处理》。其它的,《图像局部特征不变性特征与描述》写的也不错。
 
 ====
 下面举个例子讲讲工具、知识间的综合应用。
 要实现一个lemo特效,可以先利用现有工具得到像素之间的映射图(比如我这篇文章:《解决问题的艺术:半小时编程实现照片的反转负冲特效》)。但这样一来,每种特效都需要一个像素映射图,增大了程序的尺寸,怎么办呢?
 一种方法是用Photoshop模拟它,然后,写图像处理算法来重复这一过程。这是用图像处理的方法来解决问题。
 另一种方法是将lemo特效当作一多元函数,特效前的图像是输入值,特效后的图像是输出值,先写出一个自由度高点的函数,再采用拟合的方法,找到合适的函数参数,然后检验这个函数的稳定性,靠谱的话就是它了。这是用数学的方法来解决问题。

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2012/03/25/2416267.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
2月前
|
人工智能 自然语言处理
Sora如何用?小白教程,一文带你看清
仅仅凭借文字就可以生成一段视频!近日,OpenAI的一款新产品又火出圈了。当地时间周四(2月15日),OpenAI发布了首个文生视频模型Sora。 2024年2月16日,OpenAI在官网上正式宣布推出**文本生成视频**的[大模型 Sora](https://openai.com/sora),该工具可以通过使用文本迅速制作出一段长达60秒的视频,视频中可以呈现多个角色、特定动作、以及复杂场景。OpenAI的官网上现已更新了48个视频案例,可以说是效果逼真,能展现艳丽的色彩,呈现准确的细节,连人物角色都是表情丰富。
|
7月前
|
存储 编解码 Windows
图形图像的基础知识总结
图形图像的基础知识总结
56 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
技术小白能看懂的ChatGPT原理介绍
网上有关 ChatGPT 的原理介绍文章一大堆,要么是从 NLP 的历史开始讲起,要么是上数 GPT 3 代,内容都相对冗长和复杂。其实 ChatGPT 的原理并不难理解,我将以最通俗易懂的方式为技术小白解读,帮助大家更好地了解这一技术
503 1
技术小白能看懂的ChatGPT原理介绍
|
7月前
|
机器学习/深度学习 人工智能 算法
计算机图形学的基础知识
计算机图形学的基础知识
153 2
|
3月前
|
Java C++ Python
如何开始学习编程
如何开始学习编程
79 0
|
9月前
|
前端开发 JavaScript 算法
如何有效地学习编程?
如何有效地学习编程?
194 0
|
11月前
|
搜索推荐
游戏开发中最常用的基础数学知识
我们也经常听到有人这样说:想学做游戏或者想学编程呀,你的数学得要好。数学学得好,逻辑思维才能好,才能把编程或者做游戏学好。这句话看上去好像是有道理,但是细琢磨一下,其中有不少的问题。想学好编程,严谨缜密的逻辑思维确实很重要,但是逻辑思维这个东西并不是天生的,是后天通过锻炼习得的,锻炼它的方式有很多,学数学或者学习编程都能够有效的锻炼一个人的逻辑思维能力。
108 0
|
11月前
|
机器学习/深度学习 自然语言处理 数据可视化
简洁、生动,图解「老画师」DALL-E 2的工作原理
简洁、生动,图解「老画师」DALL-E 2的工作原理
293 0
|
JavaScript Java 编译器
编程简单科普系列 - 什么是编程 (1)
广义上来说,编程也不仅仅是指关于计算机的范畴,现在通常也指可以diy的东西,可以通过自己想法进行自定义的东西。当然我们这里所说的是指计算机编程. 因为计算机是不能直接听懂我们人说话的,没办法直接沟通,所以我们需要通过编程语言来跟计算机进行沟通,通过编程语言把我们想表达的转化为计算机能听懂的,在这里编程语言就相当一个翻译(比如,我们不会英文,准备要和一说英文的外国人谈生意,这时候就需要找一个英文翻译,替我们把想要表达的中文翻译成对方听得懂的英文。)其实严谨点这个比喻说也不准确,因为编程语言一般是需要通过编译器或者解释器编译解释之后,才能为计算机所识别. 每个计算机编程语言,都有自己的编译器或者解
306 0
|
设计模式 算法 IDE
学好编程的 4 个秘诀
学好编程的 4 个秘诀
141 0