朱金灿
在求非8U类型的图像数据的直方图时一般采用拉伸到0到255范围。但是这样做的一个很大弊端是造成图像信息丢失(因为从0到几万拉伸到0到255,信息丢失是肯定的)。
为了防止信息丢失,现在需要在不对图像拉伸的情况下求取32R数据的直方图。
毫无疑问,你不能开辟一个大数组去保存所有像素值的个数,因为一则2的32次方数值4294967296,估计编译器不允许开辟这样大的内存,二则32R的图像的像素值范围就是0到几万,开辟这么大的数组去保存无疑是浪费内存。那么开辟一个几万的数组去保存是否就是合适呢?也不合适,首先32R的图像存在像素值是负数的情况,这样数组下标号和像素值无法对应起来,这样就无法将像素值和像素个数联系起来,其次虽然32R的图像的像素值范围就是0到几万,但是在很多情况下实际的像素级只有几百或几千个,开辟一个几万的数组依然存在浪费内存的问题。
为此需要使用一个数据结构将像素值和像素个数联系起来。开始我设想使用STL的map,以像素值为键,像素个数为键值,后来我发现和算法结合起来map显得效率很低。
为此我设计了一个结构体:
struct GrayMap
{
long PixelValue;// 像素值
long PixelNum;// 对应该像素值的像素个数
};
具体算法如下:
1.       遍历图像,获取图像的最大值Max和最小值Min
2.       开辟一个static<long>(abs(Max-Min)) 个GrayMap数组GrayMapVec
3.       再次遍历图像,每读取一个像素值,判断GrayMapVec是否存在这一像素值(需要遍历GrayMapVec数组),若存在,则将其对应元素的像素个数加1,若不存在则将其插入到GrayMapVec,同时记录实际存在的像素级RealPixelGrade。
4.       开辟一个RealPixelGrade个GrayMap的数组RealGrayMapVec,将GrayMapVec的像素个数不为0的元素插入到RealGrayMapVec(此举是为了进一步减少不必要的内存)
若使用map作为基本数据结构,瓶颈存在于遍历map。由此我体会到数据结构可能是这样一种东西:你轻易不会遇到这方面的问题,就算遇到了,现成的数据结构也足以解决我们的大多数问题,比如STL、MFC的集合类。但是万一遇到了,很可能是致命的问题,这时你不得不感叹数据结构的重要性了。

转载于:https://www.cnblogs.com/lanzhi/archive/2008/07/06/6471233.html

获取32R的图像的直方图的一个算法相关推荐

  1. [Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. 【学习OpenCV4】什么是图像的直方图?如何获取直方图?

    图像的直方图 一.什么是图像直方图 二.如何计算图像直方图 三.二维直方图 一.什么是图像直方图   图像直方图是图像像素值的统计学特征.计算代价较小,具有图像平移.旋转.缩放不变性等众多优点,广泛地 ...

  3. 【图像处理】——图像灰度直方图的绘制(直接调用函数和自定义函数)

    目录 一.灰度直方图概念 二.直接调用opencv的函数caclHist() 1.函数介绍 2.实例 (1)绘制全局直方图 (2)绘制局部的直方图 ​ 三.自定义函数进行灰度直方图的绘制 1.代码 2 ...

  4. MATLAB实现图像灰度直方图

    (近期有用到灰度直方图的情况,就稍微做了一点点小总结,第一次总结,借鉴了很多博主的文章,下面会码出链接,膜拜大佬~) 1. 图像灰度直方图 灰度直方图是将数字图像中所有像素按灰度值的大小,统计每种像素 ...

  5. [Python从零到壹] 五十二.图像增强及运算篇之图像掩膜直方图和HS直方图

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. 图像增强及运算篇之图像掩膜直方图和HS直方图

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. 利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理

    如果一幅图像的灰度值集中在某个比较窄的区域,则图像的对比度会显得比较小,不便于对图像的分析和处理. 图像的直方图均衡化可以实现将原图像的灰度值范围扩大,这样图像的对比度就得到了提高,从而方便对图像进行 ...

  8. 遥感数字图像处理(实验一)——预处理、图像的真彩色和拉伸显示(包括图像的直方图显示、线性拉伸、与直方图匹配)

    目录 实验目的: 实验内容一: 实验步骤: 一.影像的获取 二.影像的合成 三.对合成的影像进行不规则分幅裁剪 四.对裁剪的影像进行拉伸 五.直方图匹配 六.实验总结及扩展 实验目的: 理解遥感数字图 ...

  9. Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++)

    Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++) Baumer工业相机 Baumer工业相机使用图像算法增加图像的技术背景 Baumer工业相机 ...

最新文章

  1. 在ASP.NET 中实现单点登录
  2. svm 彻底的过程
  3. 神经网络中的激活函数的作用和选择
  4. Qt中定时器使用的两种方法
  5. python写入excel数据教程_python 将数据写入excel
  6. A wizard’s guide to Adversarial Autoencoders: Part 2, Exploring latent space with Adversarial Autoen
  7. 微软也加入FB开放计算项目 发布交换机操作系统
  8. 新天龙官网服务器更新消息,新天龙八部怀旧服太火,增开7组服务器不够用,还得继续扩容...
  9. Python使用pyzabbix调用Zabbix API
  10. 自动驾驶——Tracking的学习笔记
  11. javax.mail.MessagingException: 553 authentication is required
  12. 同比增长19.1%,软银第一季度净利2542亿日元
  13. 使用 CocoStudio 创建 Cocos2d-x 序列帧和骨骼动画
  14. 抢红包案例分析附代码实现(一)
  15. mysql数据库外键的作用
  16. @RunWith注解的作用
  17. 入门3D游戏建模,是选择角色建模还是场景建模,看完你来选
  18. 测试人生 | 为了娃的奶粉钱,测试媛妈妈拿出考研的拼劲,半年终圆大厂梦!
  19. 模拟电路实验 01 - | 基本共射放大电路
  20. IDEA中如何打包为jar包

热门文章

  1. C# WinForm窗体界面设置
  2. Spark安装配置指南
  3. 第2章数据库服务器的安装与卸载
  4. 年假.........
  5. Flink EventTime和Watermarks原理结合代码分析(转载+解决+精简记录)
  6. psql: FATAL: role “appleyuchi” does not exist与修改默认密码
  7. You must define a PAYPAL_PAYFLOW_VENDOR_ID setting
  8. 淘宝Django书籍调研
  9. C4.5最新版本Release8与MDL的关系的详细解读
  10. python操作redis的set