1. /*-------------------------------------------------------------------------*/
  2. // 函数名称: histeq()
  3. // 传入参数:
  4. // BYTE*dstData 要匹配的灰度图像内存空间
  5. // double *srcArray 模版的直方图累积,并进行归一化,大小为256
  6. // int m_Width 匹配内存空间的宽度
  7. // int m_Height 匹配内存空间的高度
  8. // int m_pitch 匹配内存空间的每行所在内存大小
  9. /*-------------------------------------------------------------------------*/
  10. void histeq(BYTE*dstData,double *srcArray,int m_Width,int m_Height,int m_pitch)
  11. {
  12. double dstHist[];
  13. memset(dstHist,, * sizeof(double));
  14.  
  15. int i,j;
  16.  
  17. double dstArray[];
  18. memset(dstArray,, * sizeof(double));
  19.  
  20. //统计直方图
  21. for (i = ;i < m_Height;i++)
  22. {
  23. for (j = ;j < m_Width;j++)
  24. {
  25. dstHist[(int)dstData[i * m_pitch + j]]++;
  26. }
  27. }
  28.  
  29. //计算直方图累积
  30. double m_Bytes = m_Width * m_Height;
  31. dstArray[] = dstHist[];
  32. for (i = ;i < ;i++)
  33. {
  34. dstArray[i] = dstArray[i - ] + dstHist[i];
  35. }
  36.  
  37. //直方图累积归一化
  38. for (i = ;i < ;i++)
  39. {
  40. dstArray[i] /= m_Bytes;
  41. }
  42.  
  43. //直方图匹配
  44. double m_diffA,m_diffB;
  45. int k = ;
  46. BYTE mapPixel[];
  47. memset(mapPixel,, * sizeof(BYTE));
  48. for (i = ;i < ;i++)
  49. {
  50. m_diffB = ;
  51. for (j = k; j < ;j++)
  52. {
  53. m_diffA = abs(dstArray[i] - srcArray[j]);
  54. if (m_diffA - m_diffB < 1.0E-5)
  55. {
  56. m_diffB = m_diffA;
  57. k = j;
  58. }
  59. else
  60. {
  61. k = j - ;
  62. break;
  63. }
  64. }
  65. if (k == )
  66. {
  67. for (int l = i;l < ;l++)
  68. {
  69. mapPixel[l] = (BYTE) k;
  70. }
  71. break;
  72. }
  73. mapPixel[i] = (BYTE) k;
  74. }
  75.  
  76. //目标图像查找索引表
  77. for (i = ;i < m_Height;i++)
  78. {
  79. for (j = ;j < m_Width;j++)
  80. {
  81. dstData[i * m_pitch + j] = mapPixel[dstData[i * m_pitch + j]];
  82. }
  83. }
  84. }

源地址:http://blog.csdn.net/hcx25909/article/details/7090921

C++ 直方图匹配算法代码的更多相关文章

  1. 图解BM(Boyer-Moore)字符串匹配算法+代码实现

    简介 本篇文章主要分为两个大的部分,第一部分通过图解的方式讲解BM算法,第二部分则代码实现一个简易的BM算法. 基本概念 bm是一个字符串匹配算法,有实验统计,该算法是著名kmp算法性能的3-4倍,其 ...

  2. 模式匹配之sift--- sift图像特征提取与匹配算法代码

    sift,The Scale Invariant Feature Transform ,尺度不变特征变换,是检测图像中具有唯一性.对图像平移.旋转.缩放.甚至仿射变换(如从不同角度拍摄图片)保持不变性 ...

  3. 图解KMP字符串匹配算法+代码实现

    kmp算法跟之前讲的bm算法思想有一定的相似性.之前提到过,bm算法中有个好后缀的概念,而在kmp中有个好前缀的概念,什么是好前缀,我们先来看下面这个例子. 观察上面这个例子,已经匹配的abcde称为 ...

  4. 【图像处理】基于OpenCV底层实现的直方图匹配

    image processing 系列: [图像处理]图片旋转 [图像处理]高斯滤波.中值滤波.均值滤波 直方图匹配算法.又称直方图规定化.简单说.就是依据某函数.或者另外一张图片的引导,使得原图改变 ...

  5. 数字图像处理作业使用OpenCV - 自定义直方图

    第二次作业需要打印出来灰度直方图,当然不能使用ocv的自带calcHist函数来得到Mat对象了……结果上网搜索怎么用自己的数据创建直方图,搜到的都是直接用函数的_(:з」∠)_ 结果这个地方拖了好久 ...

  6. Oracle直方图的详细解析

    yuanwen:http://blog.csdn.net/javacoffe/article/details/5578206 Oracle直方图解析 一.    何谓直方图: 直方图是一种统计学上的工 ...

  7. Oracle直方图的详细解析(转)

    Oracle直方图解析 一.    何谓直方图: 直方图是一种统计学上的工具,并非Oracle专有.通常用于对被管理对象的某个方面的质量情况进行管理,通常情况下它会表现为一种几何图形表,这个图形表是根 ...

  8. OpenCV-跟我一起学数字图像处理之直方图均衡化

    从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致 ...

  9. OpenCV学习(24) 直方图(1)

    直方图是对数据的统计,并将统计结果分布于一系列预定义的槽中.这里的数据不仅仅指的是灰度值,它可以是任何能有效描述图像特征的数据,比如图像梯度等等. 假设有一个矩阵包含一张图像的信息 (灰度值 0-25 ...

随机推荐

  1. CCIE路由实验(7) -- MPLS VPN

    1.LDP协议的各种情况2.LDP和BGP交互3.LDP高级部分4.MPLS VPN (RIP和静态)5.MPLS VPN (EIGRP)6.MPLS VPN (OSPF)7.MPLS VPN (EB ...

  2. Codeforces Round #189 (Div. 2)

    题目地址:http://codeforces.com/contest/320 第一题:基本题,判断mod 1000,mod 100.,mod 10是不是等于144.14.1,直到为0 代码如下: #i ...

  3. [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢

    一,什么是TicTacToe(井字棋)   本 游戏 为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿 ...

  4. Tomcat提供的安全机制

    Tomcat中安全机制 BASIC认证 <login-config>  <auth-method>BASIC</auth-method>  </login-c ...

  5. hdu1200(来来回回串起来)

    Problem Description Mo and Larry have devised a way of encrypting messages. They first decide secret ...

  6. [Java][activiti]Activiti这个过程委托功能[getAssignee()与getOwner()差异]

    一.流程图: 二.流程定义文件: AssigneeUserAndGroup.bpmn 三.单元測试: ProcessTestDelegateTask.java 四.主要运行语句 // 签收 taskS ...

  7. ASP.NET - 用户控件制作

    首先添加用户控件: 在里面写上代码: <%@ Control Language="C#" AutoEventWireup="true" CodeBehin ...

  8. Java多线程实现生产者消费者延伸问题

    在操作系统中有一类问题被称为生产者消费者问题:意为,有数个生产者生产产品,有数个消费者消费产品,他们共享一定数量的缓存. 这里用java多线程编程,实现生产者消费者问题的一种延伸,橘子苹果问题. 题目 ...

  9. Kendo UI开发教程(21): Kendo MVVM 数据绑定(十) Source

    Source绑定可以把ViewModel的值和由Kendo模板定义的目标元素绑定,如果ViewModel的值发生变化,被绑定的目标元素也随之发生变化.模板由属性data-template指定,它的值为 ...

  10. HDU 1030 Delta-wave 数学题解

    给出一个数字塔,然后求沿着数字之间的边走,给出两个数字,问其路径最短的长度是多少. 看似一条搜索题目,只是有一定做题经验的人都知道,这个不是搜索题,直接搜索肯定超时. 这个是依据规律计算的数学题目. ...