图像处理_图像处理算法 - CSDN
图像处理 订阅
《图像处理》是科学出版社2009年出版的图书,作者是孙即祥。 展开全文
《图像处理》是科学出版社2009年出版的图书,作者是孙即祥。
信息
出版时间
2009年11月
开    本
16开
出版社
科学出版社
ISBN
9787030240873  [1]
作    者
孙即祥 [1]
定    价
35.00 元
书    名
图像处理
图像处理内容简介
《图像处理》内容简介:图像信息处理是一个多阶段、多途径、多目标的信息处理过程。本册书深入系统地阐述和论证了图像信息处理中共性的和基础性的知识,以及有关前端的处理理论、方法和技术。《图像处理》涉及关于图像信息处理的概述,有关的数学知识,视觉知识,图像的数学描述,图像的数字化,图像变换,图像增强,图像恢复等内容。某些章节介绍的技术内容既可以作为独立的技术,产生用户所需的输出,满足用户的需求,也可以是后续的某些信息处理的预处理。《图像处理》所涉及的内容及讨论的深度适合电子科学与工程类、控制理论与工程类、计算机科学与技术类、仪器科学与技术类以及其他有关专业和研究方向的研究生、本科高年级学生作为教材或教学参考书使用,也可供相关专业的科研人员参考。
收起全文
  • 目录 ...初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...

    目录

    1、导入库文件

    2、设计GUI

    3、调用摄像头

    4、实时图像处理

    4.1、阈值二值化

    4.2、边缘检测

    4.3、轮廓检测

    4.4、高斯滤波

    4.5、色彩转换

    4.6、调节对比度

    5、退出系统


    初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试有一定帮助,项目演示效果如下:

    1、导入库文件

    这里主要使用PySimpleGUI、cv2和numpy库文件,PySimpleGUI库文件实现GUI可视化,cv2库文件是Python的OpenCV接口文件,numpy库文件实现数值的转换和运算,均可通过pip导入。

    import PySimpleGUI as sg  #pip install pysimplegui
    import cv2  #pip install opencv-python
    import numpy as np #pip install numpy

    2、设计GUI

    基于PySimpleGUI库文件实现GUI设计,本项目界面设计较为简单,设计800X400尺寸大小的框图,浅绿色背景,主要由摄像头界面区域和控制按钮区域两部分组成。效果如下所示:

    GUI代码如下所示:

        #背景色
        sg.theme('LightGreen')
    
        #定义窗口布局
        layout = [
          [sg.Image(filename='', key='image')],
          [sg.Radio('None', 'Radio', True, size=(10, 1))],
          [sg.Radio('threshold', 'Radio', size=(10, 1), key='thresh'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(40, 15), key='thresh_slider')],
          [sg.Radio('canny', 'Radio', size=(10, 1), key='canny'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='canny_slider_a'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='canny_slider_b')],
          [sg.Radio('contour', 'Radio', size=(10, 1), key='contour'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='contour_slider'),
           sg.Slider((0, 255), 80, 1, orientation='h', size=(20, 15), key='base_slider')],
          [sg.Radio('blur', 'Radio', size=(10, 1), key='blur'),
           sg.Slider((1, 11), 1, 1, orientation='h', size=(40, 15), key='blur_slider')],
          [sg.Radio('hue', 'Radio', size=(10, 1), key='hue'),
           sg.Slider((0, 225), 0, 1, orientation='h', size=(40, 15), key='hue_slider')],
          [sg.Radio('enhance', 'Radio', size=(10, 1), key='enhance'),
           sg.Slider((1, 255), 128, 1, orientation='h', size=(40, 15), key='enhance_slider')],
          [sg.Button('Exit', size=(10, 1))]
        ]
    
        #窗口设计
        window = sg.Window('OpenCV实时图像处理',
                   layout,
                   location=(800, 400),
                   finalize=True)

    3、调用摄像头

    打开电脑内置摄像头,将数据显示在GUI界面上,效果如下所示:

    代码如下所示:

        #打开内置摄像头
        cap = cv2.VideoCapture(0)
        while True:
            event, values = window.read(timeout=0, timeout_key='timeout')
    
            #实时读取图像
            ret, frame = cap.read()
    
            #GUI实时更新
            imgbytes = cv2.imencode('.png', frame)[1].tobytes()
            window['image'].update(data=imgbytes)
    
        window.close()

    4、实时图像处理

    4.1、阈值二值化

    进行阈值二值化操作,大于阈值values['thresh_slider']的,使用255表示,小于阈值values['thresh_slider']的,使用0表示,效果如下所示:

     代码如下所示:

    if values['thresh']:
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)[:, :, 0]
        frame = cv2.threshold(frame, values['thresh_slider'], 255, cv2.THRESH_BINARY)[1]

    4.2、边缘检测

    进行边缘检测,values['canny_slider_a']表示最小阈值,values['canny_slider_b']表示最大阈值,效果如下所示:

    代码如下所示:

    if values['canny']:
        frame = cv2.Canny(frame, values['canny_slider_a'], values['canny_slider_b'])

    4.3、轮廓检测

    轮廓检测是形状分析和物体检测和识别的有用工具,连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度,效果如下所示:

     代码如下所示:

    if values['contour']:
        hue = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        hue = cv2.GaussianBlur(hue, (21, 21), 1)
        hue = cv2.inRange(hue, np.array([values['contour_slider'], values['base_slider'], 40]),
                          np.array([values['contour_slider'] + 30, 255, 220]))
        cnts= cv2.findContours(hue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
        cv2.drawContours(frame, cnts, -1, (0, 0, 255), 2)
    

    4.4、高斯滤波

    进行高斯滤波,(21, 21)表示高斯矩阵的长与宽都是21,标准差取values['blur_slider'],效果如下所示:

     代码如下所示:

    if values['blur']:
        frame = cv2.GaussianBlur(frame, (21, 21), values['blur_slider'])
    

    4.5、色彩转换

    色彩空间的转化,HSV转换为BGR,效果如下所示:

     代码如下所示:

    if values['hue']:
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        frame[:, :, 0] += int(values['hue_slider'])
        frame = cv2.cvtColor(frame, cv2.COLOR_HSV2BGR)

    4.6、调节对比度

    增强对比度,使图像中的细节看起来更加清晰,效果如下所示:

      代码如下所示:

    if values['enhance']:
        enh_val = values['enhance_slider'] / 40
        clahe = cv2.createCLAHE(clipLimit=enh_val, tileGridSize=(8, 8))
        lab = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)
        lab[:, :, 0] = clahe.apply(lab[:, :, 0])
        frame = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)
    

    5、退出系统

    直接break即可跳出循环。

    if event == 'Exit' or event is None:
        break

    拓展学习:基于Python的人工智能美颜系统 

    请关注公众号,回复关键字:OpenCV实时图像处理,获取项目资源。

    展开全文
  • 数字图像处理实战

    2019-07-29 14:17:46
    本课程内容主要选取自stanford EE368/CS232 课程的...本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。
  • 图像处理 图像处理,顾名思义,就是对图像进行处理。关于图像处理,创始人之间对它的定义和范围没有一致的看法。但我们可以粗略看成,图像处理就是对一幅图像(或是代表一幅图像的相关信息)进行加减乘除(当然没...

    图像处理

    这里写图片描述
    图像处理,顾名思义,就是对图像进行处理。关于图像处理,创始人之间对它的定义和范围没有一致的看法。但我们可以粗略看成,图像处理就是对一幅图像(或是代表一幅图像的相关信息)进行加减乘除(当然没这么简单的运算了)等操作,最终得到我们期望得到的效果。
    这些效果大致可以分为两类,也就是主要的应用领域:其一,是服务于人的,也就是输出成我们更容易观察理解的图片。
    比如拍地模糊的图片,变得清晰可见。
    模糊变清晰
    另一类,服务的对象是机器,输出的结果方便机器理解(虽然机器理解后,最后还是服务于人==),机器理解这部分就涉及到另一个领域:计算机视觉。
    其实,从图像处理到计算机视觉这个连续统一体内并没有明确的部分。更为恰当的方式,是将这个整体,按照处理的等级来分,即低级、中级、高级处理。
    - 低级处理以输入、输出均是图像为特征;
    - 中级处理输入为图像,但是输出是图像所蕴含的特征信息,包括边缘、轮廓及物体的标识等。这一部分输出的特征,是为计算机处理及对不同目标的分类识别做准备;
    - 高级处理的任务涉及“理解”已识别目标的总体。
    既然已经知道了图像处理的目的和作用,那具体有哪些部分呢?
    - 滤波与增强
    - 图像还原
    - 彩色图像处理
    - 小波与多分辨率处理
    - 压缩
    - 形态学处理
    - 分割
    - 表示和描述
    - 目标识别
    balabala讲了这么多,什么是图像处理?用一句话总结就是:对图像(或图像信息)进行各种运算处理,得到便于人类理解,或者便于机器后续处理的方法。
    至于,怎么处理?就得一步步来,先搭建基础的知识手脚架,一块砖一块砖地码,堆起各个方法模块的楼层后,才能站在楼顶看风景。

    展开全文
  •  线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像...
    要学习高斯模糊我们首先要知道一些基本概念:
    

    线性滤波与卷积的基本概念

          线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。

          对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。

          Correlation 和 Convolution可以说是图像处理最基本的操作,但却非常有用。这两个操作有两个非常关键的特点:它们是线性的,而且具有平移不变性shift-invariant。平移不变性指我们在图像的每个位置都执行相同的操作。线性指这个操作是线性的,也就是我们用每个像素的邻域的线性组合来代替这个像素。这两个属性使得这个操作非常简单,因为线性操作是最简单的,然后在所有地方都做同样的操作就更简单了。

          实际上,在信号处理领域,卷积有广泛的意义,而且有其严格的数学定义,但在这里不关注这个。

          2D卷积需要4个嵌套循环4-double loop,所以它并不快,除非我们使用很小的卷积核。这里一般使用3x3或者5x5。而且,对于滤波器,也有一定的规则要求:

          1)滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。

          2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。

          3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

          4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

    神奇的卷积核

          上面说到,对图像的滤波处理就是对图像应用一个小小的卷积核,那这个小小的卷积核到底有哪些魔法。下面我们一起来领略下一些简单但不简单的卷积核的魔法。

     

    1、啥也不做

     

          哈哈,大家可以看到啥了吗?这个滤波器啥也没有做,得到的图像和原图是一样的。因为只有中心点的值是1。邻域点的权值都是0,对滤波后的取值没有任何影响。

     

     

          下面我们动点真格的。

     

    2、图像锐化滤波器Sharpness Filter

     

          图像的锐化和边缘检测很像,首先找到边缘,然后把边缘加到原来的图像上面,这样就强化了图像的边缘,使图像看起来更加锐利了。这两者操作统一起来就是锐化滤波器了,也就是在边缘检测滤波器的基础上,再在中心的位置加1,这样滤波后的图像就会和原始的图像具有同样的亮度了,但是会更加锐利。

     

     

          我们把核加大,就可以得到更加精细的锐化效果

     

     

          另外,下面的滤波器会更强调边缘:

     

     

          主要是强调图像的细节。最简单的3x3的锐化滤波器如下:

     

                                          

     

          大家应该也看出来了,锐化滤波器实际上就是计算当前点和周围点的差别,然后将这个差别加到原来的位置上。

     

    3、边缘检测Edge Detection

     

          我们要找水平的边缘:需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。

     

     

          为什么这个滤波器可以寻找到水平边缘呢?因为用这个滤波器卷积相当于求导的离散版本:你将当前的像素值减去前一个像素值,这样你就可以得到这个函数在这两个位置的差别或者斜率。下面的滤波器可以找到垂直方向的边缘,这里像素上和下的像素值都使用:

     

     

          再下面这个滤波器可以找到45度的边缘:取-2不为了什么,只是为了让矩阵的元素和为0而已。

     

     

          那下面这个滤波器就可以检测所有方向的边缘:

     

                                          

     

          为了检测边缘,我们需要在图像对应的方向计算梯度。用下面的卷积核来卷积图像,就可以了。但在实际中,这种简单的方法会把噪声也放大了。另外,需要注意的是,矩阵所有的值加起来要是0.

     

                                           

     

    4、浮雕Embossing Filter

     

          浮雕滤波器可以给图像一种3D阴影的效果。只要将中心一边的像素减去另一边的像素就可以了。这时候,像素值有可能是负数,我们将负数当成阴影,将正数当成光,然后我们对结果图像加上128的偏移。这时候,图像大部分就变成灰色了。

     

          下面是45度的浮雕滤波器

     

     

          我们只要加大滤波器,就可以得到更加夸张的效果了

     

     

          这种效果非常的漂亮,就像是将一副图像雕刻在一块石头上面一样,然后从一个方向照亮它。它和前面的滤波器不同,它是非对称的。另外,它会产生负数值,所以我们需要将结果偏移,以得到图像灰度的范围。

     

     

     

                                                          A:原图像。B:锐化。C:边缘检测。D:浮雕

     

    5、运动模糊Motion Blur

          运动模糊可以通过只在一个方向模糊达到,例如下面9x9的运动模糊滤波器。注意,求和结果要除以9。

     

          这个效果就好像,摄像机是从左上角移动的右下角。

     

      看了一些好玩的滤波器后我们可以进入主题了,首先来看均值模糊:

    均值模糊Box Filter (Averaging)

     

          我们可以将当前像素和它的四邻域的像素一起取平均,然后再除以5,或者直接在滤波器的5个地方取0.2的值即可,如下图:

     

     

          可以看到,这个模糊还是比较温柔的,我们可以把滤波器变大,这样就会变得粗暴了:注意要将和再除以13.

     

     

          所以,如果你想要更模糊的效果,加大滤波器的大小即可。或者对图像应用多次模糊也可以。

     

     

     

     

     

     

     

    高斯模糊

          其实模糊滤波器就是对周围像素进行加权平均处理,均值模糊很简单,周围像素的权值都相同,所以不是很平滑。高斯模糊就有这个优点,所以被广泛用在图像降噪上。特别是在边缘检测之前,都会用来移除细节。那么下面我们就看看高斯模糊的权值是如何分配的。

     

    正态分布的权重
      正态分布显然是一种可取的权重分配模式。在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。
    高斯函数
      上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布
    正态分布的密度函数叫做"高斯函数"(Gaussian function)。它的一维形式是:
    一维形式
      其中,μ是x的均值,σ是x的标准差。因为计算平均值的时候,中心点就是原点,所以μ等于0。即:
    进一步推导
      根据一维高斯函数,可以推导得到二维高斯函数:
    二维高斯函数
      有了这个函数 ,就可以计算每个点的权重了。
      假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
    权重矩阵
      更远的点以此类推。下面就是5*5的高斯滤波器和平滑效果:

     

    展开全文
  • Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用...
  • 图像处理总结概念

    2018-05-08 13:29:41
    1.直方图:一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级...

    1.直方图:一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。

    数字图像在范围[0,G]内总共有L个灰度级,直方图为h(rK)=nk

    rK是去见[0,G]内的第K级亮度,nk是灰度级为rK的像素数。

    归一化直方图:

    1.1直方图对比:

    方法描述:有两幅图像patch(当然也可是整幅图像),分别计算两幅图像的直方图,并将直方图进行归一化,然后按照某种距离度量的标准进行相似度的测量。

    方法的思想:基于简单的向量相似度来对图像相似度进行度量。

    优点:直方图能够很好的归一化,比如256个bin条,那么即使是不同分辨率的图像都可以直接通过其直方图来计算相似度,计算量适中。比较适合描述难以自动分割的图像。

    缺点:直方图反应的是图像灰度值得概率分布,并没有图像的空间位置信息在里面,因此,常常出现误判;从信息论来讲,通过直方图转换,信息丢失量较大,因此单一的通过直方图进行匹配显得有点力不从心。

     

    矩阵分解的方法

    方法描述:将图像patch做矩阵分解,比如SVD奇异值分解和NMF非负矩阵分解等,然后再做相似度的计算。

    方法思想:因为图像本身来讲就是一个矩阵,可以依靠矩阵分解获取一些更加鲁棒的特征来对图像进行相似度的计算。

    基于SVD分解的方法优点:奇异值的稳定性,比例不变性,旋转不变性和压缩性。即奇异值分解是基于整体的表示,不但具有正交变换、旋转、位移、镜像映射等代数和几何上的不变性,而且具有良好的稳定性和抗噪性,广泛应用于模式识别与图像分析中。对图像进行奇异值分解的目的是得到唯一、稳定的特征描述,降低特征空间的维度,提高抗干扰能力。

    基于SVD分解的方法缺点是:奇异值分解得到的奇异矢量中有负数存在,不能很好的解释其物理意义。

    基于NMF分解的方法:将非负矩阵分解为可以体现图像主要信息的基矩阵与系数矩阵,并且可以对基矩阵赋予很好的解释,比如对人脸的分割,得到的基向量就是人的“眼睛”、“鼻子”等主要概念特征,源图像表示为基矩阵的加权组合,所以,NMF在人脸识别场合发挥着巨大的作用。

    基于矩阵特征值计算的方法还有很多,比如Trace变换,不变矩计算等。

    基于特征点方法

    方法描述:统计两个图像patch中匹配的特征点数,如果相似的特征点数比例最大,则认为最相似,最匹配

    方法思想:图像可以中特征点来描述,比如sift特征点,LK光流法中的角点等等。这样相似度的测量就转变为特征点的匹配了。

    以前做过一些实验,关于特征点匹配的,对一幅图像进行仿射变换,然后匹配两者之间的特征点,选取的特征点有sift和快速的sift变形版本surf等。

    方法优点:能被选作特征点的大致要满足不变性,尺度不变性,旋转不变等。这样图像的相似度计算也就具备了这些不变性。

    方法缺点:特征点的匹配计算速度比较慢,同时特征点也有可能出现错误匹配的现象。

    基于峰值信噪比(PSNR)的方法

    当我们想检查压缩视频带来的细微差异的时候,就需要构建一个能够逐帧比较差视频差异的系统。最

    常用的比较算法是PSNR( Peak signal-to-noise ratio)。这是个使用“局部均值误差”来判断差异的最简单的方法,假设有这两幅图像:I1和I2,它们的行列数分别是i,j,有c个通道。每个像素的每个通道的值占用一个字节,值域[0,255]。注意当两幅图像的相同的话,MSE的值会变成0。这样会导致PSNR的公式会除以0而变得没有意义。所以我们需要单独的处理这样的特殊情况。此外由于像素的动态范围很广,在处理时会使用对数变换来缩小范围。

                

                  

    基于结构相似性(SSIM,structural similarity (SSIM) index measurement)的方法

    结构相似性理论认为,自然图像信号是高度结构化的,即像素间有很强的相关性,特别是空域中最接近的像素,这种相关性蕴含着视觉场景中物体结构的重要信息;HVS的主要功能是从视野中提取结构信息,可以用对结构信息的度量作为图像感知质量的近似。结构相似性理论是一种不同于以往模拟HVS低阶的组成结构的全新思想,与基于HVS特性的方法相比,最大的区别是自顶向下与自底向上的区别。这一新思想的关键是从对感知误差度量到对感知结构失真度量的转变。它没有试图通过累加与心理物理学简单认知模式有关的误差来估计图像质量,而是直接估计两个复杂结构信号的结构改变,从而在某种程度上绕开了自然图像内容复杂性及多通道去相关的问题.作为结构相似性理论的实现,结构相似度指数从图像组成的角度将结构信息定义为独立于亮度、对比度的,反映场景中物体结构的属性,并将失真建模为亮度、对比度和结构三个不同因素的组合。用均值作为亮度的估计,标准差作为对比度的估计,协方差作为结构相似程度的度量。

    图像模板匹配:一般而言,源图像与模板图像patch尺寸一样的话,可以直接使用上面介绍的图像相似度测量的方法;如果源图像与模板图像尺寸不一样,通常需要进行滑动匹配窗口,扫面个整幅图像获得最好的匹配patch。

    模板匹配:是一种在源图像中寻找与图像patch最相似的技术,常常用来进行目标的识别、跟踪与检测。其中最相似肯定是基于某种相似度准则来讲的,也就是需要进行相似度的测量。另外,寻找就需要在图像上进行逐行、逐列的patch窗口扫描,当然也不一定需要逐行逐列的扫描,当几个像素的误差比计算速度来的不重要时就可以设置扫描的行列步进值,以加快扫描和计算的时间消耗。下面就对相似度测量和模板匹配进行介绍(所有的图像都假定是灰度图)。

             

             

    1.2反向投影:一种记录给定图像中像素点如何适应直方图模型像素分布方式的一种方法,也就是说首先计算某一种特征的直方图模板,然后使用模板在去寻找图像中存在的该特征的方法。  作用:反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域,也就是定位模板图像出现在输入图像的位置。

    反向投影如何查找(工作)?

    查找的方式就是不断的在输入图像中切割跟模板图像大小一致的图像块,并用直方图对比的方式与模板图像进行比较。

    反向投影的结果是什么?

    反向投影的结果包含了:以每个输入图像像素点为起点的直方图对比结果。可以把它看成是一个二维的浮点型数组,二维矩阵,或者单通道的浮点型图像。

    假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:

    1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;

    2)生成临时图像的直方图;

    3)用临时图像的直方图和模板图像的直方图对比,对比结果记为c;

    4)直方图对比结果c,就是结果图像(0,0)处的像素值;

    5)切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;

    6)重复(1)~(5)步直到输入图像的右下角。

    1.3.直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像元取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

    直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

    直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):

    (1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。

    (2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。

    这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度;变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。


    2.滤波:图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。目的:1、消除图像中混入的噪声;2、为图像识别抽取出图像特。要求:1、不能损坏图像轮廓及边缘 ;2、图像视觉效果应当更好。

     

    滤波和模糊的区别:拿高斯滤波来举例:滤波一般可以分为高通滤波和低通滤波,对于高斯低通滤波就会产生模糊效果,如果对于高斯高通滤波就会产生锐化的效果。所以通常是:高斯滤波就是指使用高斯函数进行滤波;高斯模糊就是指低通滤波。

    高通:边缘增强、边缘提取 ;低通:钝化图像、去除噪音 ;带通:删除特定频率、增强中很少用

    2.1.线性滤波器:在图像处理中,对邻域中的像素的计算为线性运算时,如利用窗口函数进行平滑加权求和的运算,或者某种卷积运算,都可以称为线性滤波。常见的线性滤波有:均值滤波、高斯滤波、盒子滤波、拉普拉斯滤波等等,通常线性滤波器之间只是模版系数不同。

    均值滤波(normalized box filter):用其像素点周围像素的平均值代替元像素值,在滤除噪声的同时也会滤掉图像的边缘信息。在OpenCV中,可以使用boxFilter和blur函数进行均值滤波。均值滤波的核为

     

    高斯滤波(Gaussian filter):高斯滤波为最常用的滤波器,具有可分离性质,可以把二维高斯运算转换为一维高斯运算,其本质上为一个低通滤波器。在OpenCV中可通过函数GaussianBlur进行操作。

     

    2.2. 非线性滤波:非线性滤波利用原始图像跟模版之间的一种逻辑关系得到结果,如最值滤波器,中值滤波器。比较常用的有中值滤波器和双边滤波器。

    中值滤波(median filter):中值滤波用测试像素周围邻域像素集中的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果非常明显。在OpenCV中,可以使用函数medianBlur进行操作。

     

    双边滤波(bilateral filter):双边滤波在平滑图像时能够很好的保留边缘特性,但是其运算速度比较慢。在OpenCV中,可以使用函数bilateralFilter进行操作。

    w(x,y)为加权系数,取决于定义域核和值域核的乘积。

    3边缘检测:Edge Detection 我们要找水平的边缘:需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。边缘是图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来表示,数字图像中求导是利用差分近似微分来进行的,实际上常用空域微分算子通过卷积来完成。

    一般图像边缘检测方法主要有如下四个步骤:

    1)图像滤波:传统边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出的是,大多数滤波器在降低噪声的同时也造成了了边缘强度的损失,因此,在增强边缘和降低噪声之间需要一个折衷的选择。

    2)图像增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度的幅值来完成的。

    3)图像检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判断依据是梯度幅值。

    4)图像定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。近20多年来提出了许多边缘检测算子。

    一阶导数算子

    1)Roberts算子:是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘的走向垂直。Roberts操作实际上是求旋转45度两个方向上微分值的和。定位精度高,在水平和垂直方向的效果好,但对噪声敏感。两个卷积核Gx、Gy分别为

                          

    采用1范数衡量梯度的幅度为=如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

    2)Sobel算子:是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单的求平均再差分,而是加强了中心像素上下左右4个方向像素的权值,运算结果是一副边缘图。Sobel算子通常对灰度渐变和噪声较多的图像处理的比较好。两个卷积核Gx、Gy分别为:

                                   

    采用范数衡量梯度的幅度为如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

    3)Prewitt算子:是一种边缘样板算子,利用像素点上下左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑的作用。由于边缘点像素的灰度值与其邻域点的灰度值显著不同,在实际应用中通常采用微分算子和模板匹配的方法检测图像的边缘。Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得比较好。两个卷积核Gx、Gy分别为:

                         

    采用范数衡量梯度的幅度为:如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

    二阶导数算子也可以检测边缘,利用二阶导数算子检测阶梯状边缘需将检测算子与图像卷积并确定过零点。

    1)  Laplacian算子:拉普拉斯算子是一种常用的二阶导数算子。实际中可根据二阶导数算子过零点的性质来确定边缘的位置。对于一个连续函数f(x,y),它在位置(x,y)的拉普拉斯值定义如下:

    在图像中,计算函数的拉普拉斯值也可借助各种模板实现。这里对模板的基本要求是对应中心像素的系数应是正的,而对应中心像素邻近像素的系数应是负的,且它们的和应该是零。拉普拉斯算子检测方法常常产生双像素边界,而且这个检测方法对图像中的噪声相当敏感,不能检测边缘的方向,所以很少直接使用拉普拉斯算子进行边缘检测。常用的两种模板分别如图所示:

                       

    2)LOG算法:

    LOG算法步骤如下:1、 取样得到的高斯低通滤波器对输入图像滤波。2、 计算第一步得到图像的拉普拉斯。3、 找到步骤2所得图像的零交叉。

    3)  Canny算子:Canny算子把边缘检测问题转换为检测单位函数极大值的问题来考虑。他利用高斯模型,借助图像滤波的概念指出一个好的边缘检测算子应该具有3个指标:1.低失误率,既要少将真的边缘丢弃,也要少将非边缘判为边缘;2.高位置精度,检测出的边缘应在真正的边界上;3.单像素边缘,即对每个边缘有唯一的响应,得到的边界为单像素宽。

    考虑到上述三个条件,Canny提出了判定边缘检测算子的3个准则:信噪比准则、定位精度准则和单边缘响应准则。

    1. 信噪比准则:信噪比越大,提取的边缘质量越高。信噪比SNR定义为

     

    2.  定位精度准则边缘定位的精度L定义如下

    其中,G’(x)和h’(x)分别是G(x)和h(x)的导数。L越大表明定位精度越高。

    3. 单边缘响应准则:为了保证单边缘只有一个响应。检测算子的脉冲响应导数的零交叉点的平均距离D(f’)应满足

    满足上述三个条件的算子称为Canny算子。Canny边缘检测算法的步骤如下:

    (1) 用高斯滤波器平滑图像;(2)用一阶偏导的有限差分来计算梯度的幅值和方向;(3)对梯度幅值进行非极大值抑制;(排除非边缘像素,仅仅保留细线条)(4)用双阈值算法进行检测和链接边缘。

    Robert:边缘定位精度较高,对于陡峭边缘且噪声低的图像效果较好,但没有进行平滑处理,没有抑制噪声的能力。

    sobel和prewitt:进行了平滑处理,对噪声具有一定抑制能力,但容易出现多像素宽度。精度不高,边缘较粗糙。

    Laplacian:对噪声较为敏感,使噪声能力成分得到加强,容易丢失部分边缘方向信息,造成一些不连续的检测边缘,抗噪声能力较差。

    log:抗噪声能力较强,但会造成一些尖锐的边缘无法检测到。

    canny:最优化思想的边缘检测算子,同时采用高斯函数对图像进行平滑处理,但会造成将高频边缘平滑掉,造成边缘丢失,采用双阈值算法检测和连接边缘。

     

    4.形态学:在特殊领域运算形式——结构元素(Sturcture Element),在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。运算结构是输出图像的相应像素。运算效果取决于结构元素大小内容以及逻辑运算性质。形态学,即数学形态学(mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质〈最具区分能力-most discriminative)的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中,成为图像增强技术的有力补充。

    膨胀、腐蚀、开、闭运算是数学形态学最基本的变换。

    结构元素:简单地定义为像素的结构(形状)以及一个原点(又称为锚点),使用形态学滤波涉及对图像的每个像素应用这个结构元素,当结构元素的原点与给定的像素对齐时,它与图像相交部分定义了一组进行形态学运算的像素。原则上,结构元素可以是任何形状,但通常使用简单的形状,比如方形、圆形和菱形,而原点位于中心位置(基于效率的考虑)。设有两幅图像A, S。若A是被处理的对象, 而S是用来处理A的, 则称S为结构元素。结构元素通常都是一些比较小的图像, A与S的关系类似于滤波中图像和模板的关系.

    腐蚀和膨胀两个滤波操作也运算在每个像素周围像素集合上(邻域),这是由结构元素定义的。当应用到一个给定的像素时,结构元素的锚点与该像素的位置对齐,而所有与他相交的像素都被包括在当前像素集合中。腐蚀替换当前像素为像素集合中找到的最小的像素值,而膨胀则替换为像素集合中找到的最大像素值。当然,对于二值图像,每个像素只能被替换为白色像素或黑色像素

    腐蚀和膨胀的主要功能:1)消除噪声(2)分割出独立的图像元素,在图像中连接相邻的元素(3)寻找图像中的极大值或者极小值区域(4)求出图像的梯度。

    4.1、膨胀(dilate):膨胀就是求局部最大值的操作。从数学角度来说,就是将图像与核进行卷积,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。模板和输入图像对应位置的元素只要有一个与的结果不为0,则结果不为0.给图像中的对象边界添加元素。用3x3的结构元素,扫描二值图像中的每一个像素,用结构元素与其覆盖的二值图像做与运算,如果都为0,则结果图像中值为0,否则为1。结果:输入图像中的前景对象扩大一圈。

    膨胀的作用和腐蚀相反, 膨胀能使物体边界扩大, 具体的膨胀结果与图像本身和结构元素的形状有关。膨胀常用于将图像中原本断裂开来的同一物体桥接起来, 对图像进行二值化之后, 很容易使一个连通的物体断裂为两个部分, 而这会给后续的图像分析(如要基于连通区域的分析统计物体的个数〉造成困扰,此时就可借助膨胀桥接断裂的缝隙

    4.2、腐蚀(erode):腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作。腐蚀操作会使图像中的高亮区逐渐减小。模板和输入图像中对应位置的元素相与的结果全不为0时,结果才为0。删除对象边界的某些像素。用3x3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做与运算,如果都为1,则结果图像中值为1,否则为0.结果:前景对象减小一圈。

    随着腐蚀结构元素的逐步增大,小于结构元素的物体相继消失。由于腐蚀运算具有上述的特点,可以用于滤波。选择适当大小和形状的结构元素,可以滤除掉所有不能 完全包含结构元素的噪声点。然而,利用腐蚀滤除噪声有一个缺点,即在去除噪声点的同时,对图像中前景物体的形状也会有影响,但当我们只关心物体的位置或者个数时,则影响不大。

    4.3、开运算:开运算是先腐蚀后膨胀。主要用于消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积,同时抑制比结构元小的亮细节。

    4.4、闭运算:是先膨胀后腐蚀。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积,同时抑制比结构元小的暗细节。

    4.5、形态学梯度:就是将膨胀图和腐蚀图相减。对二值化图像进行这一操作可以将边缘突出来,可以使用形态学梯度来保留物体的边缘轮廓。

    4.6、顶帽变换:就是用源图像减去开运算图像。因为开运算带来的结果是放大了裂缝或者局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围区域更明亮的区域。顶帽一般用于校正不均匀光照的影响(补充:均匀光照在从背景中提取目标的处理中扮演核心的角色)。

    4.7、黑帽变换:就是用闭运算减去源图像。黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域。黑帽运算一般用来分离比邻近点暗一些的斑块。

    4.8、为什么开运算可以去除目标外的孤立点?

    目标外的孤立点是和目标像素值一样的点,而非背景像素点,即为1而非0(0表示选取的空洞或背景像素值)。

    使用腐蚀,背景扩展,该孤立点被腐蚀掉,但是腐蚀会导致目标区域缩小一圈,因此需要再进行膨胀操作,将目标区域扩展回原来大小。所以,要使用开运算去除目标外的孤立点。

    4.9、为什么闭运算可以去除目标内的孔?

    目标内的孔,属于周围都是值为1,内部空洞值为0.目的是去除周围都是1的像素中间的0值。

    闭运算首先进行膨胀操作,目标区域扩张一圈,将目标区域的0去除,但是目标区域同时也会向外扩张一圈,因此需要使用腐蚀操作,使得图像中的目标区域恢复到之前的大小。

     

    5、漫水填充:将与种子点相连的像素相近的连通域替换成指定颜色。如果存在mask,不会填充mask的非零像素。比如边缘检测输出图像可作为mask图,操作的结果总是某个连续的区域。

    作用:1、标记或分离目标区域;2、获取掩码区域,只处理掩码指定的像素点,加速处理过程。

     

    6、图像金字塔:是图像中多尺度表达的一种,最主要用于图像分割,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔式一系列以金字塔形状排列的,分辨率逐步降低且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到到达某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。层级越高图像越小,分辨率越低。

     通常有两种类型的图像金字塔,分别是:

    1)数字金字塔(Gaussuan pyramin)-用来向下采样,主要的图像金字塔,主要用来向下采样图像

    2)拉普拉斯金字塔(Laplaican pyramid)-用来从金字塔底层图像重建上层未采样的还原,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用,是从金字塔底层图像中向上采样,重建一个图像。

    要从金字塔的第i层生成第i+1层(将第i层表示为Gi),先要用高斯核对Gi进行卷积,然后删除所有偶数行和列,新得到的图像面积会变为源图像的1/4.按上述过程对输入图像G0执行操作就可以得到整个金字塔。

    当图像金字塔的上层移动时,尺寸和分辨率会降低。在OpenCV中,从金字塔上一层图像生成下一级图像时可以使用PryDown,而通过PryUp将现有的图像在每个维度上放大两倍。

    注意:PryDown和PryUp函数互逆的,PryUp不是降采样的逆操作。图像首先在每个维度上扩大为原来的两倍,新增的行(偶数行)以0填充,然后给指定的滤波器进行卷积(实际上是在每个维度都扩大为原来两倍的过滤器)去估计“丢失”像素的近似值。

    6.1.高斯金字塔

    高斯金字塔是通过高斯平滑和亚采样获得一些采样图像,即是第K层高斯金字塔通过平滑、亚采样就可以获得第K+1层高斯图像。高斯金字塔包括一些列的低通滤波器,其截止频率从上一层到下一层以因子2逐渐增加,所以高斯金字塔可以跨越很大的频率范围。

         a.对图像向下采样

        为了获得第G(i+1)的金字塔图像,采取如下方法:

             (1)对图像G(i)进行高斯内核卷积

             (2)将所有偶数列和偶数行去除

      得到的图像即为G(i+1)的图像,很明显G(i+1)只有源图像的四分之一,通过对输入图像G(i)(原始图像)不停的迭代上述步骤就会得到整个金字塔,即向下采样会丢失图像的信息,缩小了图像

         b.对图像的向上采样

    如果想放大图像,则需要通过向上取样操作得到

           (1)将图像在每个方向上扩大为原来的两倍,新增的行和列以0填充

           (2)使用先前同样的内核(乘以4)与放大后的图像卷积,获得“新增像素”的近似值。

    得到的图像即为放大后的图像,但是与源图像想必会发现比较模糊,因为在缩放中已经丢失了一些信息。如果想在缩放过程中减少信息的丢失,这些数据就形成了拉普拉斯金字塔。

    6.2.拉普拉斯金字塔

      i层的拉普拉斯金字塔的数学定义为:

                       L(i) = G(i) -UP(G(i+1))&g

    式中的G(i)表示第i层的图像,UP()操作是将源图像中位置为(x,y)的像素映射到目标图像的(2X+1,2Y+1)位置,即在进行向上取样,&表示卷积,g为5*5的高斯内核.

    使用OpenCV中函数直接进行拉普拉斯运算: L(i) = G(i) -PryUP(G(i+1))

    图像金字塔的一个重要应用就是图像分割

    6.3.尺寸调整:resize()函数

         resize()函数是OpenCV中专门用来调整图像大小的函数

         此函数将源图像精确的转换为指定尺寸的目标图像。如果源图像中设置了ROI(Region Of Internet,感兴趣区域),那么resize()函数会对源图像的ROI区域进行调整图像尺寸的操作,来输出到目标图像中。若目标中已经设置了ROI区域,不难理解resize()函数将会对源图像进行尺寸调整并填充到目标图像的ROI中。

     

    7二值化

    7.1全局二值化:一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。

    全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。

    局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。

    7.2局部自适应二值化:局部二值化也有一个缺陷。存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。

    局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E+b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。

    根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等

     

    8、霍夫变换:霍夫变换是图像处理中用来从图像中分离出具有某种相同特征的几何形状(通常,直线,圆等)的常用方法。经典的霍夫变换常用来检测直线,圆,椭圆等。它是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用霍夫变换可以方便地得到边界曲线而将不连续的边缘像素点连接起来。霍夫变换的主要优点是受噪声和曲线间断的影响小。利用霍夫变换还可以直接检测某些已知形状的目标。

     

    9.重映射:把一个图像中一个位置的像素放置到另一个图片指定位置的过程.简单的说就是改变图片的位置(左,右,上,下,颠倒)。

    为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.

    10、仿射变换: 仿射变换(Affine Transformation)是空间直角坐标系的变换,从一个二维坐标变换到另一个二维坐标,仿射变换是一个线性变换,他保持了图像的“平行性”和“平直性”,即图像中原来的直线和平行线,变换后仍然保持原来的直线和平行线,仿射变换比较常用的特殊变换有平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

     

    11、图像匹配:目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harris、SIFT、SURF、ORB等等,不同的特征点检测和匹配方法尤其独特的优势和不足;

    特征点匹配经过Ransac算法优化后仍存在错误匹配点对,需要优化后的匹配结果进行量化评价;

    特征点检测和匹配评价一般包括两个部分,分别为检测和匹配的评价。

    1.  特征检测(feature detection)、特征提取(extraction)和匹配(matching) 这三步,可以看做是目标检测、图像配准和拼接等工作的非常重要的一步。

    2.  特征检测、特征选择、特征提取、特征描述和特征匹配

           特征检测: 根据用户的需求在图像中寻找满足定义的特征,包括角点、Blob点和边缘点。检测的结果:有或没有。

           特征选择: 为了选择稳定和可靠的特征,在检测到的特征集合中,需要进一步约束,通过类似于非极大值抑制、对比度阈值约束等条件保留显著特征。选择的结果:特征子集。

           特征提取: 特征选择确定稳定可靠的特征子集后,需要提取特征的位置(Location)、方向(Orientation)和尺度(Scale)信息。方向和尺度信息主要是为支持旋转和尺度变化。

           特征描述: 结合特征(点)邻域信息,使用一定的描述规则来对特征区域进行量化并抽取能代表该特征的描述信息,为了后续的匹配,一般用特征向量(feature vector)表示。

          特征匹配: 对提取到的特征,需要通过使用一定的方法来进一步判断对应的特征是否相同(或近似),对特征向量一般使用欧式距离或最邻近距离比(NNDR)进行判定,满足一定的条件约束,则认为两个特征相近,否则剔除。一般还会通过RANSAC进一步约束剔除误匹配点。   

     

     

     

    展开全文
  • 图像处理(matlab)

    2018-09-11 22:35:04
    1.基本函数: iread('文件路径'); idisp(); 2.一元操作: imd=idouble(im);... //将彩色图像转变成灰度图像。 ihist();//显示每一个像素值出现的次数 im=igamma(im,1/0.45); //伽马编码,一种非线性一...

    1.基本函数:

    iread('文件路径');

    idisp();

    2.一元操作:o[u,v]=f(I[u,v])

    imd=idouble(im);  //将像素从unit8(范围在0-255的整数像素)到范围在[0,1]的双精度值

    grey=imono(im);    //将彩色图像转变成灰度图像。

    ihist();//显示每一个像素值出现的次数

    im=igamma(im,1/0.45); //伽马编码,一种非线性一元操作

    3.二元操作:o[u,v]=f(I_{1}[u,v],I_{2}[u,v])

    isamesize(image1,image2);  //将2缩放并裁剪到跟1相同的大小

    ........

    4.空间操作o[u,v]=f(I[u+i,v+j])

     

    4.1互相关 o[u,v]=\sum _{(i,j)\epsilon w }I[u+i,v+j]K[i,j], K是互相关核,对于每一个输出像素,对应输入图像中的像素窗口w要逐个元素地与互相关核K相乘。

    在工具箱中,互相关使用函数iconv表示。iconv(image,K);

     

    4.1.1平滑处理(光滑化、模糊化或者散焦)

    K=ones(21,21)/21^2; //每一个输出像素都是输入图像中与之相对应的21x21相领像素的平均值  ->平均值滤波

    G(u,v)=\frac{1}{2\pi\sigma ^{2} }e^{-\frac{u^{2}+v^{2}}{2\sigma ^{2}}}  二维高斯函数(关于原点对称,曲线下方体积为1)的扩展由标准差参数\sigma控制。 ->高斯滤波

    K=kguass(5); //指定标准差为5像素

     

    4.1.2边界检测:
     lena=iread('C:\Users\Administrator\Desktop\matlab实验照片\2.jpeg','double','grey');

     p=lena(60,:);  //在v=60处图像中的一条水平线

    沿着这个横截面的一阶倒数是p^{^{'}}[v]=p[v]-p[v-1],一阶倒数可以用diff函数计算。->亮度变化的倒数

    在v点处的导数也可以写成对称的一阶差分:p^{^{'}}[v]=\frac{1}{2}(p[v+1]-p[v-1])

    它等同于和下面的一维互相关核求互相关运算:

                                                                     K=(-\frac{1}{2} 0 \frac{1}{2})

    将图像与这个核求互相关:

    K=[-0.5 0 0.5];

    idsip(iconv(lena,K),'invsigned')    ->图片具有高水平梯度的竖直边缘清晰可见。效果如下所示(上面为原图):

      

    利用索伯互相关核计算水平梯度,利用三行水平梯度的加权值。

    Du=ksobel,上图为原图,下面为处理之后的

    坎尼算子:

    算法大致流程:

    1、求图像与高斯平滑滤波器卷积:

    2、使用一阶有限差分计算偏导数的两个阵列P与Q:

    3、幅值和方位角:

    4、非极大值抑制(NMS ) :细化幅值图像中的屋脊带,即只保留幅值局部变化最大的点。

    将梯度角的变化范围减小到圆周的四个扇区之一,方向角和幅值分别为:

    非极大值抑制通过抑制梯度线上所有非屋脊峰值的幅值来细化M[i,j],中的梯度幅值屋脊.这一算法首先将梯度角θ[i,j]的变化范围减小到圆周的四个扇区之一

    edges=icanny(lena,2);效果如下所示:

    4.2模板匹配O[u,v]=s(T,W)

    函数s(T,W)是一个标量测度,用来描述两幅相同大小的图像T和W之间的相似性。

    常用方法有:绝对差值(SAD),差值平方和(SSD)以及互相关(NCC)

     

    展开全文
  • 图像处理

    2013-10-18 10:27:53
    利用VC实现图像的特殊显示效果 经常看电视的朋友们不知注意...经过这些特效处理后的图像增强了观众们的视觉效果,它们看上去仿佛是使用3D技术作的,这也是为什么这种技术那么流行的原因吧。其实,我们完全可以用一些简
  • 图像处理入门必看

    2017-11-27 22:36:25
    (原MyBlog)前要说明这段时间在网上找资料学习图像处理的相关知识,在网上看到这篇写得相当不错的文章,在大牛允许转载的情况下,特搬家至此,方便更多的初学者能够看到。正文开始最近有人问我图像处理怎么研究,怎么...
  • 图像处理之深度学习

    2018-05-05 22:02:57
    第一种 自我激发型 基于图像处理的方法,如图像增强和图像复原,以及曾经很火的超分辨率算法。都是在不增加额外信息的前提下的实现方式。 1. 图像增强 图像增强是图像预处理中非常重要且常用的一种方法,图像...
  • 图像处理 点算子 图像处理中最基本的运算就是点运算,就是针对每个像素点进行计算。 特征提取与图像处(三) 直方图 点算子 伽马压缩 在传输过程中引入的噪声在黑暗区域被压扁,这与视觉系统的噪声敏感区域相...
  • 一、imfinfo函数——查看图像文件信息,注意参数是文件路径和文件名,不是图像对应的矩阵。 >> imfinfo('C:\Users\zhulf\Desktop\1.jpg') ans =   Filename: 'C:\Users\zhulf\Desktop\1.jpg'  ...
  • 图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。...
  • 什么是数字图像处理?历史、以及它所研究的内容。 说起图像处理,你会想到什么?你是否真的了解这个领域所研究的内容。纵向来说,数字图像处理研究的历史相当悠久;横向来说,数字图像处理研究的话题相当广泛。 ...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • 写在前头:说到数字图像处理,不得不提起MATLAB。这是一款非常方便的仿真软件,绝大多数的图像处理可以用MATLAB完成。  有人问,处理图片,用PS岂不是更好。两者各有优点,如果需要将10000幅图片转换成灰度...
  • 傅立叶变换在图像处理中有非常重要的作用。因为不仅傅立叶分析涉及图像处理很多方面,傅立 叶改进算法,比如离散余弦变换,gabor与小波在图像处理中也有重要的分量。傅立叶变换在图像处理的重要作用:  1.图像增强...
  • 图像处理之常见二值化方法汇总 图像二值化是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多。越 精准的方法计算量也越大。本文主要介绍四种常见的二值处理方法,通常情况下可以满 足大多数图像处理...
  • 图像处理入门教程

    2018-04-20 19:00:46
    最近有人问我图像处理怎么研究,怎么入门,怎么应用,我竟一时语塞。仔细想想,自己也搞了两年图像方面的研究,做个两个创新项目,发过两篇论文,也算是有点心得,于是总结总结和大家分享,希望能对大家有所帮助。在...
  • 本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑、高斯平滑、不同算子的图像锐化知识...
1 2 3 4 5 ... 20
收藏数 615,813
精华内容 246,325
关键字:

图像处理