历史上的今天
今天是:2025年01月13日(星期一)
2018年01月13日 | 图像处理基本思想和算法研究
2018-01-13 来源:互联网
刚开始想把这部分内容命名为“基本算法”,意在介绍图像处理中的一些基本算法,后来仔细想想决定不这么写,因为图像处理是一个非常大的概念,图像处理不等于人脸识别,也不等于模式识别,直接介绍诸如图像处理基本算法之类的内容很容易写成空话,没有什么实际意义。读者有兴趣的话可以直接搜索“图像处理十大经典算法”,适当了解。
所谓图像处理,就是用计算机对图像进行分析,以达到所需结果的技术,又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。
万变不离其宗,算法是死的,重在思想。举个例子,在模式识别方向这个方向判断一个学生是否入门有一个非常简单的方法,就是“如果你能把图像很自然的想象成高维空间中的一个点”,那就说明在模式识别方面入门了,可以对图像进行分类了。
当然标准不是唯一,在其他领域如目标检测也会有其他的判断标准,总之我们要对图像进行处理,那么图像就不再只是图像,它可能会演变成各种不同形式的概念,可能是点,可能是面,还可能是一个坐标空间。在目标跟踪的经典算法粒子滤波中,将一个个的小图像块看做一个个粒子;在子空间理论中,将一系列图像放在一起构建一个成分主空间(例如主成分分析PCA算法等等。我不会详细介绍这些算法,说多了就显得抽象老套,但我要说的是我们一定要把图像本身理解好,它是一个图像,是一个矩阵,是一个信息的容器,是一种数据的表现形式,图像不一定都必须在视觉上有意义(比如频域的图像)。
总之图像处理的基本思想还是要立足于图像本身,要深度到图像内部结构中,思维要灵活。打个比方说,图像和高维空间中的点之间有什么对应关系,这是所谓的量变产生质变。总之一定要多想,多总结,主动去钻研,才能够真正领悟一些东西。最基本的东西往往蕴藏着深奥的道理,无论你现在多牛多厉害,都不能放掉最本源的东西。多想想图像是什么,有什么本质属性,你可能无法得到准确的答案,但肯定能得到一些有用的感悟(有点像哲学问题了)。
算法研究
算法研究应该是图像处理的核心工作,尤其是各大高校的博士硕士。这里我并不谈那些高大上的算法,我更想说的是一些算法研究的一些基础的东西,比如说一些基础课程,比如说矩阵运算。
研究图像处理的算法,离不开数学。在这里我建议图像处理方面的硕士一定要上两门课:《泛函分析》以及《最优化算法》,有的学校已经将这两门课列为了研究生阶段的必修课程。这两门可可以说是图像处理(至少是模式识别)的基础。我当初没上过最优化算法,但后来也自己补上了,不然真的是寸步难行。至于泛函我当时听课的时候也不是很懂,但是在之后的研究过程中发现很多图像处理的基本知识基本理论都和泛函分析中枯燥的定理如出一辙,没办法,有的东西本身就是枯燥的干货,学着费力,缺它不行。
其次我想说的是矩阵运算。图像就是矩阵,图像处理就是矩阵运算。大家为什么都喜欢用Matlab,就是因为它的矩阵运算能力实在是太强大,在Matlab的世界中任何变量都是矩阵。同样OpenCv之所以能流行,不仅仅是因为它良好的封装性,也是因为它的矩阵格式,它定义了Mat基础类,允许你对矩阵进行各种操作。Python也不例外,它的Numpy就是一个专门的线性代数库。
真正在图像编程过程中,那些看着高大上的API函数归根到底都是工具,查查手册就能找到,真正核心还是在算法,算法是由公式编写的,公式的单元是变量,而图像届的变量就是矩阵。所以,熟练去操作矩阵,求秩、求逆、最小二乘,求协方差,都是家常便饭。所以,如果你有幸能上《矩阵分析》这门课,一定要把它看懂,那里面都是干货。
史海拾趣
|
RETALLMSG(1,(TEXT(":::SPL_IOControl.\r\n")));输出函数的理解 RETALLMSG(1,(TEXT(\":::SPL_IOControl.\\r\\n\"))); 这样一个函数的作用是什么? 相对于单片机有输出如P1.0=1; 这样输出效果很明显 RETALLMSG(1,(TEXT(\":::SPL_IOControl.\\r\\n\")));这样一个函数的输出效果是这样,执行了这条语句能看到什么 ...… 查看全部问答> |
|
makeimg: run command: res2exe -r -c C:\\WINCE600\\OSDesigns\\2450\\2450\\RelDir\\smdk2450_ARMV4I_Release\\0409\\bthpnl.res C:\\WINCE600\\OSDesigns\\2450\\2450\\RelDir\\smdk2450_ARMV4I_Release\\bthpnl.cpl makeimg: Check for C:\\WI ...… 查看全部问答> |
|
最近在弄nor分区, 遇到了一些问题, 想请教一下. 具体的情况是这样的: WINCE6, 板子是pxa270, 克隆的bsp是mainstonIII, 板子上有一块stratad的nor flash, 容量是32MB, 这块板子用来存放bootloader(不到1MB)和nk(20MB左右)之后还剩下10MB左右的空 ...… 查看全部问答> |
|
我这里碰到的一个问题是,不知道如何确定一个dll是否被系统加载了. 我这里自己想的思路就是: 1.打印串口调试信息,信息打印出来了,就表示加载了. 这个方法相对而言比较简单,但是有的时候不太方便. 2.通过USB连接之后,通过进程查看 ...… 查看全部问答> |
|
我是一个小公司,公司现在要开发一个煤矿管理系统,现在单片机的程序研发结束了。 单片机的数据格式,命令及命令格式,都以文档的形式给我了。 我现在想用C#与其通讯。 单片机:P89V51R 单片机接口:现用的是电话线。RS-232接口同时也在开发中 ...… 查看全部问答> |
|
我用超级终端调试ARM板,可是在一个进程启动后就不能结束了! 进入超级终端手工开始这个进程倒可以结束(CTRL+C),但当我把这个进程写到开机自动启动脚本后就不能用CTRL+C结束了,这个进程的左右是不断往串口发数据并读取串口回复。现在整个超级终端的界面都是布满了发送的那几个数,导致不能控制这个ARM板子了 ...… 查看全部问答> |
|
花了半天时间研究TI的LM3S8962开发板自带OLED显示,在rit128x96x4.c中自己添加了一个RIT128x96x4HZStringDraw函数,实现16*16中文汉字显示,现在汉字存储在内部FLASH中,下一步准备把字库存储到外部FLASH中:Dvoid RIT128x96x4HZStringDraw(const ch ...… 查看全部问答> |




