如何自学图像编程

简介: 现在,图像类信息越来越多了,对图像的编程需求也越来越多。图像类项目的特点是性价比高,单行代码的价格一般是普通的程序的10倍,每行代码能够卖几块钱。很多人把目光放在这个上面。刚才又有网友咨询,做图像要看些什么书?结合我的自学经验,写一篇博客谈谈这个问题。

现在,图像类信息越来越多了,对图像的编程需求也越来越多。图像类项目的特点是性价比高,单行代码的价格一般是普通的程序的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特效当作一多元函数,特效前的图像是输入值,特效后的图像是输出值,先写出一个自由度高点的函数,再采用拟合的方法,找到合适的函数参数,然后检验这个函数的稳定性,靠谱的话就是它了。这是用数学的方法来解决问题。

若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
XML Java Apache
Gradle安装与配置
Gradle安装与配置
Gradle安装与配置
|
UED 开发者
Flutter|常用数据通信组件
Flutter|常用数据通信组件
181 49
|
12月前
|
运维 Cloud Native Java
Java项目部署的发展流程
本文介绍了四种不同的应用部署方式:传统部署、虚拟化部署、容器化部署和云原生部署。每种方式的特点、部署流程及优缺点进行了详细说明。传统部署直接在物理机上运行应用,存在资源利用率低和运维成本高的问题;虚拟化部署通过虚拟机实现资源隔离和复用,但有性能损失和单点故障风险;容器化部署则提供轻量级、可移植的应用环境,具备良好的隔离性和一致性;云原生部署结合了容器化和微服务架构,实现高效运维和灵活扩展。
380 0
Java项目部署的发展流程
|
存储 缓存 Linux
Centos7 yum 方式安装 安装 Docker CE
系统要求 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。 卸载旧版本 旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:
3510 1
|
数据采集 数据挖掘 API
Ownips+Coze海外社媒数据分析实战指南
本文介绍了在社交媒体数据采集和分析中的实践方法,特别强调了使用IPS代理的重要性。社交媒体如Twitter、Facebook等提供了丰富的数据资源。文章推荐了Ownips,这是一家提供高质量静态ISP代理服务的公司,用户可以选择需要的地区IP,并通过API或账号定向访问配置使用。 文章通过一个Twitter趋势数据采集的案例,展示了如何利用Ownips代理IP和Python的requests库以及BeautifulSoup解析HTML来获取和解析数据。此外,文章还提到了如何在Coze平台上创建数据采集插件和Twitter Bot,以实现自动化和智能化的数据分析。
Ownips+Coze海外社媒数据分析实战指南
|
Rust 安全 Java
Rust中的并发模型与数据竞争
本文将深入探讨Rust中的并发模型,包括其如何避免数据竞争,并对比其他编程语言中的并发策略。我们将详细讨论Rust的所有权系统、借用检查器以及线程间的同步机制,展示Rust如何在提供高性能并发的同时,保证数据的安全性和一致性。
|
消息中间件 Java 关系型数据库
【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)
【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)
548 2
|
存储 缓存 分布式计算
spark BlockManager粗讲
spark BlockManager粗讲
|
JSON 数据格式 Python
Python三行代码实现json转Excel
最近重保,经常需要通过Excel上报威胁事件。安全设备的告警很多都是json格式的,就需要将json转成Excel。 用Python将json转成excel也就三行代码的事,先将json串导入形成字典对象,再通过pandas转成DataFrame直接输出excel。
1314 0
Python三行代码实现json转Excel