多媒体数据处理实验3:图像特征提取与检索

这篇具有很好参考价值的文章主要介绍了多媒体数据处理实验3:图像特征提取与检索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第3次实验: 图像特征提取与检索

1. 算法描述

功能:

  使用BOF(Bag of Features)算法提取图像特征,在corel数据集(10*100)张图片上实现以图搜图,即输入数据集中某一张图,在剩下的999张图里搜索最邻近的10张图。

2.算法流程:

  1. SIFT算法提取图像的特征。每幅图像提取出几百至几千个特征点,将所有图像的特征点对应的描述子放在一个矩阵descriptors中,该矩阵的尺寸为695655x128

  2. 对全体特征进行K-Means聚类,然后构造聚类中心(视觉词汇)矩阵voc,该矩阵的尺寸为kx128,其中k为我们指定的聚类数目。在聚类过程中,由于原始特征点数多达仅七十万,因此我采取了每隔10个点进行一次采样的方法加速聚类过程

  3. 遍历所有图像,将各图像中的所有特征点映射到与其欧式距离最近的视觉词汇上,然后根据该图像中各视觉词汇出现的频率构造出图像的直方图向量imhist,将所有图像的直方图向量排列为矩阵,称为imhist

  4. 根据TF-IDF的原理,计算出各视觉词汇的词频TF和逆文本频率指数IDF值以优化直方图向量。设 N N N为图像总数, f i f_i fi表示视觉词汇 i i i在全体图像中的出现次数,当前图像的直方图向量为 ( h 1 , h 2 , . . . , h k ) (h_1,h_2,...,h_k) (h1,h2,...,hk),则当前图像的直方图向量中各视觉词汇的TFIDF的计算公式如下:
    T F i = h i ∑ j h j , j = 1 , 2 , . . . , k I D F i = l o g ( N f i ) TF_i=\frac{h_i}{\sum_j{h_j}}, j=1,2,...,k\\ IDF_i=log(\frac{N}{f_i}) TFi=jhjhi,j=1,2,...,kIDFi=log(fiN)
    当前图像经过TF-IDF加权优化后的直方图向量为:
    h = h i ( i = 1 , 2 , . . . , k ) = h i ∑ j h j l o g ( N f i ) ( i = 1 , 2 , . . . , k ) \pmb{h} = h_i(i=1,2,...,k)=\frac{h_i}{\sum_j{h_j}}log(\frac{N}{f_i})(i=1,2,...,k) h=hi(i=1,2,...,k)=jhjhilog(fiN)(i=1,2,...,k)

  5. 给定一副输入图像,求该图像的直方图向量与所有图像直方图向量之间的余弦相似度,然后降序排列,选择相似度排在前10的图像作为检索输出。余弦相似度的计算公式如下:
    < a , b > = a ⋅ b ∣ a ∣ ⋅ ∣ b ∣ <\pmb{a},\pmb{b}> = \frac{\pmb{a}·\pmb{b}}{|\pmb{a}|·|\pmb{b}|} <a,b>=abab

3. 核心代码

# 用SIFT算法提取特征的128维描述子向量
def SIFT(img):
    I = cv2.imread(img)
    descriptor = cv2.xfeatures2d.SIFT_create()
    (kps, features) = descriptor.detectAndCompute(I, None)
    return features
    
# 自编kmeans算法
# 计算新的聚类中心
def calcNewCentroids(cls_pos):
    Centroids_new = np.zeros((1, 128))
    for Centroid in cls_pos.keys():
        # 初始化新聚类中心坐标为128维0向量
        pos_new = np.zeros((1, 128))
        for pos in cls_pos[Centroid]:
            pos_new += pos
        # 以各类中所有点的坐标的均值作为新的聚类中心点坐标
        pos_new /= len(cls_pos[Centroid])
        # 将新中心坐标添加到列表中
        Centroids_new = np.row_stack((Centroids_new, pos_new))
    return Centroids_new[1:,:]

def kmeans(X, k):
    n = X.shape[0]   # 数据点总数
    epoch = 0        # 迭代次数
    idxs = [random.randint(0,k) for _ in range(k)]
    Centroids = X[idxs] # 构造初始的中心点矩阵(1000x128)
    while(1):
        epoch += 1
        cls_pos = {}
        # 对于每个点,计算它到各中心的距离,得到它所属的类
        cls, _ = vq(X, Centroids)
        for i in range(n):
            cls_pos.setdefault(cls[i],[]).append(X[i])
        for j in range(k):
            if j not in cls_pos.keys():
                cls_pos.setdefault(j,[]).append(Centroids[j])
        # 所有点均已分到相应的类中。下求新的聚类中心坐标
        Centroids_new = calcNewCentroids(cls_pos)
        # 当聚类中心不再变化时,停止迭代
        if (Centroids_new == Centroids).all():
            break
        # 更新聚类中心为新的聚类中心
        Centroids = Centroids_new
    # 返回聚类中心坐标及迭代次数
    return epoch, Centroids

# 求单幅图像的直方图向量
def project(descriptors, words_num, voc):
    imhist = np.zeros(words_num)
    cls, _ = vq(descriptors, voc)
    for c in cls:
        imhist[c] += 1
    return imhist

# 用TF-IDF的思想加权优化直方图向量
occurence_num = sum((imhists > 0) * 1)
IDF = np.log((image_nums) / (occurence_num + 1))
for i in range(image_nums):
    imhists[i] = imhists[i] / sum(imhists[i]) * IDF

4. 实验结果

设置聚类数目k=1000,对若干图像进行图像检索,效果如下:

原始图像320.jpg:
多媒体数据处理实验3:图像特征提取与检索
检索结果:多媒体数据处理实验3:图像特征提取与检索
原始图像500.jpg:多媒体数据处理实验3:图像特征提取与检索
检索结果:多媒体数据处理实验3:图像特征提取与检索
原始图像600.jpg:
多媒体数据处理实验3:图像特征提取与检索
检索结果:多媒体数据处理实验3:图像特征提取与检索
原始图像720.jpg:多媒体数据处理实验3:图像特征提取与检索
检索结果:

多媒体数据处理实验3:图像特征提取与检索
各类别的检索准确率统计表如下:

类别 0 1 2 3 4 5 6 7 8 9
检索准确率 56.5% 8.6% 43.9% 76.5% 87.7% 55.5% 29.4% 65.9% 14.5% 20.9%

5. 分析与总结

  1. 本次实验的结果呈现出以下特点:

    0、2、3、4、5、7 这几类准确率较高;

    海滩(类1)图片容易和大象(类5) / 马(类7)混淆;

    花朵(类6)一旦背景有绿叶,容易和其他类别中背景有大片绿色的图像混淆;

    山峰 / 雪山(类8)容易和其他类别混淆;

    食物(类9)容易和非洲部落(类1) / 大象(类5) / 马(类7)混淆,因为它们的主色调有点相似。

  2. 从实验结果可以发现,随着聚类类别数量的增加(从100到20000),图像检索的结果中错分的图像数量在逐渐变少,即越来越符合人们的视觉常理。但是当类别数量k增加到某一个值的时候,图像检索的效果又开始下降。但是在实际运用kmeans时,k的取值会显著影响聚类算法的运行速度,因此取k=1000是一个比较合适(折衷)的做法。此外,由于kmeans算法每次执行时一开始初始化的聚类中心是随机的,这会对结果造成不确定性的影响,可能某次聚类效果较好,下一次又变差了。

  3. 在对所有的特征点进行聚类时,由于原始特征点多达近70万个,若直接对其聚类,则会带来难以接受的时间开销,因此我选择了每隔10个样本采一次样,减小了样本规模,极大地缩短了kmeans的执行时间,且不会对预测准确率造成较大的损失。但当采样率超过20后,预测准确率将会明显下降。

  4. 在本次实验中,我尝试自己编写了朴素的kmeans算法,但是后来发现速度特别特别慢,因为进行一轮迭代需要执行上亿次的距离计算。后来我将计算距离+分配聚类中心的过程用scipy.cluster.vq中的vq()函数代替,显著地提高了kmeans算法的执行速度,将所耗时间控制在可以接受的范围内。这说明作者封装好的kmeans包实际上蕴含了一些tricks,能够极大地提升算法的执行效率。

  5. 我尝试了使用TF-IDF的思想去优化图像直方图向量的表示,但发现预测准确率不升反降,后来还是采用了原始的求解方法。

  6. 在本次实验中,我采用的相似度度量方法是余弦相似度。一开始的时候我也尝试了欧氏距离,但是发现效果相比使用余弦相似度而言下降了很多。

  7. BOF算法在处理局部特征向视觉词汇的映射时,只是将一个局部特征映射到与其相似度最高的那个词汇上,但有时图像的局部特征可能同时与多个视觉词汇的相似度都非常高,这么做会丢失一些信息。

源码:多媒体数据处理实验3:图像特征提取与检索文章来源地址https://www.toymoban.com/news/detail-472283.html

到了这里,关于多媒体数据处理实验3:图像特征提取与检索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月09日
    浏览(57)
  • 设计HTML5图像和多媒体

    在网页中的文本信息直观、明了,而多媒体信息更富内涵和视觉冲击力。恰当使用不同类型的多媒体可以展示个性,突出重点,吸引用户。在HTML5之前,需要借助插件为网页添加多媒体,如Adobe Flash Player、苹果的QuickTime等。HTML5引入原生的多媒体技术,设计多媒体更简便,用户

    2024年02月12日
    浏览(42)
  • HarmonyOS学习路之开发篇—多媒体开发(图像开发 一)

    HarmonyOS图像模块支持图像业务的开发,常见功能如图像解码、图像编码、基本的位图操作、图像编辑等。当然,也支持通过接口组合来实现更复杂的图像处理逻辑。 图像解码 图像解码就是不同的存档格式图片(如JPEG、PNG等)解码为无压缩的位图格式,以方便在应用或者系统

    2024年02月11日
    浏览(49)
  • HarmonyOS学习路之开发篇—多媒体开发(图像开发 二)

    图像编码就是将PixelMap图像编码成不同存档格式图片,用于后续其他处理,比如保存、传输等。当前仅支持JPEG格式。 ImagePacker主要用于图像编码。 接口名 描述 create() 创建图像打包器实例。 initializePacking(byte[] data, PackingOptions opts) 初始化打包任务,将字节数组设置为打包后输

    2024年02月11日
    浏览(58)
  • (八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法

    欢迎各位读者来到“最全Streamlit教程”专栏系列!如果您正在寻找一种简单而强大的方式来创建交互式数据应用程序,那么Streamlit无疑是您的最佳选择。作为该领域的热门框架,Streamlit让数据科学家、开发者和爱好者能够以前所未有的速度构建出引人入胜的数据可视化工具。

    2024年02月13日
    浏览(47)
  • Python中的多媒体处理库有哪些?

    Python中有许多广泛使用的多媒体处理库,其中一些包括: Pillow:用于图像处理和操作的强大库,支持多种图像格式的读取、写入和编辑。 OpenCV:一个用于计算机视觉和图像处理的开放源代码库,提供了丰富的图像处理和计算机视觉算法。 Pygame:一个专门用于游戏开发的库,

    2024年02月16日
    浏览(40)
  • Web前端技术基础实验报告三之超链接与多媒体文件应用

    目录 Web前端技术基础实验报告 实验题目:超链接与多媒体文件应用 实验目的:熟悉超链接与多媒体文件的插入的相关标签 实验内容 : 实验过程及结果 实验题目:超链接与多媒体文件应用 实验目的:熟悉超链接与多媒体文件的插入的相关标签 实验内容 : 项目1  设计简易

    2023年04月16日
    浏览(89)
  • 深入浅出FFmpeg:一款强大的多媒体处理工具

    引言: 在如今多媒体时代,我们经常接触到各种图片、音频和视频文件。而FFmpeg作为一款功能强大的开源多媒体处理工具,为我们提供了丰富的功能和灵活的应用方式。了不起最近刚好接触到了FFmpeg,本文将深入浅出地介绍FFmpeg,包括它的创建背景、内置工具以及常用命令,

    2024年02月11日
    浏览(43)
  • 读数据压缩入门笔记09_多媒体数据压缩

    4.6.1.1. 表示一个信号的最大可能功率与影响它的表示精度的破坏性噪声功率的比值(以对数分贝为单位) 4.6.1.2. 这一度量的基础是压缩图片的均方误差(mean-square error,MSE) 4.6.1.2.1. PSNR与MSE之间,存在着反比关系 4.6.1.3. 原始图像的值与压缩后的值差别有多大 4.6.2.1. 在比较

    2024年02月16日
    浏览(46)
  • [HTML]Web前端开发技术4(HTML5、CSS3、JavaScript )图像与多媒体文件hspace,vspace,scrollamount,bgcolor,marquee——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 图像与多媒体文件 网页文件常见的图像格式有: 图像 设置图像的替代文字 设置图像的宽度和高度

    2024年02月05日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包