也是直方图匹配的一种形式

函数原型:

CVAPI(float)  cvCalcEMD2( const CvArr* signature1,
                          const CvArr* signature2,
                          int distance_type,
                          CvDistanceFunction distance_func CV_DEFAULT(NULL),
                          const CvArr* cost_matrix CV_DEFAULT(NULL),
                          CvArr* flow CV_DEFAULT(NULL),
                          float* lower_bound CV_DEFAULT(NULL),
                          void* userdata CV_DEFAULT(NULL));

可以轻量化地调用这个函数:

CVAPI(float)  cvCalcEMD2( const CvArr* signature1,
                          const CvArr* signature2,
                          int distance_type);

需要将图像先转换成两个矩阵再进行匹配对比

测试图像(骨灰级找茬图像):

        

程序代码:

#include <highgui.h>
#include<cv.h>
#include <opencv2/legacy/legacy.hpp>
using namespace std;int main()
{IplImage *src1 = cvLoadImage("test1.jpg");IplImage *b_plane_1 = cvCreateImage(cvGetSize(src1),8,1);IplImage *g_plane_1 = cvCreateImage(cvGetSize(src1),8,1);IplImage *r_plane_1 = cvCreateImage(cvGetSize(src1),8,1);IplImage *planes1[]={b_plane_1,g_plane_1,r_plane_1};cvSplit(src1,b_plane_1,g_plane_1,r_plane_1,0);cvNamedWindow("src1",CV_WINDOW_AUTOSIZE);  cvShowImage("src1",src1);  IplImage *src2 = cvLoadImage("test2.jpg");IplImage *b_plane_2 = cvCreateImage(cvGetSize(src2),8,1);IplImage *g_plane_2 = cvCreateImage(cvGetSize(src2),8,1);IplImage *r_plane_2 = cvCreateImage(cvGetSize(src2),8,1);IplImage *planes2[]={b_plane_2,g_plane_2,r_plane_2};cvSplit(src2,b_plane_2,g_plane_2,r_plane_2,0);cvNamedWindow("src2",CV_WINDOW_AUTOSIZE);  cvShowImage("src2",src2);  int h_bins=16,s_bins=16;CvHistogram *hist1,*hist2;int size[]={h_bins,s_bins};float h_ranges[]={0,255};float s_ranges[]={0,255};float *ranges[]={h_ranges,s_ranges};hist1=cvCreateHist(2,size,CV_HIST_ARRAY,ranges,1);cvCalcHist(planes1,hist1,0,0);cvNormalizeHist(hist1,1.0);//归一化hist2=cvCreateHist(2,size,CV_HIST_ARRAY,ranges,1);cvCalcHist(planes2,hist2,0,0);cvNormalizeHist(hist2,1.0);//归一化CvMat *sig1,*sig2;int numrows=h_bins*s_bins;sig1=cvCreateMat(numrows,3,CV_32FC1);sig2=cvCreateMat(numrows,3,CV_32FC1);for(int h=0;h<h_bins;h++){for(int s=0;s<s_bins;s++){float bin_val=cvQueryHistValue_2D(hist1,h,s);cvSet2D(sig1,h*s_bins+s,0,cvScalar(bin_val));cvSet2D(sig1,h*s_bins+s,1,cvScalar(h));cvSet2D(sig1,h*s_bins+s,2,cvScalar(s));bin_val=cvQueryHistValue_2D(hist2,h,s);cvSet2D(sig2,h*s_bins+s,0,cvScalar(bin_val));cvSet2D(sig2,h*s_bins+s,1,cvScalar(h));cvSet2D(sig2,h*s_bins+s,2,cvScalar(s));}}printf("EMD : %.4f\n",cvCalcEMD2(sig1,sig2,CV_DIST_L2));printf("CV_COMP_BHATTACHARYYA : %.4f\n",cvCompareHist(hist1,hist2,CV_COMP_BHATTACHARYYA)); cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&src1);   cvReleaseImage(&src2);cvReleaseImage(&b_plane_1);   cvReleaseImage(&g_plane_1); cvReleaseImage(&r_plane_1); cvReleaseImage(&b_plane_2); cvReleaseImage(&g_plane_2); cvReleaseImage(&r_plane_2); return 0;
}

运行结果(EMD和CV_COMP_BHATTACHARYYA对比):

cvCalcEMD2() 直方图匹配相关推荐

  1. 基于OpenCV的直方图匹配

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为 ...

  2. 在OpenCV下写的直方图匹配(直方图规定化)C++源码!

    直方图匹配的原理就不多作解释了,我曾经还将MATLAB源码改写成过C源码,详情可见我的博文 根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化C源码! 本文已转移到 https ...

  3. 直方图应用:直方图均衡化,直方图匹配,对比直方图

    直方图均衡化 直方图均衡化(Histogram Equalization)是直方图最典型的应用,是图像点运算的一种.对于一幅输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由 ...

  4. 【OpenCV】直方图应用:直方图均衡化,直方图匹配,对比直方图

    本文链接:https://blog.csdn.net/xiaowei_cqu/article/details/7606607                                       ...

  5. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波9 - 直方图处理 - 直方图匹配(规定化)灰度图像,彩色图像都适用

    直方图匹配(规定化) 连续灰度 s=T(r)=(L−1)∫0rpr(w)dw(3.17)s = T(r) = (L-1) \int_{0}^{r} p_r(w) \text{d} w \tag{3.1 ...

  6. 【OpenCV 例程200篇】48. 图像增强—彩色直方图匹配

    [OpenCV 例程200篇]48. 图像增强-彩色直方图匹配 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直 ...

  7. 【OpenCV 例程200篇】47. 图像增强—直方图匹配

    [OpenCV 例程200篇]47. 图像增强-直方图匹配 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直方图 ...

  8. 直方图匹配(histogram matching):使两幅影像的色调保持一致

    使用场景: 使用直方图匹配,使两幅图像的色调更一致,是在模型训练之前使用的,是一种数据处理的方式(例如在图像风格转换的时候,那么使用直方图匹配会让源域与目标域的图像色调更接近,从而风格转换的效果更好. ...

  9. 【zz】matlab 直方图匹配

    原文地址:http://www.cnblogs.com/tiandsp/archive/2012/12/19/2825418.html 直方图匹配或叫做直方图规定化都可以,是把原图像的直方图按照给定的 ...

  10. 直方图匹配法(规则化)

    生成具有特定直方图的图像的方法,被称作直方图匹配法或***直方图规则化***. 原理: 考虑归一化之后在[0,1]区间内的连续灰度级,令r和z分别表示输入图像与输出图像的灰度级. 输出图像的灰度级有概 ...

最新文章

  1. RDKit:化合物相似性搜索(基于Python3)
  2. Spring源码系列:BeanDefinition源码解析
  3. LOJ#162. 快速幂 2(分块)
  4. 计算机换色带技巧,色带盒怎么更换 色带盒更换安装方法【图文教程】
  5. 122 Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II
  6. 批量模糊查询_模糊匹配,Power Query的这个功能太实用了,可惜Excel还没有
  7. 快慢法判断单链表中是否有循环链表
  8. Mars 是什么、能做什么、如何做的——记 Mars 在 PyCon China 2018 上的分享
  9. hprose java 下载_Hprose Java|Hprose For Java下载v2017.2.0官方版 附使用教程 - 欧普软件下载...
  10. (82)Verilog HDL:状态机二段式
  11. MySQL高级-MySQL锁
  12. mysql 常用配置
  13. 我的年终总结:做了9年SOC的一点点实践体会
  14. 先进软件开发技术与工具
  15. MAC上编写汇编程序
  16. Alpha Test和Alpha Blend Shader两种处理透明的方法
  17. 自我鉴定300字大专计算机应用,职高自我鉴定300字(共8篇) .docx
  18. Python爬虫学习-简单爬取网页数据
  19. 美国队长的工资 python代码-Python | 用Python画个美队盾牌送给你
  20. 使用 ABAP 代码制作手机能够扫描的二维码(QRCode)试读版

热门文章

  1. 移动先行之谁主沉浮? 带着你的Net飞奔吧!
  2. c# 更改最大化按钮功能实现最大化时遮盖任务栏,点击Esc取消全屏
  3. ASP.NET 主题和外观
  4. BZOJ2752[HAOI2012] 高速公路(road)
  5. java访问带有密码验证的es_elasticsearch x_pack带验证 java配置访问
  6. android底部显示不出来,Android studio 底部的状态栏不见了如何显示
  7. 小米潘多拉路由器添加节点_小米mesh好用吗?AX3600AX1800 混组测试
  8. sql_存储过程、函数、分支、循环
  9. dw中html5快捷键,DW快捷键大全
  10. MySQL(20)-----数据库设计的常规步骤