文章目录

  • 爬虫建立数据库
  • 图像检索
    • 1、使用平台及语言
    • 2、图像检索操作流程
      • 2.1点击 选择检索图像按钮
      • 2.2选择数据库路径
      • 2.3点击直方图检索
      • 2.4人脸检测与识别(待添加)
    • 3.此应用程序用途
  • 上周作业遗留问题:彩色直方图检索
  • 遇到的问题及收获

本周的实验我与llk同学合作完成,他负责爬虫建立数据库,我负责进行图像检索。最终实现成果为:

llk同学通过爬虫对某个关键词爬百度图片网页,对其中的图片进行保存,转换为.bmp格式文件,图像大小调整为200*150像素,以此建立数据库。

我使用MFC设计应用程序,在其中加入彩色直方图图像检索功能,在llk同学建立的数据库里进行图像检索,最后按照相似度进行排序展现。

爬虫建立数据库

爬虫获取图像如果要编写能够通过输入的关键词自动在网络中搜索相关图片的程序比较复杂,这里用Python编写一个相对简单的爬虫程序,它自动加载百度的图片搜索页面,从中提取图片链接,并下载图片。在python的标准库中有urllib可以向网站发送HTTP请求并接收网页文件,但是用它得到的百度网页不包含我们想要的图片链接,因为百度中很多网页元素是根据脚本动态生成的,urllib直接获取的文件包含了这些脚本的代码信息却没有加载它们。这里用了一个Python的第三方库Selenium,它不但可以驱动浏览器动态加载页面,而且可以执行我们编写的Javascript脚本。通过Javascript可以实现网页的下拉刷新和翻页,从而搜索更多图片。

百度搜图页面默认是采用“瀑布流版本”,页面滑动到底端才继续加载,每次只能从头开始,也不太好控制搜索的图片数量,所以选择了传统的翻页版本。翻页其实就是向另一个页面的链接跳转,页面链接之间的差别就在于HTTP的GET方法传递的参数不同。每次页面跳转后插入一个等待时间,保证页面加载完成就能获取页面找出图片链接。

网页中的图片链接很有规律,不需要解析整个网页,只需要用正则表达式查找就能定位链接。图片下载相对简单,urllib就已经包含了这个功能。

直接下载的图片数据量大,图片格式也比较混乱,有的图片格式甚至和后缀名不一致。建立数据库时用Python的PIL库将图片转换成统一的个式并缩小尺寸。

图像检索

1、使用平台及语言

使用平台:VS2015+MFC

语言:C语言

VS: Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft
Windows、Windows Mobile、Windows
CE、.NET Framework、.NET Compact
Framework和Microsoft Silverlight 及Windows Phone。

MFC: 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

界面如下:

2、图像检索操作流程

2.1点击 选择检索图像按钮

点击“选择带检索图像”按钮,即可选择图片文件进行打开并在“待检索图像”窗口显示出来。

目前只支持.bmp格式的图片。(你可以选择用opencv万事大吉)

2.2选择数据库路径

点击“选择数据库路径”按钮,进行数据库路径选择。

选择后会弹窗确认选择的目录以及此目录下(包含子文件夹)检索到多少张图片。

目前支持100张以内的检索。

2.3点击直方图检索

点击直方图检索按钮,开始对数据库内的图片进行逐张计算,最后选取相似度最高的九张图片依次展现在检索结果栏。

2.4人脸检测与识别(待添加)

3.此应用程序用途

这次图像检索用的是彩色直方图进行检索,经过探索,最终发现这个应用程序有以下两个用途:

第一, 找相似风格图片。譬如:

第二, 为人像找风格对应的风景照,譬如


美好光明,磅礴大气


魔幻奇妙,捉摸不定



忧郁神秘,能量汹涌


这个还是不错的,可能会有市场,毕竟大家都喜欢从宇宙中找一找属于自己特征的那一点东西来满足自己。

上周作业遗留问题:彩色直方图检索

上次实验对于彩色直方图,我采用的是对RGB三个通道分别计算直方图。直方图均衡化的效果是这样的

猛一看是挺好看,仔细想想就觉得不太对劲,看灰度图均衡化后变得更清晰了,挺好,但是看这彩色的,基调都变了,不太正常。上网搜了搜,明白了具体原因——

Histogram equalization is a non-linear
process. Channel splitting and equalizing each channel separately is not the
proper way for equalization of contrast. Equalization involves Intensity values
of the image not the color components. So for a simple RGB color image, HE should not be applied individually on each channel.
Rather, it should be applied such that intensity values are equalized without
disturbing the color balance of the image. So, the first step is to convert the
color space of the image from RGB into one of the color space which separates intensity values from color components. Some of these are:
HSV/HLS YUV YCbCr
Convert the image from RGB to one of the above mentioned color spaces. YCbCr is preferred as it is designed for digital images.Perform HE of the intensity plane Y. Convert the image back to RGB.

颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。

当然,颜色直方图可以是基于不同的颜色空间和坐标系。最常用的颜色空间是RGB颜色空间,原因在于大部分的数字图像都是用这种颜色空间表达的。然而,RGB空间结构并不符合人们对颜色相似性的主观判断。因此,有人提出了基于HSV空间、Luv空间和Lab空间的颜色直方图,因为它们更接近于人们对颜色的主观认识。其中HSV空间是直方图最常用的颜色空间。它的三个分量分别代表色彩(Hue)、饱和度(Saturation)和值(Value)。

于是这次的图像检索用了HSV彩色直方图进行检索。

RGB转换为HSV格式后,进行计算直方图,然后通过计算直方图的距离来判断相似度,最后对相似度进行排序。

遇到的问题及收获

这次的作业,大部分时间还是花在了MFC上,对图像检索没有加入其他算法,有点舍本逐末了。

期间遇到很多问题都是MFC的问题,尤其是CString这块,又在unicode环境下,确实费了不少功夫。

课上听老师讲的一个公司对人图像捕获后进行爬虫感觉很酷,其实最初是想做一个人脸检索的,所以界面加了人脸检测人脸识别,后来发现确实有点难度,时间也不太够用。本来是打算调用OpenCV进行面部识别,结果遇到了下面这个错误

我安装的是3.4.1版本,只支持64位,而这次MFC是32位,改为64位又会出问题,所以到今天人脸识别也还是搁浅了。

这一次实验,最开始听到这个内容的时候感觉难以置信,觉得不可能完成,真的去做了做发现其实也不是特别困难(至少搭建雏形还是可以的),难在如何用更好更恰当的图像检索方式进行图像检索吧。

最开始用自己写的这个应用程序检索人脸,效果不是特别的好,心里特别着急,心想这图片那么大的信息量怎么就用不上呢。以后还是好好学学图像处理,不辜负图片的信息量吧。

本工程源码已更新至github,欢迎star,欢迎PR:)

数字图像处理(7):爬虫建立数据库并实现图像检索相关推荐

  1. 数字图像处理:特征提取基本概念总结

    数字图像处理:特征提取基本概念总结 一.特征提取概念 二.特征概述 1.边缘 2.角 3.区域 4.脊 三.常用图像特征概述 1.颜色特征 2.纹理特征 3.形状特征 4.空间关系特征 一.特征提取概 ...

  2. 何为计算机视觉?计算机视觉与数字图像处理的区别、Opencv的起源。

    目录 概述 一. 什么是计算机视觉? 二.计算机视觉实现起来难吗? 1. 外部噪声: 2.内部噪声(分为四种): 3.网络噪声 4.根据特征切割场景 重建二维图 1. opencv还可以很好的修复图像 ...

  3. 数字图像处理(1)——认识数字图像

    目录 1.数字图像的构成 2.不同环境图像的存储方式 2.1.计算机中的颜色是离散的 2.2.MATLAB.OpenCV.Python中的图像都是什么 3.图像中的信息 4.数字图像处理的基本步骤 5 ...

  4. 《数字图像处理》学习总结及感悟:第二章数字图像基础(1)人眼结构、感知和错觉

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 本系列文章记录老猿自学冈萨雷斯<数字图像处理>的感悟和总结,不过 ...

  5. 数字图像处理_Matlab——车牌识别分析

    目录 一.导入图片 1. 从文件导入 1.1 原理: 1.2 代码: 2. 摄像头拍照识别 2.1 了解 2.1 代码: 二.预处理 1. 预处理-- 原图->灰度图 2. 预处理-- 边缘检测 ...

  6. 【人工智能项目】ImageNet数据集介绍以及数字图像处理技术

    [人工智能项目]ImageNet数据集介绍以及数字图像处理技术 本次介绍一下imagenet数据集,并对imagenet数据集中的图片做一些数字图像处理预处理操作.那话不多说,搞起来!!! Image ...

  7. (附源码)python数字图像处理课程平台 毕业设计 242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  8. 数字图像处理期末总结

    前言概述部分 数字媒体包含哪些类型,涉及哪些研究领域? 1)可视数字媒体包含图像.视频.图形和可视化数据等媒体类型,这些媒体类型之间具有很强的相关性,但又有明确的差异性: 2)可视数字媒体涉及计算机视 ...

  9. 神经网络图像识别算法,数字图像处理相关书籍

    求<深度学习之图像识别核心技术与案例实战>全文免费下载百度网盘资源,谢谢~ <深度学习之图像识别核心技术与案例实战>百度网盘pdf最新全集下载:链接:?pwd=o7ww提取码: ...

最新文章

  1. Java基础篇:Java集合
  2. PMP之路 – 第2天 (做模拟题)
  3. 过河 2005年NOIP全国联赛提高组(离散化+dp)
  4. SpringMVC应用和RESTful应用的区别
  5. Java 一组温度从摄氏到华氏的转换
  6. STM32外设驱动---SysTick精准延时
  7. 游戏中的物理与数学(一):物体运动算法的实现
  8. Android客户端与服务器交互方式-小结
  9. jq之hide(1000)
  10. 退火算法 贪婪算法_算法贪婪策略简介
  11. centos6安装mysql 5.5_CentOS6.5上安装MySQL5.5
  12. 使用gulp将文件转码至utf-8格式
  13. sql数据类型_SQL数据类型
  14. 微服务学习之Gateway服务网关【Hoxton.SR1版】
  15. 科技爱好者周刊:第 98 期
  16. AIR202的lua开发
  17. 经验谈:调查问卷问题设计“六忌”
  18. 关于ZBRUSH弯折功能使用问题
  19. 7-1 汽车加油问题
  20. c语言牛逼,C语言牛逼代码

热门文章

  1. iOS 网络环境模拟流量监控实战
  2. IIC总线概述之时序(一)
  3. 打开IE自动跳转edge
  4. Windows下离线安装Python版本的prophet
  5. 互联网域名管理权移交的喜与忧
  6. 下列( )类型不是mysql中的数据类型_下列( )类型不是MySQL中常用的的数据类型。_学小易找答案...
  7. 【用Cocos Creator给暗恋的女生写一个游戏(8)】——(Run Game) Prefab的动态管理
  8. 2020考研六月份计划
  9. mootools的学习资源
  10. java 什么是免检异常_RuntimeException及其子类在异常处理时可以不必处理,属于免检异常。...