精华内容
下载资源
问答
  • 前两个part讲了一些常用基础类和函数、操作方法之类。那我们要完整地能够处理一幅图像需要进行哪些操作步骤呢?首先我们要明确进行图像处理目的:获得目标区域所在位置。无论颜色追踪、对直线或者圆追踪、...

    初稿完成于2020.2.4

    前两个part讲了一些常用的基础类和函数、操作方法之类。那我们要完整地能够处理一幅图像需要进行哪些操作步骤呢?首先我们要明确进行图像处理的目的:获得目标区域所在的位置。无论是颜色追踪、对直线或者圆的追踪、还是对某个固定图案的追踪,无论是单目标还是多目标,最终都需要获取最后的目标所在的位置。那么如何从原本的图像得到目标的位置呢?这就需要按照以下的操作步骤来进行:

    获取图像->去噪(滤波、阈值化之类)->边缘检测->提取固定区域->给出目标点坐标

    获取图像就像part2中“代码流程”讲解的一样,定义一个VideoCapture类型的变量,使用>>运算符来获取实时图像存储到Mat容器中。去噪是图像处理中相当重要的一个环节,我们需要在一幅图像中将干扰物排除在外,得到最终所需要的区域,part3部分将围绕“去噪”的操作进行展开。常用的操作是“滤波”操作。在图像的模糊中,滤波分为线性滤波、非线性滤波和形态学滤波。在part1中已经介绍了形态学滤波的基本操作,大家自行回顾复习;这个部分会讲线性滤波和非线性滤波的原理以及其在OpenCV中所对应的API函数。

    一、关于图像滤波

    1、图像的模糊和锐化

    首先我们引入两个概念,“信噪比”和“滤波器”。“信噪比”,顾名思义,就是信号电压与噪声电压的比值,而图像的信噪比应该等于信号与噪声的功率谱之比(不知道什么是功率谱的戳蓝色字体)。我们进行模糊与锐化处理的目的就是提高信噪比,使最后信息提取的准确度更高。“滤波器”是一种选频装置,可以使信号中特定的频率成分通过,而极大地衰减其他频率成分。滤波器包含了“高通滤波器”和“低通滤波器”,顾名思义就是允许高频分量通过的滤波器和允许低频分量通过的滤波器——在下面也会提到这两者。在图像处理中,滤波就是用滤波器模糊图像的过程。

    一般图像的能量主要集中在其低频部分,而图像的边缘部分以及噪声主要分布在高频部分。于是,图像的“模糊”就是对图像进行平滑处理,削弱其高频部分(目的是去除高频部分中的噪声),但是这同时也会模糊图像的边缘信息;而图像的“锐化”则是为了使图像的边缘、轮廓变得清晰,便于提取图像中需要的特征。我们进行图像的模糊与锐化的目的就是——提高信噪比,便于最后的特征提取的处理。

    在“图像”的处理中,我们通常所说的“滤波”指的是对图像的平滑处理(就是图像的模糊),也就是低通滤波;如果指的是图像的锐化,一般来说会强调是“高通”滤波。因此本教程中如果没有强调是高通滤波,则默认指低通滤波。

    图像滤波的目的是在尽量保留图像的细节特征的前提下对目标图像的噪声进行抑制。这一部分的处理好坏直接决定了所得结果的准确性(因为搞不好信噪比就会下降,有用信息没法被有效提取)。因此,记住图像处理中的操作步骤——先模糊、再锐化,模糊是为了提高信噪比,而锐化是为了突出图像边缘、便于最后提取目标区域。

    还要明确的一点就是滤波的操作是怎样进行的——就是对原图像的每个像素周围一定范围内的像素进行运算(比如part1中所讲的腐蚀就是对一定区域内的像素求最小值的运算),运算的范围就称为掩膜邻域

    2、(线性滤波VS非线性滤波)&&(相关VS卷积运算)

    在讨论线性滤波与非线性滤波的区别、相关运算和卷积运算的区别之前,我们首先要介绍很多杂七杂八的关于图像滤波概念,比如邻域运算、锚点、归一化等等:

    邻域运算是指当输出图象中每个像素是由对应的输入像素及其一个邻域内的像素共同决定时的图像运算。意思就是,输出图像中的像素点由|输入图像中的相应位置的像素点|及其周围的像素点进行一些奇奇怪怪的运算得到。而邻域运算用到了一个东西叫做“邻域算子”,邻域算子决定了邻域运算进行的是怎样的运算操作(就是这个输入图像的像素点和周围的像素点进行的是怎样的奇奇怪怪的运算)。

    线性运算就是算子做加权求和的运算,用到的运算方式就是加减乘除之类;而非线性运算则不止使用简单的基本运算,还包括逻辑运算(比如位运算)、求最大值最小值、中值操作等等不能通过简单的基本运算法则而得到的运算。显然,线性滤波就是采用线性运算的算子进行的滤波,非线性滤波就是采用非线性运算的算子进行的滤波。这里大家可能会有疑惑,那形态学滤波操作,比如腐蚀与膨胀不就是非线性运算中的一种吗(最大最小值操作)?确实是这样,但是因为形态学滤波操作在图像处理中很常用也很重要,因此在各种教材中都是单独作为一个部分来讲解。下面还介绍了线性邻域算子的两种运算的区别——

    线性邻域运算包括相关运算与卷积运算两种,两者原理类似,但实现上存在着细微差别。其实严格意义上来讲,滤波指的是相关运算——但是在图像处理的邻域中,很多教材已经把滤波和卷积的概念模糊掉了,因此图像处理中的滤波可以理解成是包含了相关运算与卷积运算两种的(并且在各种教材中常常用的名词是”卷积“,将滤波与卷积反而等价处理了)。其实这也是有一定道理的,因为图像处理中所用的邻域算子通常是180°对称的,且在卷积之前会对图像进行填充,因此在运算里面它俩的结果就没有差别了,这里仅仅是明确一下概念,其实搞混了也不影响最后结果。

    简单来说,相关运算就是将输入图像的对应像素点与掩膜作“加权求和”运算,并将运算结果填入输出图像中的”锚点“中(锚点就是被平滑的那个点,尽管这两者的解释有点”A解释B,B解释A“的循环在里面,嗯大家自行体会体会理解一下就好)。在OpenCV的几乎所有函数中,让你填锚点的地方,如果锚点填写负值,则表示锚点取卷积核的中央(这也很容易理解嘛,就是以输入图像中对应位置的那个像素点为中心,取邻域算子的范围);并且在函数原型中都填了锚点的默认值是(-1,-1),所以,函数调用中碰到要你写锚点的地方,不填就完事了。

    相关运算就是直接用掩膜与输入图像进行加权求和,并填入锚点位置。

    下面是用掩膜进行相关运算,其中c=a1*b1+a2*b2+a3*b3+a4*b4+a5*b5+a6*b6+a7*b7+a8*b8+a9*b9

    在这里插入图片描述

    要注意的是,相关运算不改变图像大小,边缘部分将进行填充(填充的内容根据算法的不同而异)。

    而卷积运算则要稍微复杂一些,先要将卷积核进行180°的旋转(在平面内部旋转哈,你要是硬要向着纸面前面或后面进行翻转那我也没办法/摊手);然后再进行加权求和的运算。

    下面是用卷积核进行相关运算,其中c=a9*b1+a8*b2+a7*b3+a6*b4+a5*b5+a4*b6+a3*b7+a2*b8+a1*b9

    在这里插入图片描述

    这是一个卷积运算的完整栗子——

    在这里插入图片描述

    可以看到,卷积运算会改变图像大小,因为卷积运算不会对图像的边缘部分进行填充——但是图像处理中进行的卷积运算一般都是先进行填充再进行卷积的,因此如果你调用OpenCV中的相关函数,你会发现图像大小并没有改变。(你在各种API函数中会看见一个叫做“边界模式”的东西,就是对图像边缘部分进行填充的方式啦)

    还有一个东西叫做“归一化”,就是要把需要处理的数据经过处理后限制在你需要的一定范围内——一般灰度值范围为[0,255],归一化的意思就是将运算后的图像的范围缩减到这个范围之内(显然,经过滤波运算后,很可能得出的结果超出了255的范围)。在很多OpenCV中提供的很多API会有是否要归一化的选项。

    二、线性滤波

    线性滤波的过程,就是用线性滤波算子整个儿“走”过一遍输入图像,并将计算结果填入输出图像的过程(不同的线性滤波利用不同的卷积核进行卷积,因此能得到不同的效果)。有关线性滤波与非线性滤波的综合代码示例在随附程序part3中。

    1、方框滤波

    方框滤波所用的核长这样:
    K=α[111...1111...1...........111...1] K=\alpha\left[ \begin{matrix} 1 & 1 & 1 & ... & 1\\ 1 & 1 & 1 & ... & 1\\ .. & .. & .. & ... & ..\\ 1 & 1 & 1 & ... & 1 \end{matrix} \right]
    其中
    α={1ksize.widthksize.heightnormalize=true1normalize=false \alpha= \begin{cases} \frac{1}{ksize.width*ksize.height} & normalize=true\\ 1 & normalize=false \end{cases}
    也就是说,你可以选择对结果进行归一化或者不归一化。前面说了归一化可以把数据限定在所需要的一定范围内——那进行归一化的目的是显然的,为了能够让结果仍然是一幅能够正常显示的图像嘛;那不进行归一化的目的是什么呢?非归一化的方框滤波用于计算每个像素邻域内的积分特性,像素的积分特性在某些场合要用到,比如计算某一可变区域的像素值总和的时候,利用积分图来运算比正常累加要快很多,且图像越大效果越显著。

    方框滤波所提供的API函数原型:

    boxFilter(
        InputArray src,		//输入图像
        OutputArray dst,	//输出图像
        int ddepth,			//输出图像的深度,-1代表使用原图的深度
        Size ksize(n,n),	//内核尺寸,n越大效果越明显
        Point anchor=Point(-1,-1),	//锚点,若点坐标为负值,则表示锚点在核的核心
        bool normalize=true,			//ture表示被归一化,false表示没有被归一化
        int borderType=BORDER_DEFAULT);//用于推断图像外部像素的某种边界模式,一般不用管它
    

    示例:

    boxFilter(srcImage,dstImage,-1,Size(3,3));
    

    2、均值滤波

    嗯均值滤波,顾名思义就是在运算邻域内求均值——看一眼上面方框滤波的核你会发现,均值滤波就是归一化后的方框滤波/摊手(所以用不到积分特性的时候,它俩没区别,嗯)。显然,它的核长这样:
    K=1ksize.widthksize.height[111...1111...1...........111...1] K=\frac{1}{ksize.width*ksize.height}\left[ \begin{matrix} 1 & 1 & 1 & ... & 1\\ 1 & 1 & 1 & ... & 1\\ .. & .. & .. & ... & ..\\ 1 & 1 & 1 & ... & 1 \end{matrix} \right]
    你还可能总会见到什么4邻域平均、8邻域平均之类的概念,意思就是以这样的核进行卷积运算:

    在这里插入图片描述

    均值滤波的函数原型在这里:

    blur(
        InputArray src,		//输入图像
        OutputArray dst,	//输出图像
        Size ksize(n,n),	//内核尺寸,n越大效果越明显
        Point anchor=Point(-1,-1),		//锚点,若点坐标为负值,则表示锚点在核的核心
    	int borderType=BORDER_DEFAULT);	//用于推断图像外部像素的某种边界模式,一般不用管它
    

    呐,示例:

    blur(srcImage,dstImage,Size(5,5));
    

    3、高斯滤波

    嗯,高斯滤波就是利用正态分布的算子和图像进行卷积的过程,也称高斯模糊。因为在一般图像的噪声分布概率中,高斯噪声出现的概率是相当高的,于是与之相应的高斯滤波在去噪的过程中效果也是非常好的。其缺陷是效率不是最高的。

    其中,一维零均值高斯函数长这样:
    G(x)=exp(x22σ2) G(x)=exp(\frac{-x^2}{2\sigma^2})
    二维零均值高斯函数长这样:
    G0(x,y)=Ae(xμx)22σx2+(yμy)22σy2 G_0(x,y)=Ae^{\frac{-(x-\mu_x)^2}{2\sigma_x^2}+\frac{-(y-\mu_y)^2}{2\sigma_y^2}}
    其中,高斯分布参数Sigma决定了高斯函数的宽度。sigma的取值决定了高斯函数窗口的大小。在实际中经常看到sigma取值0.8或者1。正常情况下我们由高斯函数计算得到的模板是浮点型数,但是有些情况我们为了加快计算需要将模板处理成整数,对于常见的3x3或者5x5其整数模板长成这样:
    116×121242121                        1273×1474141626164726412674162616414741 \frac{1}{16}\times \begin{array}{|c|c|c|} \hline 1&2&1\\ \hline 2&4&2\\ \hline 1&2&1\\ \hline \end{array}~~~~~~~~~~~~~~~~~~~~~~~~ \frac{1}{273}\times \begin{array}{|c|c|c|} \hline 1&4&7&4&1\\ \hline 4&16&26&16&4\\ \hline 7&26&41&26&7\\ \hline 4&16&26&16&4\\ \hline 1&4&7&4&1\\ \hline \end{array}

    GaussianBlur(
        InputArray src,		//输入图像
        OutputArray dst,	//输出图像
        Size ksize(n,n),	//内核尺寸,n越大效果越明显
        double sigmaX,		//高斯核函数在X方向的标准偏差
        double sigmaY=0;	//高斯核函数在Y方向的标准偏差
        int borderType=BORDER_DEFAULT);//用于推断图像外部像素的某种边界模式,一般不用管它
    
    /*其中,若sigmaY为零,就将它设为sigmaX;
    若sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来*/
    

    要注意的一点是,**ksize.heightksize.width必须为正奇数!!!**示例:

    GaussianBlur(srcImage,dstImage,Size(3,3),0,0);
    

    三、非线性滤波

    线性滤波器中,每个像素点的输出值是一些输入像素的加权和,因此线性滤波器容易构造,且更方便我们从频率响应的角度来分析。但是如果图像中的噪声不是高斯噪声,而是散粒噪声(意思就是存在一些像素点的值远远高于或低于周围像素点的值),这个时候线性滤波的弊端就体现出来了——线性滤波无法排除“极端值”对于图像的影响,即图像中的散粒噪声无法通过线性滤波而去除。因此我们引入了“中值滤波”——

    1、中值滤波

    中值滤波的思想就是用像素点的一个邻域中各点值的中值代替它原来的值,让图像的像素值接近的真实值。中学数学中就学过什么平均值、极值、中位数、方差等等之类的概念,中值就是中位数啦,好处也很显然——能够排除极端值的干扰。因此,在图像处理中,如果在邻域运算中采用“中值滤波”操作,能够排除极端值的干扰,也就是能够消除散粒噪声。不仅如此,中值滤波还能够克服线性滤波模糊图像边缘的缺点,能够比较好的保留图像边缘信息。

    主要的缺点就是——慢。贼慢,大概是均值滤波花费时间的5倍以上(因为均值滤波只需要作加权和,可是中值滤波要排序,效率最高的内排序算法的平均时间复杂度大概是。。。log2nlog_2n)。还有就是,对于细节过多的图像,中值滤波没法很好地保留完整图像的细节信息。

    嗯我们来区分一下高斯噪声和散粒噪声。高斯噪声的定义是概率密度函数符合高斯分布(就是正态分布)的噪声,包括。。。等会,我发现一个问题!百度百科上是这么说的:

    在这里插入图片描述

    毛星云的那本OpenCV教材上是这么说的:

    在这里插入图片描述

    嗯,所以它俩到底是包含关系还是对立关系???(满脸问号)好了我们不管它,我们只要记住,中值滤波能消除与周围值格格不入的极值点,好的就是这样。

    来,我们看下OpenCV提供的中值滤波接口的API函数原型:

    void medianBlur(
        InputArray src,		//输入图像
        OutputArray dst,	//输出图像
        int ksize);		//注意啊!!!这里是int类型的,不是Size类的啊!!!
    					//还有!!!这里必须要填大于1的奇数啊!!!不然会报错啊!!!
    

    重要的事情说三遍!!!ksize只能填大于1的奇数!!!ksize只能填大于1的奇数!!!(加上上面注释里的一遍,嗯三遍了)示例:

    medianBlur(srcImage,dstImage,7);
    

    2、双边滤波

    首先,引入双边滤波里的两个权重域的概念:空间域(spatial domain S)和像素范围域(range domain R),分别受空间权重与相似权重的影响。

    顾名思义,空间权重与像素位置有关,为像素之间的距离(欧式距离,空间度量);相似权重与像素值大小有关,为像素值之间的距离(辐射距离,相似性度量)。意思就是,从两个不同的角度来分析——一个是像素点之间隔得多远,一个是邻域像素之间相差有多大。

    双边滤波就是由空间域与像素范围域共同影响所得到的滤波效果——当空间权重远大于相似权重时(也就是邻域内基本只受空间距离的影响下),双边滤波的效果就基本类似于高斯滤波,都由高斯函数主要决定算子的权值,这样就能有效去除低频噪声;但在图像的边缘地区,这时候相似权重的比重加大(因为像素点之间的差异大了嘛),因此能够很好地保留图像的边缘信息,不至于使在高斯滤波中一样将边缘模糊掉。

    但是因为双边滤波会很好地保留图像的边缘信息——因此,随之带来的缺点就是,高频噪声无法被有效消除(毕竟边缘信息与高频噪声都处于高频段)。

    那么,空间权重与相似权重各自的影响分别有多大呢?双边滤波器受3个参数的控制:滤波器半宽N、参数δs和δr。N越大,平滑作用越强;δd和δr分别控制着空间邻近度因子Wd和亮度相似度因子Wr的衰减程度。

    呐,这是空间邻近度因子:
    d(i,j,k,l)=exp((ik)2+(jl)22σd2) d(i,j,k,l)=exp(-\frac{(i-k)^2+(j-l)^2}{2\sigma_d^2})
    其对应的滤波的图示:

    在这里插入图片描述

    这是亮度相似度因子:
    r(i,j,k,l)=exp(f(i,j)f(k,l)22σr2) r(i,j,k,l)=exp(-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2})
    其对应的滤波的图示:

    在这里插入图片描述

    两者相乘后,就会产生依赖于数据的双边滤波权重函数:
    w(i,j,k,l)=exp((ik)2+(jl)22σd2f(i,j)f(k,l)22σr2) w(i,j,k,l)=exp(-\frac{(i-k)^2+(j-l)^2}{2\sigma_d^2}-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2})
    下面是其对应的API函数:

    CV_EXPORTS_W void bilateralFilter( 
        InputArray src,		//输入图像
        OutputArray dst,	//输出图像 
        int d,	//每个像素邻域的直径范围。若这个值非正数,则函数会从第五个参数sigmaSpace计算该值
        double sigmaColor, 	//颜色空间过滤器的sigma值,越大表明该像素邻域内有越宽广的颜色会被混合到一起
        double sigmaSpace,	//坐标空间滤波器的sigma值,越大表明颜色相近的较远的像素将相互影响,
        					//当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace. 
        int borderType=BORDER_DEFAULT );//用于推断图像外部像素的某种边界模式,一般不用管它
    

    例子:

    bilateralFilter(srcImage, dstImage, 25, 25 * 2, 25 / 2);
    

    要注意的一点是,双边滤波尽管考虑的很全面,但非常慢(我刚刚试了一下,用电脑跑的时候如果d>20帧率已经低于10了,树莓派会比电脑慢很多。。。)这是这五种滤波里面最慢的orz慎重使用(一般也不需要那么高的准确度,效率很重要啊喂)。

    嗯这一篇讲了图像的线性/非线性滤波操作,侧重于讲解其原理部分,因为我认为只要懂了原理,对于其对应的API函数调用是很轻松的。并且只有真正“懂”了图像处理,才能自己独立的写完一个图像相关的项目,而不是碰到题目就上网搜现成的算法,尽管大部分时候也能用,但总归不是自己的东西(而且很多搜到的算法我认为准确度并不高,那也是人家业余时间学了会图像就写了放在网上的居多)。代码想要熟悉一下的话点开随附的part3代码,并自己动手操作一遍。

    展开全文
  • (1)在多媒体计算机中,声卡是获取音频信息主要器件。 (2)声卡功能:采集来自话筒、收录机等音源信号,并将其数字化形成数字音频;将数字音频还原为模拟音频信号,待放大后送到扬声器输出;对数字化音频进行...
  • 高级python脚本,可查看文件夹并告诉您哪些视频和/或图像文件包含人物。 保存这些检测快照和所有检测日志文件。 注意:它递归。 您可以扫描文件夹文件夹。 这将跳过非图像/视频文件。 在以下位置查看演示...
  • 以下是可以使用的方法: <script language="php"> . . . 语句 与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix风格的注释方式: /* C,...
  • 大多数可用索引结构都对应以下几点权衡:搜索时间搜索质量每个索引向量使用内存大小训练时间无监督训练对外部数据需求获取Faiss 完整版文档完整文档(包括一个指南)可以参阅 GitHub wiki 页:...
  • 最大的不同,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    可我找不到任何方法来声明这样函数——感觉我需要一个返回指针函数,返回指针指向返回指针函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致局部数组,或者由其他参数...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    可我找不到任何方法来声明这样函数——感觉我需要一个返回指针函数,返回指针指向返回指针函数……,如此往复,以至无穷。 12  数组大小 13 1.23 能否声明和传入数组大小一致局部数组,或者由...
  • Multi-view 多视图学习

    2021-05-25 16:53:54
    在文本分类中,例如,垃圾邮件过滤问题,所有邮件都可以作为未标记数据,标记数据的获取要求用户标注哪些是垃圾邮件,哪些不是,如果使用传统监督学习方法,需要用户标记上千个邮件作为样本,才能使训练学习器有较好...

    多视图学习就是从多个角度去学习,然后数据进行预测提高准确性。

    一 半监督学习

    半监督学习问题在真实世界中大量存在,以下列举几例:

    在文本分类中,例如,垃圾邮件过滤问题,所有邮件都可以作为未标记数据,标记数据的获取要求用户标注哪些是垃圾邮件,哪些不是,如果使用传统的监督学习方法,需要用户标记上千个邮件作为样本,才能使训练的学习器有较好的过滤性能,而几乎没有用户愿意花如此多的时间标记邮件,在只有少量的用户标记邮件和大量的未标记邮件的情况下,使用半监督学习方法训练垃圾邮件过滤器可能是一个好的选择。在图像处理中,例如,计算机辅助医学图像分析问题,可以从医院获得大量的医学图像作为未标记数据,但如果要求医学专家把这些图像中的病灶都标识出来,往往是不现实的,一般只能对少量医学图像中的病灶进行标识,所以需要使用半监督学习方法来减少对标记数据的需求,在自然语言处理中,例如,句法分析问题,为了训练一个好的句法分析器需要构造句子/句法树,这是一项十分耗时的工作,构造几千个句法树可能要耗费一个语言学家几年的时间,而可以作为未标记数据使用的句子是普遍存在的,考虑未标记数据的半监督学习能解决语言学家的困难,上述实例表明,随着信息技术的飞速发展,我们面临的问题是,数据大量存在,但获取数据的标记却需要耗费大量的人力物力,传统的监督学习方法在标记数据较少的情况下很难获得好的预测性能"半监督学习正是为了解决这类问题而提出,在理论和实际中都具有重要意义。

    1.1多视图的半监督学习

    1.1.1多视图数据

    在一些实际问题中,对于同一事物可以从多种不同的途径或不同的角度对其进行描述,这多种描述构成事物的多个视图(multi view)。本文用带下标的xi表示第i个数据点,用带上标的x(t)表示数据的第i个视图,则多视图数据可表示为xi={x1x2,…,xn}其中,表示视图的个数,多视图数据在真实世界中广泛存在,以下列举几例:在网页分类问题中,既可以根据网页本身包含的信息来对网页进行分类,也可以利用链接到该网页的超链接所包含的信息来进行分类,这样,网页数据就可以用两个视图表示,刻画网页本身包含信息的特征集构成第一个视图,刻画超链接所包含信息的特征集构成第二个视图,在电视片段的识别问题中,既可以根据视频中包含的信息来进行识别,也可以根据音频中包含的信息来进行识别,所以电视数据可以用视频和音频这两个视图表示"在自然语言理解问题中,同一语义对象,可以用不同的语言来表达,这些不同的语言描述就构成了此语义对象的不同视图表示,上述示例中,多视图用于表示数据的不同特征集,多视图还可以用于表示数据的不同来源;例如对于同一个数据源,用不同的采集装置进行采集,这多个采集结果构成了数据的不同视图;另外,多视图还可以用于表示数据间的不同关系;例如,学术论文的分类问题中,论文间既有参考文献的引用关系,也有作者的合作关系,可以把不同的关系用不同的视图来表示;有一些文献涉及多模态(multimodal)学习问题,但不同的文献中模态一词的含义不同"狭义的多模态是指人的不同感官,如视觉,听觉,嗅觉!触觉等;视觉所对应的图像或文字信息,和听觉所对应的声音信息,就构成多模态数据;广义的模态数据是指对于一个事物,通过不同的方法收集到的数据"例如在人脸识别中,可能收集到人脸的2D图像和3D形状模型,这就构成人脸数据的两个模态;在指纹识别中,用不同传感器采集的一个指纹的多种不同印痕,构成指纹数据的多个模态;对比多模态数据和多视图数据的概念可以看出,多视图的含义里包含了多模态,多视图可以表示更广泛的实际问题;

    1.3.2多视图数据的表示

    数据的表示问题是机器学习的重点和难点问题之一,因为学习效果往往受到数据表示方法的影响。对于客观世界的对象,常常提取它的特征,然后用特征向量表示此对象,即xi={x1, x2… xn}了,其中n代表特征的个数。人们希望提取的特征体现了此对象的本质,从而能够用这些特征学习到目标概念。然而,对于一个学习问题,需要的最小特征集是不可知的,在缺乏先验信息的情况下,只能提取尽可能多的特征,提供给学习器,期望学习器能获得更好的预测性能"另外,数据收集技术的发展,使得人们可以通过更加复杂多样的手段对事物进行描述,这也导致数据的特征较多。这些描述对象的特征中,有些特征具有不同的属性,因此不适合使用同一种学习器进行学习。例如上述电视片段的识别问题中,电视片段具有视频和音频两部分特征,这两部分特征更适合分别用图像识别方法和声音识别方法来学习。如果使用单视图(即用所有特征组成一个特征向量,来表示电视片段,将无法选择一种既适合图像又适合声音的普适学习方法,在这种情况下,使用多视图的表示法较为适合,即把数据表示成多个特征集,然后在每个特征集上可以用不同的学习方法进行学习。

    即使数据的特征能够使用同一种学习器进行学习,多视图学习也可能比单视图学习具有优势"例如上述网页分类问题中,网页本身所包含的信息和指向该网页的超链接所包含的信息均由单词构成,网页视图和超链接视图都可以表示成文本向量的形式,在这两个视图上可以用同一种学习器进行学习"然而,如果要把这两个视图合成一个视图,则得到的特征向量失去了原有的意义,而且可能增加了特征空间的维数,从而给学习带来不必要的困难"另外,数据的多视图表示方法还能够发挥各个视图的优势,利用未标记数据达到协同学习的目的,以改善学习性能,这一点接下来将具体介绍。

     

    1.3.3多视图的半监督学习

    在多视图的半监督学习中,一方面数据有多个视图,即x=xt,另一方面数据由标记数据集L和未标记数据集U组成,学习算法应考虑如何利用多个视图蕴含的信息和未标记数据蕴含的信息,来辅助传统的监督学习.在该领域具有代表性的算法有A.Blum和T.Mitchell提出的协同训练算法 (co一training)。该算法假设数据有两个视图,首先在两个视图上利用标记数据分别训练出一个分类器,然后,在协同训练过程中,每个分类器从未标记数据中挑选若干预测置信度较高的数据进行标记,并把标记后的数据加入另一个分类器的标记数据集中,以便对方利用这些新标记的数据进行更新,此过程不断迭代进行,直到达到某个停止条件。

    上图展示了协同训练算法的主要思想,图中,Cl和C2分别代表两个类别的数据,用两个不同的颜色表示,X(l)和X(2)代表数据的两个不同视图,在视图X(1)中,这两个类别的数据可以被分类器很好地区别开来,而在视图X(2)中,这两个类别的数据混合分布,很难训练得到好的分类器,在这种情况下,用视图X(l)训练的分类器可以把它对未标记数据的分类结果中比较置信那些的未标记数据,连同它对那些未标记数据的分类结果,一起提供给视图X(2)上的分类器,然后,用视图x(2)训练的分类器能够利用从视图X(l)上得到的信息,排除自身的不确定性,从而提高用视图X(2)训练的分类器性能,反之亦然,多视图学习正是利用数据在不同的视图学习的难易程度不同,来发挥视图之间的相互作用,,优势互补,协同学习。自从协同训练算法被提出以后,多视图的半监督学习得到研究者的重视,涌现出了一批相关工作,并取得了很多研究以根据音频中包含的信息来进行识别,所以电视数据可以用视频和音频这两个视图表示,在自然语言理解问题中,同一语义对象,可以用不同的语言来表达,这些不同的语言描述就构成了此语义对象的不同视图表示。上述示例中,多视图用于表示数据的不同特征集,多视图还可以用于表示数据的不同来源。例如对于同一个数据源,用不同的采集装置进行采集,这多个采集结果构成了数据的不同视图。另外,多视图还可以用于表示数据间的不同关系。例如,学术论文的分类问题中,论文间既有参考文献的引用关系,也有作者的合作关系,可以把不同的关系用不同的视图来表示,有一些文献涉及多模态(multimodal)学习问题,但不同的文献中模态一词的含义不同。狭义的多模态是指人的不同感官,如视觉,听觉,嗅觉,触觉等视觉所对应的图像或文字信息,和听觉所对应的声音信息,就构成多模态数据。广义的多模态数据是指对于一个事物,通过不同的方法收集到的数据。例如在人脸识别中,可能收集到人脸的3D图像和3D形状模型,这就构成人脸数据的两个模态。在指纹识别中,用不同传感器采集的一个指纹的多种不同印痕,构成指纹数据的多个模态。对比多模态数据和多视图数据的概念可以看出,多视图的含义里包含了多模态,多视图可以表示更广泛的实际问题。

    转载于:https://www.cnblogs.com/xiaohuahua108/p/6014188.html

    展开全文
  • 可我找不到任何方法来声明这样函数——感觉我需要一个返回指针函数,返回指针指向返回指针函数……,如此往复,以至无穷。 12  数组大小 13 1.23 能否声明和传入数组大小一致局部数组,或者由...
  • flash shiti

    2014-03-14 10:32:41
    14. 矢量图形用来描述图像的是: □ A. 直线 □ B. 曲线 □ C. 色块 □ D. A 和B 都正确 15. 下列那几个属性flash mx 不建议使用的属性 □ A. scroll □ B. maxscroll □ C. _droptarget □ D. _highquality 16. ...
  • java 面试题 总结

    2009-09-16 08:45:34
    最大的不同,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    类图面向对象方法的支柱 如果没用到类图?? 找电杆撞下,看是否用面向对象方法 用 类图 危险! 类图用滥了,建狗屋画了10页类图 类图没分清粗细层次: 概念类图 规约类图 实现类图 鸟类图 鸟类图 鸟类图 ...
  • 以下是我列举经典题目(带 91 字样表示出自 91 天学算法活动): 面试题 17.12. BiNode 0001. 两数之和 0020. 有效括号 0021. 合并两个有序链表 0026. 删除排序数组中重复项 0053. 最大子序和 ...
  • 特征点提取总的来说分为三种方式:(目前,应用最广泛,效果精度最高的基于深度学习的方法) 基于 ASM 和 AAM 的传统方法; 基于级联形状回归的方法; 基于深度学习的方法。 原理不做展开,直接调用dlib实现。 ...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    3.6.4 创建自定义取值方法和赋值方法 83 3.6.5 属性特性 84 3.7 简单内存管理 85 3.7.1 创建对象 85 3.7.2 创建自动释放对象 86 3.7.3 自动释放对象生命周期 87 3.7.4 保留自动释放对象 87 ...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
    3.6.4 创建自定义取值方法和赋值方法 83 3.6.5 属性特性 84 3.7 简单内存管理 85 3.7.1 创建对象 85 3.7.2 创建自动释放对象 86 3.7.3 自动释放对象生命周期 87 3.7.4 保留自动释放对象 87 ...
  • 10.1.5 显示从网络资源获取的图像 260 10.1.6 获取Android网络状态 262 10.2 使用WebView浏览Web 263 小结 265 参考资料和更多信息 266 第11章 使用位置服务(LBS)API 267 11.1 使用全球定位服务(GPS) ...
  • 看到网上有个方案说:主项目负责加载组件,由于主项目和组件之间隔离,那么主项目如何调用组件ApplicationLike生命周期方法呢,目前采用的是基于编译期字节码插入方式,扫描所有ApplicationLike类(其有一...
  • 实体联系图( E 一 R 图):提供了表示实体型、属性和联系的方法: · 实体型:用矩形表示,矩形框内写明实体名; · 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来; · 联系:用菱形表示,菱形框内写明...
  • 在信息爆炸今天,每个人获取的信息很多,但由于推荐算法滥用, 大多数信息同质化;偏听则暗,兼听则明,我们可以通过订阅多站点RSS, 让自己接受信息不偏颇,听百家之言,行稳妥之事。 095《Json...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

以下哪些是获取图像的方法