研究生开始学图像处理
2010-03-14 20:07:00 LIUYUPHOEBE 阅读数 403

      从明天开始,就开始看c++图像处理了,今天看了一下,原来图像处理不像想象中的那么简单,MFC是基础,但更重要的是算法,不过至少要把图像基本的读取,存储等搞懂。用1~2个星期,把书上的基本知识搞懂,再开始弄小波压缩算法。加油!!    

      有不懂得尽量自己搞定,搞不定的问学长!

2015-05-16 09:59:50 wangping623 阅读数 328

        新书《Matlab数字图像处理》终于到了,开始学习新的领域。

        加油!

2017-10-29 20:26:38 wehung 阅读数 520
希望自己能够在计算机视觉上能够有自己的成就
2018-03-09 20:05:30 chenzhaojie1997 阅读数 136

1. 开始    

    最近开始学习《数字图像处理》,用几天时间把所用书籍的前半部分过了一下,感觉还挺感兴趣。想到写博客可能更能给我一个反馈,这样能让我更愿意持续地学习。

    总结了下,在学习《数字图像处理》中,我主要就要抓住两条主线来学习:

        第一条是空域和频域,第二条是具体要实现的功能。

    因为二值化应该是最基本的图像处理操作了(我在项目组一开始接触图像处理的时候,第一个接触的操作就是二值化),这篇博文开始谈二值化。当然这些算法不可能都在我所用书籍中找到,而是结合了网上其他一些更加优秀的博客。

    当然不可能涉及到所有的算法,要是真的涉及到所有的算法不仅我吃不消,而且所获也有限。


2. 二值化方法

    二值化是图像分割最简单的一种方法,可把灰度图像转化成二值化图像。

    二值化主要就是在空域上面操作的,目前没见过在频域上进行的二值化;而且在我看来,这也是不可能的。

    二值化的方法固然有很多种,许多算法看起来结果还行,所以我就不知道用哪一个算法比较好。这是因为在我现在所知里面,缺乏一个描述二值图像好坏的一个量,但是想来这样一个量也是各有偏好的,否则就只有寥寥几个算法了,不会有这么多算法。

    2.1    固定阈值法(平均阈值法)

            使用一个固定的阈值作为图像阈值。或者改进下,使用图像灰度的平均值作为阈值。

    2.2    百分比阈值法    (P-Tile)

            这个方法保证最后二值化之后,白的像素的占比是给定的阈值。另外,如果 grey(P1)>grey(P2),那么P1比P2更易被二值化。

    2.3    基于灰度直方图有双峰的阈值

            这种方法要求先对灰度直方图进行平滑处理,平滑处理之后检测是否为双峰。对于灰度直方图是双峰的灰度图,这样我们会做出判断:谷底,或者双峰的平均值或者,使我们选取的阈值。

            这里需要注意的是如何进行平滑处理:一方面,平滑处理的算法会影响我们的精度;另一方面,平滑处理的算法亦会影响我们的速度。

            在网上看到的算法看起来比较笨拙,不断地进行平均,上限是遍历1000次灰度直方图,没有找到双峰就去你妹的。这个算法简单可行,但是我还有别的思路:实际上平滑要做的就是用一个平滑的函数来拟合原来的直方图,另外,如果三个邻近的直方图连起来接近一条直线,那么就是平滑的。根据上面两点,我们可以在三个直方图之间用一个线性函数来拟合,不断修正,最后得出一个平滑曲线。实际上,上面的算法就是我们这个算法的一个特殊情况:使用的是斜率为0的线性函数;当然我们也可以不用线性函数来拟合,使用二次函数甚至三次函数也是可以的(这一点可以参考经典证明定积分的几种方法,不过证明定积分的时候是以直代曲,现在是以以曲代直)。但是这不仅需要考虑到数学上的精确,还需要考虑到工程上的实用,这样看来,线性函数似乎是最好的。我还没有具体想出这个算法,但是我可以指出这个算法的步骤:

                1. 使用一个线性函数来拟合一定范围的直方(当然线性函数的参数是需要和误差函数挂钩的)

                2. 采用一个误差函数,在更换范围的同时,不断累积误差

                3. 检测误差函数是否在可允许的范围内,如果可以,结束,不可以继续;

                4. 如果在一个规定的时间内结束拟合,如果有双峰,ok;没有就去你妹的。

            如此简单看来,这个算法需要有一些挺多的难点:

                1. 误差函数的选取

                2. 线性函数和误差函数的关系

                3. 允许的误差范围和规定的时间

            另外,很有意思,在网上看见了别的算法:在一定范围内加权平均(类似一个一维算子?)

    2.4    迭代最佳阈值
        该算法先假定一个阈值,然后计算该阈值下的前景灰度平均和背景灰度平均的平均值,如果假定的阈值和这个平均值相等就结束;否则就需要一个收敛的操作:把下一次迭代的阈值置为平均值与假设值的平均值。
        这个算法很美,很希望能写出同样美的程序来描述它。
    2.5    OTSU法(大津法)

        这个算法很有意思:这个算法似乎是从上面这些算法看下来,第一个提出了描述二值图像好坏的一个算法(也有可能是我才疏学浅;若是,望指出)。

        这个算法从最小灰度遍历到最大灰度,当灰度值使得类间方差值取得最大值的时候,取这个灰度作为二值化的阈值。这个算法依赖类间方差函数的实际形状:当目标与背景的大小比例悬殊时,类间方差准则函数可能呈现双峰或多峰,此时效果不好。

    2.6    一维最大熵

        这个算法本质也是提出一个标准:该算法把信息论中的熵的概念引入到图像中,把这个认为是二值图像好坏的标准(之一)。

  

3. 参考资料

    1.      Imageshop : 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。

    2.    《数字图像处理》. 霍宏涛 编著 . 《机械工业出版社》

    3.    参考自 douglax 的CSDN博客:大律法(OTSU法)

    4.    参考自 fanhongweifd 的CSDN博客:一维最大熵阈值分割



2018-10-26 18:43:27 wzx479 阅读数 169

1.基本概念

从定义理解概念是最严谨的。所以首先搞清楚维基百科中这些概念的定义。

计算机视觉(CV):

Computer vision is a field that includes
methods for acquiring, processing, analyzing, and understanding images and, in
general, high-dimensional data from the real world in order to produce
numerical or symbolic information, e.g., in the forms of decisions.[1]

直译过来就是

计算机视觉是一个学科/领域,它包括获取、处理、分析和理解图像或者更一般意义的真实世界的高维数据的方法;它的目的是产生决策形式的数字或者符号信息。

计算机图像学(CG):

Computer graphics is a sub-field of
computer science which studies methods for digitally synthesizing and
manipulating visual content. Although the term often refers to the study of
three-dimensional computer graphics, it also encompasses two-dimensional
graphics and image processing.[2]

直译过来就是

计算机图形学是计算机科学的一个子领域,它包括数字合成和操作可视内容(图像、视频)的方法。尽管这个术语通常指三维计算机图形学的研究,但它也包括二维图形学和图像处理。

图像处理(IP):

In imaging science, image processing is
processing of images using mathematical operations by using any form of signal
processing for which the input is an image, such as a photograph or video
frame; the output of image processing may be either an image or a set of characteristics
or parameters related to the image.[3]

直译过来就是

在图像科学中,图像处理是用任何信号处理等数学操作处理图像的过程,输入时图像(摄影图像或者视频帧),输出是图像或者与输入图像有关的特征、参数的集合。

2.区别和联系[4]

2.1 精简的概括

Computer Graphics和Computer
Vision是同一过程的两个方向。Computer Graphics将抽象的语义信息转化成图像,Computer Vision从图像中提取抽象的语义信息。Image
Processing探索的是从一个图像或者一组图像之间的互相转化和关系,与语义信息无关。

2.2 从输入输出角度看

(1)区别

Computer Graphics,简称 CG 。输入的是对虚拟场景的描述,通常为多边形数组,而每个多边形由三个顶点组成,每个顶点包括三维坐标、贴图坐标、rgb 颜色等。输出的是图像,即二维像素数组。

Computer Vision,简称
CV。输入的是图像或图像序列,通常来自相机、摄像头或视频文件。输出的是对于图像序列对应的真实世界的理解,比如检测人脸、识别车牌。

Digital Image Processing,简称 DIP。输入的是图像,输出的也是图像。Photoshop 中对一副图像应用滤镜就是典型的一种图像处理。常见操作有模糊、灰度化、增强对比度等。

(2)联系

CG 中也会用到 DIP,现今的三维游戏为了增加表现力都会叠加全屏的后期特效,原理就是
DIP,只是将计算量放在了显卡端。

CV 更是大量依赖 DIP 来打杂活,比如对需要识别的照片进行预处理。

最后还要提到近年来的热点——增强现实(AR),它既需要 CG,又需要 CV,当然也不会漏掉
DIP。它用 DIP 进行预处理,用 CV 进行跟踪物体的识别与姿态获取,用 CG 进行虚拟三维物体的叠加。

(3)图解

这里还有一张图,简明地表达了CV、CG、DIP和AI的区别和联系。

2.3 从问题本身看

(1)区别

从问题本身来说,这三者主要以两类问题区分:是根据状态模拟观测环境,还是根据观测的环境来推测状态。假设观测是Z,状态是X:Computer
Graphics是一个Forwad Problem (Z|X): 给你光源的位置,物体形状,物体表面信息,你如何根据已有的变量的状态模拟出一个环境出来。

Computer Vision正好相反,是一个Inverse Problem (X|Z):你所有能得到的都是观测信息(measurements),
根据得到的每一个Pixel的信息(颜色,深度),我要来估计物体环境的特征和状态出来,比如物体运动(Tracking),三维结构(SFM),物体类别(Classification
and Segmentation)等等。

对于Image Processing来说,它恰好介于两者之间,两种问题都有。但对于State-of-art的研究来说,Image Processing更偏于Computer Vision, 或者看上去更像Computer Vision的子类。尽管这三类研究中,随着CV领域的不断进步,以及越来越高级相机传感器出现(Depth Camera, Event
Camera),很多算法都被互相用到,但是从Motivation来看,并没有太大变化。

(2)联系

得益于这几个领域的共同进步,所以你能看到Graphics和Computer Vision现在出现越来越多的交集。如果根据观测量(图片),Computer
Vision可以越来越准确的估计出越来越多的变量,那么这些变量套到Graphics算法中,就可以模拟出一个跟真实环境一样的场景出来。

与此同时,Graphics需要构建更真实的场景,也希望能够将变量更加接机与实际,或者通过算法估计出来,这就引入了Vision的动机。这也是近年来三维重建算法,同时大量发表在Graphics和Vision的会议的原因。随着CV从2D向3D发展,以后两者的交集会越来越大,除了learning以外的其他很多问题融合并到一个领域我也不会奇怪。

附:
VR 是电脑构建的3维立体;
AR 是计算机找准一个基点,绘制的三维图形;
混合现实,是基于计算机辅助生成一个现实环境,再基于这个现实环境,生成一个多视角的三维图形。

参考文献

[1]
https://en.wikipedia.org/wiki/Computer_vision

[2]https://en.wikipedia.org/wiki/Computer_graphics_(computer_science)

[3]
https://en.wikipedia.org/wiki/Image_processing

[4] 张静, 知乎,

http://www.zhihu.com/question/20672053/answer/15854031

Mark!!!

博文 来自: xiaomian92
没有更多推荐了,返回首页