图像处理算法研究

2015-03-13 22:42:54 liuuze5 阅读数 14578

整理了一下网上一些公司对图像处理算法工程师的招聘要求:

                                                            图像处理算法工程师

 

职位要求

编程技能:

1、 具有较强的编程能力和良好的编程习惯, 精通c/c++编程,并熟练使用VS 或matlab开发环境;

2、 在计算机技术领域拥有扎实的技术功底,尤其在数据结构、算法和代码、软件设计方面功力深厚;

    对数据结构有一定的研究基础如链表、堆杖、树等,熟悉数据库编程;

3、 出色的算法分析能力,对某一特定算法可以做广泛的综述,有实际算法实现经验;

4、 熟悉面向对象编程思想,精于windows下的C/C++、VC++程序设计,熟悉MATLAB,对MFC有相对的了解和应用经验;

专业技能:

1、扎实的数学功底和分析技能,精通计算机视觉中的数学方法;

     高等数学(微积分)、线性代数(矩阵论)、随机过程、概率论、

     摄影几何、模型估计、数理统计、张量代数、数据挖掘、数值分析等;

2、具备模式识别、图像处理、机器视觉、信号处理和人工智能等基础知识;

     对图像特征、机器学习有深刻认识与理解;

3、精通图像处理基本概念和常用算法包括图像预处理算法和高级处理算法;

     常见的图像处理算法,包括增强、分割、复原、形态学处理等; 

     熟悉常见的模式识别算法,特别是基于图像的模式识别算法,掌握特征提取、特征统计和分类器设计; 
4、熟练使用OpenCV、Matlab、Halcon中的一种或一种以上工具库;

5、熟悉机器视觉系统的硬体选型,包括CCD相机,镜头及光源;熟悉相机与镜头搭配;

 

外语:

1. 英文熟练,能够熟练阅读和理解专业英文资料,有英文文献检索和阅读能力;
2. 良好的英语沟通能力

综合能力:

1.对工作认真负责,积极主动,勤奋踏实;

2.做事严谨,注重细节,有耐心,能够在压力下独立工作;

3.学习钻研能力强,有较强的理解能力和逻辑思维能力和良好的创新意识;

4.良好的协调沟通能力和团队合作精神; 

经验要求:

1.两年以上C/C++ 程序设计经验;

2.具有2年以上在Linux/Unix环境下用C/C++语言开发图像处理软件的经验。

3.数字图像处理、模式识别的理论知识和实践经验;

  有基于OpenCV开发项目经验,机器视觉行业经验;

  具有图像处理算法设计和开发经验;

  参与过机器视觉系统分析和设计;

4. 在Matlab 或其它数学软件上开发算法的经验;

 

视觉算法经验:请提供实现的算法列表

    目标识别、图像配准、三维测量、标定和重建、手势识别; 

    表面缺陷检测;尺寸测量;特征识别;

    图像去噪、滤波、融合算法
    3A算法:如自动曝光、自动对焦、自动白平衡


【工作内容】: 


1.为解决实际问题而进行探索性研究和创新,设计与模式识别、图像/视频智能分析处理相关的算法。

  图形图像处理、计算机视觉相关算法的研发以及应用程序的编写;

  参与核心软件项目算法设计及算法实现;研究图像处理算法,开发和调试算法原型

  软件算法研发:算法的代码实现、优化以及移植及其测试;

  负责机器视觉系统图象处理、分析及识别算法的设计、实现及调试;

  参与图象算法视觉应用软件的设计与实现。参与图象处理技术研究与设计;

2、对已有的计算机视觉算法进行实用化开发和优化研究;
   精益求精,将算法做到极致,使算法真正实用化;

  参与预研性的算法分析和论证,为产品开发提供基础研究及论证;


岗位职责:

1、 协助工程师进行算法的测试.;C++语言验证、测试算法;

2、编写算法规格说明;
3、相关专业文献的查阅; 
4、将部分matlab程序转为C或C++语言程序。 

1) 辅助图像处理工作
2) 大规模图像搜集与分类 
3) 与开发人员等进行沟通,跟踪产品的体验效果并改进;
4)负责公司的机器视觉与传感器项目的技术支持(如项目可行性评估、现场DEMO、装机、培训等)

   和 维护工作;

 

岗位职责:

1、负责计算机视觉中的图像采集,处理面阵和线扫描相机的成像和控制 ;
2、针对特定的计算机视觉问题,设计目标识别与快速定位与检测算法的实现,并进行优化;
3、对彩色图像和灰度图像实现物体表面的污点划痕检测算法设计和实现;
4、处理三维物体表面数据获取和实现三维测量算法的实现;
5、处理点激光和线激光源的成像,散斑噪声滤波和轮廓检测;
6、负责算法与软件GUI开发工程师接口;
7、完成上级领导交办的其他的工作。




 

图像算法工程师三重境界



一、传统图像算法工程师: 
主要涉及图形处理,包括形态学、图像质量、相机成像之3A算法、去雾处理、颜色空间转换、滤镜等,主要在安防公司或者机器视觉领域,包括缺陷检测;

二、现代图像算法工程师: 
涉及模式识别,主要表现的经验为AdaboostSVM的研究与应用,特征选取与提取,包括智能驾驶的研究与应用、行人检测、人脸识别;

三、人工智能时代图像算法工程师: 
深度学习,主要在大型互联网公司或者研究所机构,具体体现在TensorFlow等开源库的研究与应用,包括机器人的研、基于深度学习的人脸识别;







2018-08-12 23:15:22 echo_1994 阅读数 31283

同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,因为现实世界中的物体是三维的,而图像只具有二维信息,从三维到二维的投影成像不可避免的会丢失一部分信息;另外,成像过程中的光照和噪声也是不可避免的重要因素。正是因为这些原因,基于边缘的图像分割仍然是当前图像研究中的世界级难题,目前研究者正在试图在边缘提取中加入高层的语义信息。

        在实际的图像分割中,往往只用到一阶和二阶导数,虽然,原理上,可以用更高阶的导数,但是,因为噪声的影响,在纯粹二阶的导数操作中就会出现对噪声的敏感现象,三阶以上的导数信息往往失去了应用价值。二阶导数还可以说明灰度突变的类型。在有些情况下,如灰度变化均匀的图像,只利用一阶导数可能找不到边界,此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感,解决的方法是先对图像进行平滑滤波,消除部分噪声,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。

      各种算子的存在就是对这种导数分割原理进行的实例化计算,是为了在计算过程中直接使用的一种计算单位。

 

 

1.Sobel算子

        其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。Sobel算子对于象素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。

       Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘。

                       

检测水平边沿 横向模板 :           检测垂直平边沿 纵向模板:

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

                                                                             

然后可用以下公式计算梯度方向。

                                                                           

 

在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

 

2. Isotropic Sobel算子

 

        Sobel算子另一种形式是(Isotropic Sobel)算子,加权平均算子,权值反比于邻点与中心点的距离,当沿不同方向检测边缘时梯度幅度一致,就是通常所说的各向同性Sobel(Isotropic Sobel)算子。模板也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。

 

3. Roberts算子

罗伯茨算子、Roberts算子是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子,他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。1963年,Roberts提出了这种寻找边缘的算子。

Roberts边缘算子是一个2x2的模板,采用的是对角方向相邻的两个像素之差。从图像处理的实际效果来看,边缘定位较准,对噪声敏感。适用于边缘明显且噪声较少的图像分割。Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。

 

4. Prewitt算子

        Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

 对数字图像f(x,y),Prewitt算子的定义如下:

G(i)=|[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]|

G(j)=|[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]|

则 P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)

经典Prewitt算子认为:凡灰度新值大于或等于阈值的像素点都是边缘点。即选择适当的阈值T,若P(i,j)≥T,则(i,j)为边缘点,P(i,j)为边缘图像。这种判定是欠合理的,会造成边缘点的误判,因为许多噪声点的灰度值也很大,而且对于幅值较小的边缘点,其边缘反而丢失了。

Prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。

 

因为平均能减少或消除噪声,Prewitt梯度算子法就是先求平均,再求差分来求梯度。水平和垂直梯度模板分别为:

检测水平边沿 横向模板                 检测垂直平边沿 纵向模板:

该算子与Sobel算子类似,只是权值有所变化,但两者实现起来功能还是有差距的,据经验得知Sobel要比Prewitt更能准确检测图像边缘。

 

5.Laplacian算子

         Laplace算子是一种各向同性算子,二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。

 

拉普拉斯算子也是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数的拉普拉斯变换是各向同性的二阶导数,定义

                                                                           

了更适合于数字图像处理,将拉式算子表示为离散形式:

另外,拉普拉斯算子还可以表示成模板的形式,如下图所示,

 

离散拉普拉斯算子的模板:, 其扩展模板: 。

 

      拉式算子用来改善因扩散效应的模糊特别有效,因为它符合降制模型。扩散效应是成像过程中经常发生的现象。

      Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数,Laplacian算子对噪声具有无法接受的敏感性;同时其幅值产生算边缘,这是复杂的分割不希望有的结果;最后Laplacian算子不能检测边缘的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性质进行边缘定位;(2)确定一个像素是在一条边缘暗的一面还是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。

 

 

6.Canny算子

      该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。

Canny边缘检测算法

step1: 用高斯滤波器平滑图象;

step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;

step3: 对梯度幅值进行非极大值抑制

step4: 用双阈值算法检测和连接边缘

详解:http://www.cnblogs.com/cfantaisie/archive/2011/06/05/2073168.html

 

 

(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。

(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。

(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。

2016-05-09 20:38:07 horseinch 阅读数 7243

刚开始想把这部分内容命名为“基本算法”,意在介绍图像处理中的一些基本算法,后来仔细想想决定不这么写,因为图像处理是一个非常大的概念,图像处理不等于人脸识别,也不等于模式识别,直接介绍诸如图像处理基本算法之类的内容很容易写成空话,没有什么实际意义。读者有兴趣的话可以直接谷歌百度“图像处理十大经典算法”,上面有我想说的内容。

万变不离其宗,算法是死的,重在思想。举个例子,我个人是主攻模式识别方向,在这个方向判断一个学生是否入门有一个非常简单的方法,就是“如果你能把图像很自然的想象成高维空间中的一个点”,那就说明在模式识别方面入门了,可以对图像进行分类了。

当然标准不是唯一,在其他领域如目标检测也会有其他的判断标准,总之我们要对图像进行处理,那么图像就不再只是图像,它可能会演变成各种不同形式的概念,可能是点,可能是面,还可能是一个坐标空间。在目标跟踪的经典算法粒子滤波中,将一个个的小图像块看做一个个粒子;在子空间理论中,将一系列图像放在一起构建一个成分主空间(例如主成分分析PCA算法等等。,我不会详细介绍这些算法,说多了就显得抽象老套,但我要说的是我们一定要把图像本身理解好,它是一个图像,是一个矩阵,是一个信息的容器,是一种数据的表现形式,图像不一定都必须在视觉上有意义(比如频域的图像)。

总之图像处理的基本思想还是要立足于图像本身,要深度到图像内部结构中,思维要灵活。我当时做本科毕设时,怎么也不知道图像和高维空间中的点之间有什么对应关系,后来总算有一天,突然就明白了,这也就是所谓的量变产生质变。总之一定要多想,多总结,主动去钻研,才能够真正领悟一些东西。最基本的东西往往蕴藏着深奥的道理,无论你现在多牛多厉害,都不能放掉最本源的东西。多想想图像是什么,有什么本质属性,你可能无法得到准确的答案,但肯定能得到一些有用的感悟(有点像哲学问题了)。


算法研究
算法研究应该是图像处理的核心工作,尤其是各大高校的博士硕士。这里我并不想谈那些高大上的算法,我更想说的是一些算法研究的一些基础的东西,比如说一些基础课程,比如说矩阵运算。

研究图像处理的算法,离不开数学。在这里我建议图像处理方面的硕士一定要上两门课:《泛函分析》以及《最优化算法》,有的学校已经将这两门课列为了研究生阶段的必修课程。这两门可可以说是图像处理(至少是模式识别)的基础。我当初没上过最优化算法,但后来也自己补上了,不然真的是寸步难行。至于泛函我当时听课的时候也不是很懂,但是在之后的研究过程中发现很多图像处理的基本知识基本理论都和泛函分析中枯燥的定理如出一辙,没办法,有的东西本身就是枯燥的干货,学着费力,缺它不行。

  其次我想说的是矩阵运算。图像就是矩阵,图像处理就是矩阵运算。大家为什么都喜欢用Matlab,就是因为它的矩阵运算能力实在是太强大,在Matlab的世界中任何变量都是矩阵。同样OpenCv之所以能流行,不仅仅是因为它良好的封装性,也是因为它的矩阵格式,它定义了Mat基础类,允许你对矩阵进行各种操作。Python也不例外,它的Numpy就是一个专门的线性代数库。

  真正在图像编程过程中,那些看着高大上的API函数归根到底都是工具,查查手册就能找到,真正核心还是在算法,算法是由公式编写的,公式的单元是变量,而图像届的变量就是矩阵。所以,熟练去操作矩阵,求秩、求逆、最小二乘,求协方差,都是家常便饭。所以,如果你有幸能上《矩阵分析》这门课,一定要把它看懂,那里面都是干货。

2014-07-29 14:29:26 ycdhonker 阅读数 3038
岗位职责:主要负责网络摄像机的ISP图像处理算法研究、优化与开发。
任职要求:
1、计算机、电子工程、自动控制等相关专业,本科及以上学历;
2、从事过3A算法(自动曝光、自动对焦、自动白平衡)算法及系统设计工作,并担任主要设计人员,3年以上在该领域研发设计工作经验;
3、从事图像特征提取和比对研究。对图像中特征点、轮廓、纹理、空间色彩有深入的研究积累。或者有视频图像检索、图像去雾、图像增强、图像拼接等经验。有相关的产品开发经验,可提供演示。
4、熟识模式识别,对某一特定模型有深入的研究(如SVM、Adaboost、ANN等)。或者有OCR、车牌识别、火灾、烟雾识别等经验。有相关产品的开发经验,可提供演示
5、从事图像预处理和后处理各类算法的研发设计工作,并担任主要设计人员,4年以上在该领域研发设计工作经验,熟悉CMOS/CCD sensor成像原理,并拥有3D降噪、边缘增强、色彩还原、对比度增强、宽动态增强等研发工作经验的优先考虑;
6、熟悉摄像机相关控制系统设计,并具有实际工作经验的优先考虑;
7、熟练掌握FPGA、DSP等器件编程者优先考虑。
2019-02-25 15:07:47 dyq1995 阅读数 3468

下面简要分析了 FPGA 技术,包括 FPGA 技术原理和技术特点等,随后介绍一下FPGA 的图像处理系统算法的实现,包括存储模块、运算单元、控制模块以及数据传输模块等内容。

智能机器人、多媒体已经计算机的诞生都离不开数字图象处理技术,随着计算机智能化图像处理技术的不断发展,几乎所有领域当中都有数字图象技术的身影。例如军事、公共安全、工业、航天航空、卫星遥感以及生命科学等各种领域。因此对图象处理技术的要求也逐渐提高,需要数字图象设计朝着高效性和时效性的方向发展,FPGA技术下的图像处理系统算法越来越受到重视。

1、FPGA技术原理

FPGA通常包括两个部分,分别是储存编程数据的软件SRAM和三项可编程电路,这三种可编程电路分别是互连资源、输入模块、输出模块和可编程逻辑模块。FPGA中主要部分就是可编程逻辑模块,这一模块能够落实逻辑功能,同时还可以参考设计要求,灵活选择设置或是连接,从而实现各种逻辑功能。而输送模块则是芯片与外部环境进行连接的主要通道,能够促进内部逻辑阵列和器件引脚的连接,同时实现各种电气特征下的输送功能要求。芯片四周通常会排列IOB。

2、FPGA技术特点

FPGA既包含ASIC中的高度可靠性、高集成度和大规模等优势,同时还包括ASIC设计中灵活性差、投资大、设计时间长等问题,
除了上述优势外,FPGA还包括下面几项优点,首先是FPGA能够反复进行擦除和编程。在外部电路保持不变的状态下,通过设计不同逻辑可以完成各种电路功能。其次是投资较小,同时设计比较灵活,在发现问题后可以对设计直接进行更改,从而降低了投片风险程度。

3、FPGA的图象处理系统算法的实现

图像算法处理系统中的存储模块能够将提前准备好的图象数据进行存储,运算单元负责各项计算任务,促进实现各种图像处理算法,只需要将其中的数值进行更换即可。控制模块负责图像算法处理系统中的各种控制工作,辅助图像算法实施,并进行传输。

3.1、存储模块

随着FPGA技术的不断发展,从前众多优秀设计人员留下了大量数字系统成果。为了让其中部分成果能够有效应用于Altera特定设
备结构中,并进行有效应用,Altera企业根据Altera设备中的结构特征在上述成果的基础上进行了有效的优化,从而形成一种LPM
函数和可参数化模块,为此设计人员需要参考相应的设计要求,通过硬件或是图形将语言模块中功能板块恰当地表述出来,并设置好一定的参数,尽量贴近系统要求。在这种设计模式下,能够提升设计效率和可靠性。

3.2、运算单元

运算单元的工作其实就是输出数据信息、落实数字图像算法和读取ROM数字图象中的灰度信息。当一个是三乘三中值邻域滤波器模板对目标图象进行作用时,首先应该了解这一滤波器中的九个数据信息,随后才能更好地使用中值滤波算法,而ROM中所储存的灰度数据主要可以在Verilog HDL的编程下,将其中的具体数值解读出来,同时FPGA技术下的编程工作中是不存在二维数组理念的,为此主要是通过移位寄存器RAM来储存IP核的,并落实邻域图象处理操作,实现各种数字图像处理算法。在一个全面的系统设计当中,例如设计DSP应用系统,需要通过数据缓冲移位寄存器,以移位寄存器RAM为基础的IP核就是一种高效的处理措施。以移位寄存器RAM为基础的IP核属于一种参数化的移位寄存器,同时TAPS值在一定程度上也影响了系统中移位寄存器在一时间点中的输出数据总路数,这种IP核十分适用于有限冲击响应滤波器和线性反馈寄存器。对于以移位寄存器RAM为基础的IP
核想要发挥出应有的作用,就应该先为IP核进行适当的参数设置,主要包括所有TAP的对应数据深度、TAP输出路数、shiftout端
口宽度、shiftin数据宽度、RAM模块类型等。

3.3、控制模块

控制模块在整个系统中是一种核心部件,可以辅助系统的运行,同时融入到整个系统内部。主要负责工作包括辅助运算单元在
ROM中准确读取数据信息,操作运算单元落实图像处理算法,帮助运算单元和数据传输子系统进行信息流通等。

3.4、数据传输模块

数据传输模块其中包含两部分内容,分别是串口通信模块和FIFO传输模块。将图像处理子系统中的时钟设置成五十毫赫兹,将串口通信模块设置成九千六百赫兹波特率。为此可以通过异步FIFO促进图像通信模块和子系统串口之间的跨时钟数据传播,联系。为了让图像算法子系统和上位机PC之间的通信过程更加便捷,通常都是通过通信串口进行数据信息交流。

通过FPGA技术进行图象处理,能够拥有更多的使用优势,比如成本较低、方便落实以及适用范围较广等特点。同时还拥有实时性、集成化、小型化等特点。随着我国微电子技术的发展,图象处理逐渐应用于图象通信以及多媒体等各个领域,而FPGA技术
可以有效促进硬件对实时图象的有效处理,以FPGA技术为基础的图象处理研究也将成为未来信息领域发展的热点。