精华内容
下载资源
问答
  • 图像描述
    千次阅读
    2021-03-31 19:50:13

    图像描述学习笔记(一)——常用的图像描述方法概述

    1.概念

    图像描述:就是结合计算机视觉(Computer Vision)和自然语言处理(Nature Language Process)的知识,使计算机具有“看图说话”的能力的技术。在图像描述任务中,计算机不仅要识别输入图像中物体的属性,还要使用正确的自然语言表示出来。

    2.图像描述方法

    在最初的图像描述任务中使用的是基于模板和检索的方法。

    2.1基于模板的方法

    • 在此方法中生成的句子有固定的模板,对图像进行检测,识别出图像中物体、场景、动作等相关元素,然后在模板中填充相关的词语组成句子。
      2010年,Farhadi等提出了一种基于模板的算法,作者当时随机选用了PASCAL 2008数据集中的1 000张图片,经过人工添加描述和标签,制作了自己的数据集,通过支持向量机(SVM)来检测图像中的物体、动作、场景三个元素,之后填充模板形成图像描述的句子。
      2011年。Li等使用了N-grams方法来提取与图像中检测到的物体相对应的短语来填充模板;之后,Kulkarni等利用条件随机场(CRF)从大量描述性文本池中提取出统计数据来平滑基于计算机视觉的检测和识别算法的输出,以此来确定描述图像的最佳短语。
      Mitchell等通过利用常用语法中的单词统计信息来处理模板填充过程,使用生成器对视觉系统输出的噪声进行过滤和约束来构建语法决策树,从而生成计算机视觉系统所见内容的详细描述。

    基于模板的方法可以生成对图像的准确描述,但是生成的内容单一且长度不可变,另外需要对图像进行大量标注,没办法灵活地处理大量的图像数据。

    2.2 基于检索的方法

    • 基于检索的图像描述方法是先将大量的图像描述的句子存入数据集中,之后进行图像描述时将待描述的图像与训练集中的图像进行对比,找出相似的图像,将训练集中的图像的描述作为候选描述再进行适当的修正,得到新的描述。
      Vicente等从网络上搜集了大量的图像自行标注标题与描述作为数据库,通过计算待描述图像与数据库中图像的相似度找到最匹配的图像以此得到描述。
      Socher等提出了一种Dependency Tress-RNN模型,最终得到了不错的效果。
      Mason等提出了一种用于图像标题生成的非参数密度估计技术,通过估计待描述图像的视觉内容的词频表示,将字幕生成转换为提取摘要的问题。

    基于检索的方法生成的图像描述比较贴合自然语言,但其过度依赖数据库,不易为特定图像生成描述。

    基于检索与基于模板的方法都太过于依赖前期的图像处理过程,对于描述生成的模型优化不足,因此不容易生成高质量的描述语句。

    2.3 深度学习的方法

    • 在机器翻译中,可以采用RNN网络对句子进行了编码,转化为一个固定长度的向量,然后再将这个向量输入到另一个RNN网络中来进行解码,进而输出翻译后的句子。因受到机器翻译领域编码器-解码器模型的启发,图像描述可以通过端对端的学习方法直接实现图像和句子之间的映射,深度学习方法可以直接从大量数据中学习图像到描述语句的映射。
      基于深度学习的图像描述方法大多采用的是以CNN-RNN为基本模型的编码器-解码器框架。编码器使用CNN提取图像的特征,解码器使用RNN来生成文本描述,这是目前图像描述普遍使用且效果最好的模型。
      在编码器-解码器架构上的改进主要有四种方法:注意力机制、对抗生成网络、强化学习、图卷积神经网络。

    3.评价标准

    目前图像描述领域常用的评价指标有BLEU,METEOR,ROUGE,CIDEr和SPICE,其中BLEU、METEOR起初适用于机器翻译,ROUGE适用于文本自动摘要,CIDEr和SPICE是专门用于图像描述。

    1)BLEU(BiLingual evaluation under-study)是基于n-gram的评价指标,n一般取1~4。对于一个参考描述,计算生成描述文本的n-gram个数,然后计算这些n-gram在参考描述中出现的百分比。该评价指标是一个精确度度量,不能很好地评价文本的完整性。
    2) Meteor是基于l-gram的评价指标。对于一个参考描述,计算其与生成描述文本的 l-gram的准确率和召回率,之后根据得到准确率和召回率计算调和均值。该评价指标需要预先给定1组校准词库,对于不在校准词库内的文本,其性能较差。
    3)ROUGE是面向n-gram召回率的评价指标。对于一个参考描述,计算生成描述的n-gram的个数,然后计算这些n-gram在参考描述里的召回率。该评价指标没有Fmeans评价,无法评价文本的流畅度。
    4)CIDEr是为了解决BLEU的缺陷提出的,也是基于n-gram 的评价指标。这个指标将每个描述表述成tf-idf向量的形式,然后计算参考描述与生成描述的余弦相似度,该评价指标无法很好地度量具有同义词的文本描述的相似度。

    参考文献

    苗益,赵增顺,杨雨露等.图像描述技术综述[J].计算机科学,2020,47(12):149-160.
    邓旭冉,李灵慧,唐胜等.图像内容自动描述技术综述[J].信息安全研究,2019,5(11):988.

    更多相关内容
  • 图像描述符(Image Descriptor)

    千次阅读 2022-03-30 18:50:04
    图像描述符的选取决定了我们如何量化图像,它的输出是特征向量,是图像本身的抽象。简单地说,它是用于表示图像的数字列表。 在现实图像处理的问题中,我们往往需要对图像进行一定的预处理从而将我们感兴趣的特征...

    图像描述符的选取决定了我们如何量化图像,它的输出是特征向量,是图像本身的抽象。简单地说,它是用于表示图像的数字列表。

    在现实图像处理的问题中,我们往往需要对图像进行一定的预处理从而将我们感兴趣的特征提取出来,从而大大减少计算量,增加精确度。

    下面,我将用比较通俗的语言介绍和展示几种图像描述符的原理和处理结果。

    颜色描述符

    比较简单的应用有计算每个通道颜色的平均值和标准差,并利用它进行对比分析。

    或者是利用颜色直方图(Color Histograms)。颜色直方图可以统计像素取值范围内像素的数量,从而完成对图片颜色整体的一个估计,我们尝试运行下代码看看。

    我们要处理的图像是关于大海的,我们可以很清晰地看到明亮的蓝色占据了大部分的区域。为了直观感受,这里我们对查看每个通道的颜色直方图,但一般应用时我们会三个通道合并在一起。
    在这里插入图片描述
    导入必要的库和图像。

    from matplotlib import pyplot as plt
    import numpy as np
    import argparse
    import cv2
    
    ap=argparse.ArgumentParser()
    ap.add_argument("-i","--image",required=True)
    args=vars(ap.parse_args())
    
    image=cv2.imread(args["image"])
    

    将图像按通道分割,我们这里注意到图像通道的排列顺序并不是我们口中常说的RGB,而是BGR。

    chans=cv2.split(image)
    colors=("b","g","r")
    

    计算各通道的颜色直方图并展示出来。

    这里calcHist()就是计算颜色直方图的函数。第一个参数一般是输入的图像,因为我们这里是一个通道一个通道计算,所以我们每次输入一个通道。第二个参数是询问计算输入的哪个通道,我们就只输入了一个通道,所以就计算第一个通道。第四个参数是bin,例如,我们将bin设为2,那么意味着我们将像素范围[0,255]等比例分为2份[0,127];[128,255]。第五个参数是像素的取值范围。

    plt.figure()
    plt.title("Color Histogram")
    plt.xlabel("Bins")
    plt.ylabel("# of Pixels")
    features=[]
    
    for (chan,color) in zip(chans,colors):
        hist=cv2.calcHist([chan],[0],None,[256],[0,256])
        features.extend(hist)
    
        plt.plot(hist,color=color)
        plt.xlim([0,256])
        
    plt.show()
    

    结果
    在这里插入图片描述

    形状描述符

    当使用形状描述符时,第一步通常是应用分割或边缘检测技术,使我们能够严格关注我们想要描述的形状的轮廓。然后,一旦我们有了轮廓,我们就可以再次计算统计矩来表示形状。

    在这里,我们介绍Hu矩(Hu Moments),它被广泛用作简单的形状描述符。其数学原理对于数学一般的同学可能会比较复杂,我在此尽量用通俗的方法来解释。
    对于一副M×N的数字图像,其p+q阶几何矩为:在这里插入图片描述i和j表示某一像素点的坐标x和y。f(i,j)为图像在坐标点(i,j)处的灰度值。当p和q都为0时,是0阶几何矩,表示该图像像素值的总和,可看作是图像的灰度质量。当p或者q为1,另一个为0时,时1阶几何矩,可以表示x方向或者y方向像素值的求和,可以利用1阶几何矩除以0阶几何矩求得质心。

    其中心矩为:在这里插入图片描述中心距实现了平移不变性。这是因为一个物体如果进行平移了的话,以任一原点为参考点的话,其所有坐标都发生了变化。但是如果我们以这个物体的某一点为参考,这个点随着整体一起移动,而整体的各个部位相对于这个参考点却是没变的。所以我们这里取质心为参考点,即分别减去质心的横坐标和纵坐标,就可以实现平移不变性。

    进一步我们再引入规格化中心距:在这里插入图片描述这个矩消除了图像比例变化带来的影响,即对象放大或者缩小也不会对这个矩的数值有太大的影响。原理其实也很简单,举个类似的例子方便大家理解。我们可以想象一个长方形,如果我们放大或者缩小它时,它的面积,边长都发生了变化。但是,它的长宽比却是始终不变的。

    而Hu矩则利用上面的矩计算了7个数:在这里插入图片描述

    看到这么一大串后是不是感觉头疼?其实我们没必要去了解大佬是怎么得出来的这一堆东西,但是我从中观察出了一些有趣的现象。前面我们提到了平移不变性和缩放不变性,但是当我们对非堆成的图像进行上下(左右)翻转时,我们求的矩似乎会发生很大变化,但其形状却没有变化啊。那么我们如何得到翻转不变性呢?答案就在这一大串里面。

    首先,我先把减弱翻转影响的原理说出来。我们刚刚说到,对于不对称的图形,翻转的影响尤其明显。我们举个例子,假设一个图形是[-9,1],如果我们只是把两个值相加当作一个特征值的话是-9+1=-8 。当我们将它翻转变成[-1,9],再求它的特征值就变成-1+9=8了。变化非常明显,那么我们可以考虑改变它特征值的选取规则。

    我们再回头看看刚才这个例子,之所以出现那么大的误差是因为值变化了但符号没变,于是我们可以让他们符号相等。我们可以取绝对值,但这个在计算机里实现相对麻烦点。我们还可以取平方,不管符号如何,平方之后都是正数。这样子我们取平方和相加作为特征值的话,就几乎没有变化了。
    知道这一点后,我们看看上面的七个式子。我们仔细观察可以发现对于p或者q任意一个为奇数的数值,一般会进行一次平方。或者两个p或者q任意一个为奇数的数值相乘,以抵消符号带来的影响。

    接下来,我们实际应用Hu矩来计算一下下面哆啦A梦的形状描述符。

    在这里插入图片描述
    导入相应的库和图片。

    import mahotas
    from imutils.paths import list_images
    import numpy as np
    import argparse
    import pickle
    import imutils
    import cv2
    
    ap=argparse.ArgumentParser()
    ap.add_argument("-i","--image",required=True)
    args=vars(ap.parse_args())
    
    
    image=cv2.imread(args["image"])
    cv2.imshow("image",image)
    cv2.waitKey(0)
    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    cv2.imshow("gray",gray)
    cv2.waitKey(0)
    

    我们需要将灰度图阈值化,方便寻找边缘。

    thresh=cv2.bitwise_not(gray)
    thresh[thresh>0]=255
    cv2.imshow("thresh",thresh)
    cv2.waitKey(0)
    outline=np.zeros(image.shape,dtype="uint8")
    cnts=cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cnts=imutils.grab_contours(cnts)
    cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[0]
    cv2.drawContours(outline,[cnts],-1,255,-1)
    cv2.imshow("outline",outline)
    cv2.waitKey(0)
    

    在这里插入图片描述
    计算Hu矩

    h_moments=cv2.HuMoments(cv2.moments(cnts)).flatten()
    print(h_moments)
    

    [1.74071461e-01 1.70471553e-03 6.92219552e-05 5.89352906e-06 1.13958626e-10 2.41123290e-07 3.44011832e-11]

    在形状描述符开头我有提到过,在计算前我们需要对图像进行一些处理,这些处理在计算机视觉中经常需要用到。由于篇幅问题,我会在后续的博文中进行汇总介绍。

    纹理描述符

    提到纹理描述符,那就不得不说方向梯度直方图( Histogram of Oriented Gradients),简称为hog。这个描述符在检测图像中的人物方面非常有用。

    那么接下来我着重介绍这一个。

    纹理描述符一般是对灰度图像进行操作。然后调整图像对比度,减少光照对图像的影响,使过曝或者欠曝的图像恢复正常。这种操作在图像处理方面很重要也很常见,但在这里我不打算展开来讲,以后会写相关文章的。HOG使用的是伽马矫正,有兴趣的可以去学习。

    然后就是计算梯度了。在这里,我介绍下梯度是怎么算的。一般我们使用[-1 0 1]这样一个算子。假设我们对一块水平区域[-99 10 100]计算梯度,我们可以很清晰看到这块区域像素变化很大,即梯度很大。我们用算子和这片区域对应项相乘后-1 * -99+0 * 10+1 * 100=199,这就是梯度值。我们再看一块比较平滑的区域[20 25 23],计算得到-1 * 20+0 * 25+ 1* 23=3,梯度值很小。当然,除了水平梯度还有垂直梯度。基于这两个梯度我们计算这块区域的合梯度(幅值和方向)。

    得到了图像各个块梯度的幅值和方向后,我们根据orientations的数值,将方向(0-180)均等分成orientations段。然后根据方向的数值,将对应的幅值分配到各个段中,以得到特征描述符。这里我借用下图来让大家更清晰地看到这个过程。

    在这里插入图片描述后续我们通过归一化,滑动窗口来获取整幅图像的特征描述符,并将其可视化。

    呼~说了那么一大堆,真正实操起来也不是简单的事。还好,在skimage里有相关的函数,操作起来就很方便了。我们就拿小李戏水的图片来实验下吧。

    在这里插入图片描述

    导入相应的库,图像并灰度化。

    from skimage import feature,exposure
    import cv2
    import argparse
    
    ap=argparse.ArgumentParser()
    ap.add_argument("-i","--image",required=True)
    args=vars(ap.parse_args())
    
    image=cv2.imread(args["image"])
    image=cv2.resize(image,(500,700))
    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    

    在hog()函数里,除了gray和orientations我们知道了,还有其他几个参数。pixels_per_cell:一个cell里包含的像素个数,cell就是指我们计算梯度的一块小区域;cells_per_block:一个block包含的cell个数,滑动窗口一个个block地滑动;visualize:是否返回一个hog图像用于显示。

    
    fd,hog_image=feature.hog(gray,orientations=9,pixels_per_cell=(10,10),cells_per_block=(2,2),visualize=True,channel_axis=None)
    hog_image_rescaled=exposure.rescale_intensity(hog_image,in_range=(0,10))
    cv2.imshow("image",image)
    cv2.imshow("hog",hog_image_rescaled)
    cv2.waitKey(0)
    

    结果
    在这里插入图片描述
    “本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/kasami_/article/details/123853824。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”

    展开全文
  • 论文记录:图像描述技术综述

    千次阅读 2022-03-14 15:08:04
    文章目录 前言 一、什么是image caption? 二、基于深度学习的图像描述方法 1.... 2.... 3.... 4.... 5....因为实验室研究方向是image caption,所以...图像描述技术,就是以图像为输入,通过数学模型和计算使计算机输出对...


    前言

    因为实验室研究方向是image caption,所以最近开始阅读一些image caption的综述。


    一、什么是image caption?

    图像描述技术,就是以图像为输入,通过数学模型和计算使计算机输出对应图像的自然语言描述文字,使计算机拥有 “看图说话”的能力,是图像处理领域中继图像识别、图像分割和目标跟踪之后的又一新型任务.

    在日常生活中,人们可以将图像中的场景、色彩、逻辑关系等低层视觉特征信息自动建立关系,从而感知图像的高层语义信息,但是计算机作为工具只能提取到数字图像的低层数据特征,而无法像人类大脑一样生成高层语义信息,这就是计算机视觉中的“语义鸿沟”问题.图像描述(字幕)技术(Image Caption Generation)的本质就是将计算机提取的图像视觉特征转化为高层语义信息,即解决“语义鸿沟”问题,使计算机生成与人类大脑理解相近的对图像的文字描述,从而可以对图像进行分类、检索、分析等处理任务。

    二、基于深度学习的图像描述方法

    近年来,随着深度学习技术的不断发展,神经网络在计算机视觉和自然语言处理领域得到了广泛应用.受机器翻译领域中编码器-解码器(Encoder-Decoder)模型的启发,图像描述可以通过端到端的学习方法直接实现图像和描述句子之间的映射,将图像描述过程转化成为图像到描述的“翻译”过程深度学习方法可以直接从大量数据中学习图像到描述语句的映射,生成更加准确的描述,其性能远远超过传统方法

    1.基于编码器-解码器的方法

    基于深度学习的图像描述生成方法大多采用以CNN-RNN为基本模型的编码器-解码器框架,CNN决定了整个模型的图像识别能力,其最后的隐藏层的输出被用作解码器的输入,RNN是用来读取编码后的图像并生成文本描述的网络模型,如图所示

    参考论文:MAOJH,XU W,YANG Y,etal.Deep captioning with multi-modal recurrent neural networks (m-RNN)

    VINYALSO,TOSHEV A,BENGIOS,etal.Showandtell:A neural image caption generator


    2.基于注意力机制的方法

    随着深度学习的发展,注意力机制被广泛应用于计算机视觉领域,其本质是为了解决编码器-解码器在处理固定长度向量时的局限性.注意力机制并不是将输入序列编码成一个固定向量,而是通过增加一个上下文向量来对每个时间步的输入进行解码,以增强图像区域和单词的相关性,从而获取更多的图像语义细节。

    参考论文:XU K,BA JL,KIROS R,etal.Show,attendandtell:Neural image caption generation with visual attention

    LU JS,XIONG C M,DEVIP,etal.Knowing whentolook: Adaptive attention via a visual sentinel for image captioning(自适应注意力机制)


     3.基于生成对抗网络的方法

    生成对抗网络模型中至少有两个模块:生成网络和判别网络.在训练过程中,生成网络生成尽量真实的数据以“欺骗”判别网络,并且通过判别网络的损失不断进行学习;而判别网络的任务就是区分生成的数据和真实数据.这两个网络通过动态的博弈学习,可以从无标签的数据中学习特征,从而生成新的数据.Dai等在2017年使用生成对抗网络通过控制随机噪声向量来生成多样化的描述.该模型分为两部分(如图所示):第一部分是句子生成部分,在该部分中依然使用CNN来提取图像特征,使用LSTM来生成句子,区别是在生成单词时加入了随机噪声,并在描述句生成完成后将其输入到第二部分的判别器进行评估.第二部分用来做句子评估,使用LSTM对句子进行编码,与图像特征一起处理获得一个概率值,评估该描述句是否与人类描述相似,是否符合图像内容,最后使用策略梯度方法反向传播更新参数,使其获得最大的概率值,直到输出理想的描述句

     参考论文:DAIB,SANJAF,RAQUELU,etal.Towards Diverse and Natural Image Descriptions via a Conditional GAN

    CHENF H,JIR R,SUN XS,etal.GroupCap:Group-Based Image Captioning with Structured Relevance and Diversity Constraint


     4.基于强化学习的方法

    强化学习也是机器学习领域中重要的方法之一在强化学习中,智能体(Agent)以尝试的方式与环境之间不断交互,如图所示在交互过程中,环境的状态由于智能体的动作而发生改变,并且环境将奖赏和当前时间的状态作为强化信号反馈到智能体,智能体在强化信号的作用下改变其在环境中的动作,可以针对具体的问题实施特定的动作策略,旨在获取最大的奖赏在图像描述任务中,强化学习可以解决在训练和预测过程中解码器的不同参数带来的解码(曝光)偏差的问题,并且在训练时通过反向传播算法对模型进行训练优化,从而解决训练和测评指标不匹配的问题

    参考论文:LIUSQ,ZHUZH,YEN,etal.Improved Image Captioning via Policy Gradient optimization of SPIDE 


    5.基于密集描述的方法

    基于密集描述的图像描述方法就是将图像描述分解为多个图像区域描述,当描述一个物体时,可以看作目标识别,当描述很多物体或一幅图像时,就是图像描述,如图所示

    参考论文:YANGLJ,TANG K,YANGJC,etal.Dense captioning with joint inference and visual context


    总结

    图像描述技术已被广泛应用于智能信息传播、智慧家居和智慧交通等领域,对人们的日常生活有着重要的实际意义,将来图像描述任务在深度学习和人工智能领域仍是一个重要的研究方向

    展开全文
  • 什么是局部图像描述子 所谓局部特征描述子就是用来刻画图像中的局部特征的,是以图像中的一个像素点的周围像素点的分布特征来获取该点的局部特征的算法。我们可以使用局部特征的特征点来代表图像的内容包括运动目标...

    目录

    什么是局部图像描述子

    Harris角点检测算法

    角点(corner points):

    角点特征:

    Harris 角点检测算子:

    Harris 角点检测算法的基本思想:

    Harris 角点检测算法的数学表达:

    Harris角点检测实例

    Harris 角点检测算法下实现的图像匹配 

    小结

    Harris角点检测算法优缺点

    SIFT算法(尺度不变特征变换) 

    SIFT简介

    SIFT算法可以的解决问题:

    SIFT算法流程图 

    SIFT特征检测基本步骤

     SIFT算法原理

    ​SIFT算法实例

     1.VLFeat的配置

    2.检测感兴趣点

    3.匹配描述子

    地理标记图像匹配

    小结

    SIFT算法的优点:

    SIFT算法的缺点


    什么是局部图像描述子

    所谓局部特征描述子就是用来刻画图像中的局部特征的,是以图像中的一个像素点的周围像素点的分布特征来获取该点的局部特征算法。我们可以使用局部特征的特征点来代表图像的内容包括运动目标跟踪,物体识别,图像配准,全景图像拼接,三维重建等。如果我们想匹配同一个场景中的两幅图像。首先,我们检测每幅图像中的特征,然后提取他们的描述子。第一幅图像中的每一个特征描述子向量都会与第二幅图中的描述子进行比较,得分最高的一对描述子,也就是两个向量的距离最近,将被视为那个特征的最佳匹配。这些图像的局部特征需要以下性质:

    • 位移不变性
    • 旋转不变性
    • 尺度不变性
    • 光照不变性
    • 以及更多

    我们学习 Harris 角点检测算法,用于提取图像的特征点;学习 SIFT(尺度不变特征转换),用于解决图像缩放、旋转、曝光、噪声等因素对特征匹配的影响。

    Harris角点检测算法

    角点(corner points):

    • 局部窗口沿各方向移动,均产生明显变化的点
    • 图像局部曲率突变的点

      

    角点特征:

    • 轮廓之间的交点。
    • 对于同一场景,即使视角发生变化,通常具备稳定性质的特征。
    • 该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化。
    • 角点处的一阶导数最大,二阶导数为0。
    • 角点指示了物体边缘变化不连续的方向。

    Harris 角点检测算子:

    Harris 算子是一种简单的点特征提取算子,这种算子受信号处理中自相关函数的启发,给出与自相关函数相联系的矩阵M。M阵的特征值是自相关函数的一阶曲率,如果两个曲率值都高,那么就认为该点是特征点。为了消除噪声对于角点检测的影响,可以使用一个高斯滤波器来平滑图像。

    Harris 角点检测算法的基本思想:

    利用矩形窗在图像上移动,若窗内包含有角点,则窗口向各个方向移动时,窗内的灰度值都会发生变化。从而达到检测图像角点的目的。如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。该点就称为角点。

    Harris 角点检测算法的数学表达:

     

    总的来说,算法的核心就是是利用局部窗口在图像上进行移动,判断灰度是否发生较大的变化。如果窗口内的灰度值(在梯度图上)都有较大的变化,那么这个窗口所在区域就存在角点。
    这样就可以将 Harris 角点检测算法分为以下三步:

    • 当窗口(局部区域)同时向 xx (水平)和 yy(垂直) 两个方向移动时计算窗口内部的像素值变化量 E(x,y)E(x,y) ;
    • 对于每个窗口,都计算其对应的一个角点响应函数R;
    • 然后对该函数进行阈值处理,如果 R>threshold,表示该窗口对应一个角点特征。

    Harris角点检测实例

    from pylab import *
    from PIL import Image
    from PCV.localdescriptors import harris
    
    
    # 读入图像
    im = array(Image.open('image/tingzi.jpg').convert('L'))
    
    # 检测harris角点
    harrisim = harris.compute_harris_response(im)
    
    # Harris响应函数
    harrisim1 = 255 - harrisim
    
    #画出Harris响应图
    figure()
    gray()
    imshow(harrisim1)
    print (harrisim1.shape)
    title('Harris')
    axis('off')
    axis('equal')
    
    
    threshold = [0.01,0.05,0.1,]
    for i, thres in enumerate(threshold):
        filtered_coords = harris.get_harris_points(harrisim, 6, thres)
        # subplot(1, 4, i+2)
        # subplot(4, 1, i + 2)
        figure()
        gray()
        title('threshold='+str(thres))
        imshow(im)
        print(im.shape)
        plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
        axis('off')
    
    show()
    

    角点检测结果如下:

    从上图可以明显看出,随着阈值从0.01增到0.05再到0.1,检测出的角点越来越少,并且角点检测算子对亮度的变化更敏感,在亮区域角点更多。可以看出,Harris角点检测获取的角点在图像中分布不均匀(对比度高的区域角点多)。

    Harris 角点检测算法下实现的图像匹配 

    Harris 角点检测器仅仅能够检测出图像中的兴趣点,但是没有给出通过比较图像间的兴趣点来寻找匹配角点的方法。我们需要在每个点上加入描述子信息,并给出一 个比较这些描述子的方法。

    兴趣点描述子是分配给兴趣点的一个向量,描述该点附近的图像的表观信息。描述子越好,寻找到的对应点越好。我们用对应点或者点的对应来描述相同物体和场景点在不同图像上形成的像素点。
    实现代码:

    from pylab import *
    from PIL import Image
    from PCV.localdescriptors import harris
    from PCV.tools.imtools import imresize
    
    im1 = array(Image.open('image/tingzi1.jpg').convert("L"))
    im2 = array(Image.open('image/tingzi.jpg').convert("L"))
    
    # resize加快匹配速度
    im1 = imresize(im1, (im1.shape[1]//2, im1.shape[0]//2))
    im2 = imresize(im2, (im2.shape[1]//2, im2.shape[0]//2))
    
    wid = 5
    harrisim = harris.compute_harris_response(im1, 5)
    filtered_coords1 = harris.get_harris_points(harrisim, wid+1)
    d1 = harris.get_descriptors(im1, filtered_coords1, wid)
    
    harrisim = harris.compute_harris_response(im2, 5)
    filtered_coords2 = harris.get_harris_points(harrisim, wid+1)
    d2 = harris.get_descriptors(im2, filtered_coords2, wid)
    
    print('starting matching')
    matches = harris.match_twosided(d1, d2)
    
    figure()
    gray()
    harris.plot_matches(im1, im2, filtered_coords1, filtered_coords2, matches)
    show()
    

    匹配结果:

    该算法的结果存在一些不正确匹配。这是因为,与现代的一些方法(SIFT特征检测等)相比,图像像素块的互相关矩阵具有较弱的描述性。实际运用中,我们通常使用更稳健的方法来处理这些对应匹配。这些描述符还有一个问题,它们不具有尺度不变性和旋转不变性,而算法中像素块的大小也会影响对应匹配的结果。 

    小结

    Harris角点检测算法优缺点

    优点:

    • 旋转不变性,椭圆转过一定角度但是其形状保持不变(特征值保持不变)。
    • 对于图像灰度的仿射变化具有部分的不变性,由于仅仅使用了图像的一介导数,对于图像灰度平移变化不变;
    • 对于图像灰度尺度变化不变。

     缺点:

    • 它对尺度很敏感,不具备几何尺度不变性。
    • 提取的角点是像素级的

    SIFT算法(尺度不变特征变换) 

    SIFT简介

     尺度不变特征转换即SIFT (Scale-invariant feature transform)是一种计算机视觉的算法。它用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,2004年完善总结。

           其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。

          局部影像特征的描述与侦测可以帮助辨识物体,SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。

          SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

    SIFT算法可以的解决问题:

    1. 目标的旋转、缩放、平移(RST)
    2. 图像放射/投影变换(视点viewpoint)
    3. 光照影响(illumination)
    4. 部分目标遮挡(occlusion)
    5. 杂物场景(clutter)
    6. 噪声

    SIFT算法流程图 

     

    SIFT特征检测基本步骤

    1. DoG尺度空间的极值检测:

    首先构造DoG尺度空间,在SIFT中使用不同参数的高斯模糊来表示不同的尺度空间,而构造尺度空间是为了检测在不同尺度下都存在的特征点,特征点的检测比较常用的方法是高斯拉普拉斯,但是LoG的运算量是比较大的,Marr和Hidreth指出可以使用DoG(高斯差分)来近似计算LoG,所以在DoG的尺度空间下检测极值点。

    2. 删除不稳定的极值点:

    低对比度的极值点+不稳定的边缘响应点

    3. 确定特征的的主方向:

    以特征点的为中心、以3×1.5σ3×1.5σ为半径的领域内计算各个像素点的梯度的幅角和幅值,然后使用直方图对梯度的幅角进行统计。直方图的横轴是梯度的方向,纵轴为梯度方向对应梯度幅值的累加值,直方图中最高峰所对应的方向即为特征点的方向。

    4. 生成特征描述子:

    首先将坐标轴旋转为特征点的方向,以特征点为中心的16x16的窗口的像素的梯度幅值和方向,将窗口内的像素分为16块,每块是其像素内8个方向的直方图统计,共可以形成128维的特征向量。

     SIFT算法原理

    1.检测尺度空间的极值

    检测尺度空间极值就是搜索所有尺度上的图像位置,通过高斯微分函数来识别对于尺度和旋转不变的兴趣点。其主要步骤可以分为建立高斯金字塔、生成DOG高斯差分金字塔和DOG局部极值点检测。为了让大家更清楚,我先简单介绍一下尺度空间,再介绍主要步骤。

    (1)尺度空间

    一个图像的尺度空间定义为一个变化尺度的高斯函数与原图像的卷积 

     

     其中,*表示卷积计算。 

     其中,m、n表示高斯模版的维度,(x,y)代表图像像素的位置。σ 为尺度空间因子,σ 值越小表示图像被平滑的越少,相应的尺度就越小。小尺度对应于图像的细节特征,大尺度对应于图像的概貌特征,效果如下图所示,尺度从左到右,从上到下,一次增大。  

     (2)建立高斯金字塔

     尺度空间在实现时,使用高斯金字塔表示,高斯金字塔的构建分为两部分:

    1.对图像做不同尺度的高斯模糊

    2.对图像做降采样(隔点采样)

    图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的上一层(每层一张图像),每个金字塔共n层。金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定。

    为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。如上图所示,将图像金字塔每层的一张图像使用不同参数做高斯模糊,使得金字塔的每层含有多张高斯模糊图像,将金字塔每层多张图像合称为一组(Octave),金字塔每层只有一组图像,组数和金字塔层数相等,每组含有多层Interval图像。

    高斯图像金字塔共o组、s层, 则有:

    其中,σ表示尺度空间坐标,s表示sub-level层坐标,表示初始尺度,S表示每组层数(一般为3~5) 

     (3)建立DOG高斯差分金字塔

    为了有效提取稳定的关键点,利用不同尺度的高斯差分核与卷积生成。

    DOG函数:

    (4)DOG局部极值检测

    特征点是由DOG空间的局部极值点组成的。为了寻找DOG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域 的相邻点大或者小。

     2.关键点方向分配

    3.关键点的描述 

     4.关键点的匹配

    SIFT算法实例

     1.VLFeat的配置

    为了计算图像的SIFT特征,我们要用开源工具包VLFeat。

     VLFeat的下载地址:Index of /download (vlfeat.org) 

    选择 vlfeat-0.9.20-bin.tar.gz 安装包下载,下载完成解压出来,找到bin目录下的win32文件夹,复制出来,放到你想放的位置(我放在了D:\VLfleat-bin,win32文件夹可改成你想要的名字,我改成win32vlfeat)

     然后打开win32vlfeat文件,复制它的位置路径(我的是D:\VLfleat-bin\win32vlfeat),接着找到PCV库里的sift.py文件打开修改下面的process_image方法(sift.exe后面要有一个空格)即可完成配置

    2.检测感兴趣点

    # -*- coding: utf-8 -*-
    from PIL import Image
    from pylab import *
    from PCV.localdescriptors import sift
    from PCV.localdescriptors import harris
    
    # 添加中文字体支持
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname=r"C:\Windows\Fonts\simsun.ttc", size=16)
    #设置字体为楷体
    matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
    
    imname = 'image/tingzi1.jpg'
    im = array(Image.open(imname).convert('L'))
    sift.process_image(imname, 'ting1.sift')
    l1, d1 = sift.read_features_from_file('ting1.sift')
    
    figure()
    gray()
    subplot(131)
    sift.plot_features(im, l1, circle=False)
    title(u'SIFT特征', fontproperties=font)
    subplot(132)
    sift.plot_features(im, l1, circle=True)
    title(u'用圆圈表示SIFT特征尺度', fontproperties=font)
    
    # 检测harris角点
    harrisim = harris.compute_harris_response(im)
    
    subplot(133)
    filtered_coords = harris.get_harris_points(harrisim, 6, 0.1)
    imshow(im)
    plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
    axis('off')
    title(u'Harris角点', fontproperties=font)
    
    show()

     可以看到,与Harris角点检测相比,sift提取出来的特征点信息更多,而且更加精准,这是因为sift的特征点提取步骤比Harris的步骤复杂的多,它需要建立高斯图像金字塔和高斯差分金字塔之后再检测极值,而Harris角点只是对原图进行角点检测和变化。 

    3.匹配描述子

    对于将一幅图像中的特征匹配到另一幅图像的特征,一种稳健的准则(同样是由Lowe提出的)是使用者两个特征距离和两个最匹配特征距离的比率。相比于图像中的其他特征,该准则保证能够找到足够相似的唯一特征。使用该方法可以使错误的匹配数降低。下面的代码实现了匹配函数。

    from PIL import Image
    from pylab import *
    import sys
    from PCV.localdescriptors import sift
    from PIL import Image
    from pylab import *
    from numpy import *
    import os
    
    if len(sys.argv) >= 3:
        im1f, im2f = sys.argv[1], sys.argv[2]
    else:
        im1f = 'image/shu1.jpg'
        im2f = 'image/shu2.jpg'
    
    im1 = array(Image.open(im1f))
    im2 = array(Image.open(im2f))
    
    sift.process_image(im1f, 'out_sift_3.txt')
    l1, d1 = sift.read_features_from_file('out_sift_3.txt')
    figure()
    gray()
    subplot(121)
    sift.plot_features(im1, l1, circle=False)
    
    sift.process_image(im2f, 'out_sift_4.txt')
    l2, d2 = sift.read_features_from_file('out_sift_4.txt')
    subplot(122)
    sift.plot_features(im2, l2, circle=False)
    
    # matches = sift.match(d1, d2)
    matches = sift.match_twosided(d1, d2)
    print('{} matches'.format(len(matches.nonzero()[0])))
    
    figure()
    gray()
    sift.plot_matches(im1, im2, l1, l2, matches, show_below=True)
    show()

    Harris匹配结果:

    可以看到SIFT算法的匹配效果比 Harris匹配效果好非常多,同一场景,尺度稍微改变了一下,Harris算法肉眼可见出现很多匹配错误点,而SIFT算法肉眼完全看不到匹配错误点,这是因为SIFT算法具有尺度和旋转不变性,即使两张图大小不一样、角度不一致也不会影响匹配结果,而Harris角点对尺度变化非常敏感,当遇到尺度变化较大时,很多正确特征点无法检测出来。

    地理标记图像匹配

    创建地理标记图像集

    配置环境

    首先通过图像间是否具有匹配的局部描述子来定义图像间的连接,然后可视化这些连接情况。为了完成可视化,我们可以在图中显示这些图像,图的边代表连接。 可以使用pydot 工具包(http://code.google.com/p/pydot/),该工具包是功能强大的GraphViz 图形库的Python 接口。

    先安装Graphviz再安装pydot

    Graphviz安装教程

    下载地址:https://graphviz.org/download/

     配置环境变量:

    安装pydot

    进入windows命令行界面,输入pip install pydot。完成后,再输入dot -version,然后按回车,如果显示graphviz的相关版本信息,则安装配置成功。

    编写代码

    # -*- coding: utf-8 -*-
    from pylab import *
    from PIL import Image
    from PCV.localdescriptors import sift
    from PCV.tools import imtools
    import pydot
    
    """ This is the example graph illustration of matching images from Figure 2-10.
    To download the images, see ch2_download_panoramio.py."""
    download_path = "D:\\JMUPhoto"
    path = "D:\\JMUPhoto\\"
    # list of downloaded filenames
    imlist = imtools.get_imlist(download_path)
    nbr_images = len(imlist)
    
    # extract features
    featlist = [imname[:-3] + 'sift' for imname in imlist]
    for i, imname in enumerate(imlist):
        sift.process_image(imname, featlist[i])
    
    matchscores = zeros((nbr_images, nbr_images))
    
    for i in range(nbr_images):
        for j in range(i+1, nbr_images):  # only compute upper triangle
            print('comparing ', imlist[i], imlist[j])
            l1, d1 = sift.read_features_from_file(featlist[i])
            l2, d2 = sift.read_features_from_file(featlist[j])
            matches = sift.match_twosided(d1, d2)
            nbr_matches = sum(matches > 0)
            print('number of matches = ', nbr_matches)
            matchscores[i, j] = nbr_matches
    print("The match scores is: %d", matchscores)
    
    
    # copy values
    for i in range(nbr_images):
        for j in range(i + 1, nbr_images):  # no need to copy diagonal
            matchscores[j, i] = matchscores[i, j]
    
    threshold = 2  # min number of matches needed to create link
    
    g = pydot.Dot(graph_type='graph')  # don't want the default directed graph
    
    for i in range(nbr_images):
        for j in range(i + 1, nbr_images):
            if matchscores[i, j] > threshold:
                # first image in pair
                im = Image.open(imlist[i])
                im.thumbnail((200, 200))
                filename = path + str(i) + '.png'
                im.save(filename)  # need temporary files of the right size
                g.add_node(pydot.Node(str(i), fontcolor='transparent', shape='rectangle', image=filename))
    
                # second image in pair
                im = Image.open(imlist[j])
                im.thumbnail((200, 200))
                filename = path + str(j) + '.png'
                im.save(filename)  # need temporary files of the right size
                g.add_node(pydot.Node(str(j), fontcolor='transparent', shape='rectangle', image=filename))
    
                g.add_edge(pydot.Edge(str(i), str(j)))
    g.write_png('D:\\JMUPhoto\\JMUMatching.png')

    代码调试 

    运行代码中,我出现了生成.sift文件为空的问题,说明sift.exe无法对图像生成sift特征。通过不断调试,最终发现是图片大小导致的,把图片的宽高比改成近似2:1就能解决。(单纯图片大小缩小没用,不过图片大小缩越小,程序运行越快,但准确率会下降)

    运行结果 

    数据集1

    数据集2  数据集3

    小结

    SIFT算法的优点:

    1. 特性独特性,也就是特征点可分辨性高,类似指纹,适合在海量数据中匹配。
    2. 多量性,提供的特征多。
    3. 高速性,就是速度快。
    4. 可扩展,能与其他特征向量联合使用。

    SIFT算法的缺点

    1.  实时性不高。
    2.  有时特征点较少。
    3.  对边缘光滑的目标无法准确提取特征点。
    4. SIFT采用henssian矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,
    5. 有可能使得找到的主方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功;
    6. 另外图像金字塔的层取得不足够紧密也会使得尺度有误差,后面的特征向量提取同样依赖相应的度,发明者在这个问题上的折中解决方法是取适量的层然后进行插值。
    7. SIFT是一种只利用到灰度性质的算法,忽略了色彩信息.
    展开全文
  • 图像描述(image caption)历年突破性论文总结 图像描述(image caption) 顾名思义,图像描述是指以图像为...
  • 图像描述-Image Caption

    千次阅读 2019-07-31 21:01:10
    图像描述的概念,在这里就不多概述了,用通俗的话就是--看图说话。而这篇文章虽然不是现在的最优模型,但是由于第一次将注意力机制引入到图像描述的模型中来,因此它的意义非常的重要。 引人了注意力机制...
  • CVPR2019 图像描述(image caption)论文汇总 1.Adversarial Semantic Alignment for Improved Image Captions 使用对抗学习的思想来加强image和caption之间的关联 2.Context and Attribute Grounded Dense ...
  • 翻译走起,第一次翻译文献,可能是一...image captioning根据个人喜好翻译成图像描述,其他什么图像字幕,图像标题生成,whatever,大家随意好了。 图像描述深度学习综述 图像描述的定义:Generating a descript...
  • Image Caption图像描述总结

    千次阅读 2019-03-18 14:28:36
    现有的解决图像描述任务的算法大致可以分为三类 :基于模板式的 、基于相似空间检索式的 、基于多模翻译式的 。 现有的生成图像描述的形式大致也可分为三类 :单 句子式描述 ,密集型描述,多语言描述。 ...
  • 图像描述

    千次阅读 2018-05-09 19:39:43
    上文提到了图像的特征,实际上==特征点==就是代表了图片的特征。(SITF就是一种找特征点的算法) 描述描述特征点 特征点 特征点包括角点和特征向量 1. 角点(比如 Harris角点 ) 2. 特征向量 和...
  • 图像描述中的注意力机制

    千次阅读 2019-03-28 20:59:30
    图像描述(image caption)近几年来借助深度学习端到端的训练生成方式,得到了显著的发展。 总的来说图像描述一般有两种生成范式,一类是botton-up范式,一类是 top-down范式 botton-up是经典的范式,这一类模型...
  • SIFT,即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。...
  • CV之IC: 图像描述(Image Captioning) 的简介、使用方法、案例应用之详细攻略 目录 图像描述(Image Captioning) 的简介 1、常用数据集 2、评价指标 3、循环神经网络 4、应用 图像描述(Image Captioning...
  • 本次实验通过参考教材《Python计算机视觉编程》和网上大量资料学习局部图像描述子,Harris角点检测器,SIFT特征,匹配地理标记图像相关内容。 一、Harris角点检测算法 1.1 角点是什么 角点具有的特征: <1>...
  • 图像中文描述

    千次阅读 2017-10-04 12:29:10
    图像中文描述 用一句话描述给定图像中的主要信息,挑战中文语境下的图像理解问题。尝试自然语言处理与计算机视觉技术结合的力量 https://challenger.ai/competition/caption/subject 图像中文描述问题...
  • 计算机视觉二:局部图像描述子一、序1、角点(corner points)2. 如何判断是否是好的角点检测算法二、Harris角点检测器1、基本思想2、数学表达3、角点计算流程4、算法实现二、SIFT算法1、产生2、实现步骤三级目录 一...
  • 深度学习【9】CNN+RNN自动图像描述

    千次阅读 2016-07-01 12:56:56
  • tensorflow图像描述(图像标注)

    千次阅读 2018-04-11 14:39:37
    mark一下 摘自微博...爱可可-爱生活 2017-4-2 14:52 来自 Mac客户端 【TensorFlow图像自动描述】《Caption this, with TensorFlow | O’Reilly Media》by Raul Puri, Da...
  • 这是全局图像描述子一种应用于整幅图像的OpenCV图像描述子。对于我们的数据集来说,这是一个不错的选择。我们所利用的电影里的每个场景都有各自相对不同的颜色分布,所以才能使得每个颜色直方图更容易返回相应的结果...
  • 图像特征之傅里叶描述

    万次阅读 多人点赞 2019-04-17 11:08:29
    傅里叶描述子是一种图像特征,具体来说,是一个用来描述轮廓的特征参数。其基本思想是用物体边界信息的傅里叶变换作为形状特征,将轮廓特征从空间域变换到频域内,,提取频域信息作为图像的特征向量。即用一个向量...
  • Image Caption是一个融合计算机视觉、自然语言处理和...除此之外,模型还需要能够抓住图像的语义信息,并且生成人类可读的句子。 简单理解为:为图片生成描述语言,输入为一张图片,输出为客观描述图片的句子。 研...
  • 摘要图像标题生成是生成图像内容的自然语言描述的任务。一种方法是使用神经语言模型,一种逐个生成句子的神经网络。这些工作通过使用循环的神经网络(RNN),基于其前缀或“历史”来预测句子中的下一个单词。然后...
  • Tensorflow实现:图像描述—Show and Tell: A Neural Image Caption Generator Introduction Image Caption是一个融合计算机视觉、自然语言处理和机器学习的综合问题,它类似于翻译一副图片为一段描述文字。该...
  • 深度视觉语义对齐用于生成图像描述 Deep Visual-Semantic Alignments for Generating Image DescriptionsAndrej Karpathy Li Fei-Fei 摘要本文提出了一种方法,可以用于生成图像的自然语言描述。主要包含了两个...
  • 本节主要对论文《PCA-SIFT: A More Distinctive Representation for Local Image ...本文研究和提高SIFT使用的局部图像描述符。如同SIFT,我们的描述符编码了特征点附近图像梯度的突出方面;然而,代替使用SIFT的平
  • OpenCV中图像特征提取与描述

    千次阅读 2022-03-08 20:12:13
    目录图像特征提取与描述图像的特征Harris和Shi-Tomas算法Harris角点检测Shi-Tomasi角点检测小结SIFT/SURF算法SIFT原理基本流程尺度空间极值检测关键点定位关键点方向确定关键点描述SURF原理小结Fast和ORB算法Fast...
  • 数字图像处理期末复习题

    千次阅读 2021-06-30 14:06:05
    2.数字图像处理可以理解为两个方面的操作:一是从图像图像的处理,如图像增强等; 二是 ,如图像测量等。 3.数字图像处理可以理解为两个方面的操作:一是 ,如图像增强等; 二是从图像到非图像的一种表示,如图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 395,864
精华内容 158,345
关键字:

图像描述

友情链接: TME Shaders v2.0 Beta 4.zip