matlab计算多张图像的灰度直方图_计算机视觉学习笔记7 直方图比较两图相似性...

通过直方图对两幅图像进行比较,就是就是直方图数据,比较两幅图像的直方图的相似性,然后得出两图的相似系数。

这是早期图像检测的常用技术手段,通常与图像特征值,边缘检测等方法结合,可以简单迅速分析出两幅图像是否相似。

在MATLAB中,一般用函数 corr2()计算两图相关系数,要求图像为灰度图像,并且尺寸相同。而OpenCV就人性化很多了,采用compareHist()函数检测图像相似性,可以直接检测彩色图像,不要求图像尺寸,而且还提供了四种检测方法,然而有三种方法很坑,基本可以忽略。

MATLAB比较两图相似性

代码很简单,注意把彩色图像转为灰度图像即可

img1 = imread('data/IMG1.bmp');img2 = imread('data/IMG2.bmp');gray1 = rgb2gray(img1);gray2 = rgb2gray(img2);subplot(1,2,1); imshow(gray1);subplot(1,2,2); imshow(gray2);r = corr2(gray1, gray2);fprintf('两图像相似性: %f', r)

因为采用的是灰度图像,损失了两个像素通道,所以检测效果较差

54acf02a025a573da678fd6ab8ead089.png

灰度图

61ab2c44cd8fb6016bdd800de7085f0d.png

接近77%的相似性

c++比较两图相似性

c++操作稍显复杂,需要先进行彩色空间变换,变为hsv空间(一般而言直方图在hsv空间进行处理效果比较好),再获取直方图,然后进行归一化,才能进行检测。

openc提供了四种检测方法:相关性:HISTCMP_CORREL, 卡方:HISTCMP_CHISQR, 交叉HISTCMP_INTERSECT, 巴氏距离:HISTCMP_BHATTACHARYYA

#include #include using namespace cv;using namespace std;int main(int argc, char** argv) { Mat img1 = imread("data/images/IMG1.bmp"); Mat img2 = imread("data/images/IMG2.bmp"); imshow("image1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值