图像处理大型科普——图像直方图


偶尔跟在浙大读研的湖大一姐谈起轮廓识别,她正在做一个能把衣服分类成不同款式的应用,衣服平摊好,然后用手机一扫,马上就能告诉你这是T-SHIRT还是裙子,什么?你敢说这玩意鸡肋?T-SHIRT和裙子当然容易分别,但那些

莲蓬裙、连衣裙、连体裙、半截裙、背带裙、连体裤、热裤、短裤、超短裤、齐X裤、打底裤、靴裤、吊带裤你真的分得清楚么?

分不清的先去一旁罚歌一首

继续说正事

学姐大概是这么做的,先灰度,然后获取高频分量,然后根据高频分量二值化,然后获取轮廓的点集,然后通过直方图跟数据库里的预设模型数据做相似度匹配,最后匹配度高的是结果。

慢着,直方图能做匹配??

话刚码完,学姐刷的一下甩我一篇英文论文:“一起看看?”(论文的链接甩这:Shape-context.pdf)

在度娘、谷神以及有道哥的帮助下大致理解了文中的意思,也让我对直方图这个概念有了更深的认识

对于刚刚接触matlab图像处理的来说,一谈起直方图马上就想到了用imhist()绘制图像的直方图

又或者是用histeq()均衡直方图,让图片对比度更加高,甚至去除图片中的白噪(之前也写过一篇去除雾霾白噪的:MATLAB图像处理:一分钟去除图片中的雾霾 )

尽管matlab中的直方图有很多现成的应用,但千万别把直方图的定义限制在这几个函数里了,难不成人家Word\Excel里的直方图就不是直方图了么?

联想到各种报表、文案中的直方图,我觉得我们之所以使用直方图,主要是希望能有分类统计的功能,
对于图像处理中的直方图,对像素进行分类统计是我们最常使用的一种方式

于是得到灰度值的直方图:

关于这张图,也是有很多地方可以用的到的

比如说我们可以利用图像的细长峰值判断图像的主要信息集中在哪个灰度上,

利用图像两峰之间的面积判断背景色在哪个灰度上,

也可以用峰谷判断噪点所在的灰度,

同样可以利用该图中的灰度期望给出一个理想的二值化分界值。

甚至在手绘(最近有点迷上painter手绘。。。)中决定绘画中的主色调,背景色,和高亮点所对应的色彩范围,大大减少配色的难度。

倘若把这个直方图量化开来,变成一个size = 256的[gray_value ,count_num]形式的矩阵,完全可以把它当做这张图片特有的指纹,一个256维的向量,无论这张图片旋转多少角度,这个向量都不会改变,是的,终于绕回来了,任意一张图片都可以对应这样的一个向量,并且维度都是256哦,至于向量,管他多少维的,都是一条直线,那么两条直线的相似度不就是直线的夹角咯,(此处不贴公式,想一探究竟的请自行百度“n维向量的夹角”)哈哈,这不就完美的解决了图片旋转前后的匹配的问题么~~

做事要严谨,我一开始的确以为这就是直方图的匹配方式的,不过仔细一想,256维的向量角度。。。。。这计算量,这精确度,还得经受环境光源的影响,这么苛刻的匹配环境用在识别衣服款式上,几乎是得不到回报的

回到上文中提到的论文中,还得怪我们对直方图的认识太肤浅狭隘,我们一直都在灰度值的直方图中打转转,用统计的思想去碰概率,然而直方图不仅是统计,还可以分类,不仅是灰度值的直方图,也可以是别的什么的直方图啊。


前方高能,集中注意

这里特别提到的,是用于分类 轮廓点集 的一种直方图:

a和b是两张图的轮廓点集,c是一个坐标系,把一个圆按照离圆心的距离、和正北的角度两个指标分成60个块(角度分成12类区域,距离分成5类区域,12*5=60),然后遍历点集的每一个点,以当前遍历的点为C坐标的圆心,把其他点按60个区域划分,变成一个size = 60的素组,保存着每个块中的轮廓点数量,现在每个点都对应了一个关于其他点的直方图,就像d、e、f三张图一样,60个小方块,点的数量越多,颜色越深。

最后一步,比较a、b两两点间的相似度,获取匹配度最高的那个点与之对应,最终得运行结果就像图g中一样,无论图像旋转,缩放,还是光源的角度强弱,都不会对结果造成有效影响,最大程度上保证了匹配的精度。

这是一个很好的例子,来说明直方图在分类上的特别能力,我觉得在之后的应用中, 我们也可以通过制定分类指标的方式,把抽象的数据通过直方图分成大类,再进行简单的统计运算,最大化的发挥直方图在图相处理领域分类统计的作用。

希望大家通过这篇博文可以对身边的事物有更多奇葩的使用想法和理解方式,老是用别人的东西也没意思噻,反正这老外的思维我是服了

OVER~~

图像处理大型科普——图像直方图相关推荐

  1. 图像处理大型科普—图像信息熵

    图像处理大型科普-图像信息熵 哪里来的信息熵? 在很多图像处理的过程中,需要判别一个图像的清晰度,和图像分割结果的优劣,于是就引出了信息熵的概念,绝大多数时候,它都被用来作为评价图像的一个量化标准. ...

  2. Win8 Metro(C#)数字图像处理--3.3图像直方图计算

    原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary>/// Get the array of histrgram./// </summa ...

  3. OpenCV与图像处理学习二——图像直方图与色彩空间

    OpenCV与图像处理学习二--图像直方图与色彩空间 2.4 图像直方图(Image Histogram) 2.4.1 直方图的绘制 2.4.2 三通道直方图绘制 2.5 颜色空间 2.5.1 RGB ...

  4. 计算机图像处理实验二 图像直方图及灰度变换

    一.实验目的与要求 1.掌握图像灰度直方图的概念及其计算方法,编写灰度直方图统计程序. 2.通过对图像直方图的分析,学习应用直方图法解决诸如图像二值化等具体问题. 3.熟悉直方图均衡化的计算过程及其应 ...

  5. cuda图像处理_CUDA随笔之图像直方图(优化历程)

    在忙忙碌碌许久之后,终于有时间写 "CUDA随笔" 系列的第二集了! 这次给大家带来了一个图像处理的应用例子:计算图片的直方图. 虽然使用CUDA可以很轻松地在性能上超越CPU,如 ...

  6. 图像的灰度级数越多越好_MATLAB-数字图像处理 图像直方图归一化

    图像直方图归一化 图像直方图概念: 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数 ...

  7. OpenCV与图像处理学习五——图像滤波与增强:线性、非线性滤波、直方图均衡化与Gamma变换

    OpenCV与图像处理学习五--图像滤波与增强:线性.非线性滤波.直方图均衡化与Gamma变换 三.图像滤波与增强 3.1 线性滤波 3.1.1 方框滤波 3.1.2 均值滤波 3.1.3 高斯滤波 ...

  8. OpenCV图像处理学习二十,图像直方图均衡化原理与实现

    一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...

  9. 【Python CUDA版】河北工业大学计算机图像处理实验二:图像直方图及灰度变换

    一.实验目的与要求 1.掌握图像灰度直方图的概念及其计算方法,编写灰度直方图统计程序. 2.通过对图像直方图的分析,学习应用直方图法解决诸如图像二值化等具体问题. 3.熟悉直方图均衡化的计算过程及其应 ...

最新文章

  1. JAVA之JVM知识汇总
  2. oracle创建表语句_利用FME去拼接SQL语句并创建表
  3. Java 洛谷 P1200 [USACO1.1]你的飞碟在这儿 Your Ride Is Here
  4. 趣链 BitXHub跨链平台 (5)跨链网关-子模块
  5. 2020-12-5(操作系统---设备管理)
  6. java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...
  7. CVPR 2020 | 自适应聚合网络AANet:更高效的立体匹配
  8. 当强人工智能时代来临,哪些人不会失业?
  9. python中的map()函数详解
  10. Atomic原子类和Unsafe魔法类 详解
  11. java实现展示框,如何使用纯CSS实现蝴蝶标本的展示框效果
  12. 华丽的模态窗口弹出效果示例
  13. 深度linux运行浏览器中毒,使用深度Deepin系统的用户可在商店中安装360安全浏览器正式版...
  14. Mysql数据库repair table 修复表
  15. Debian参考手册(3-4)
  16. 我喜欢的句子(持续更新)
  17. ECBS多机器人路径规划
  18. python 内置函数 和 匿名函数
  19. vCenter Server CA证书下载
  20. html打开方式怎么没有,打开文件时右键菜单中没有“打开方式”怎么办?

热门文章

  1. HTML资源未找到,加载资源失败:服务器响应状态为404(未找到)
  2. python-将连续图片转换为视频
  3. eclipse如何用Debug调试程序
  4. 物体检测及分类方法总结
  5. 10.6 自注意力和位置编码
  6. NetSuite SuiteQL Query Tool
  7. 用递归和非递归求斐波那契数列
  8. 计算机类核心期刊审稿与发表周期,一般核心期刊的发刊周期有多长
  9. win10 jdk环境变量配置
  10. Golang + Gin + cytocsape.js + neo4j