图像匹配之不变矩匹配

该博客探讨了利用图像的不变矩进行图像匹配的方法,重点在于如何通过计算两幅图像的二阶和三阶矩导出7个不变矩,并在OpenCV中实现这一过程。尽管图像可能经历平移、旋转或比例变化,但在一定范围内,这些不变矩能保持特征,从而用于判断图像是否匹配。文中提供了匹配示例和相似度计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用图像的不变矩特征进行图像匹配是一种基于特征的图像匹配方式,它通过计算两幅图的不变矩特征,然后再计算这两组特征的相似度来判断两幅图是否匹配。

这里利用图像的二阶和三阶矩来导出7个不变矩,这些特征在比例因子小于2和旋转角度不超过45度的条件下,对于平移,旋转,比例因子的变化都是不变的,它反映了图像的固有特性。这7个不变矩的计算公式可以看下面的程序,公式确实写的累啊。

opencv实现的代码如下:

#include "stdafx.h"  
   
#include <opencv2/opencv.hpp>  
#include "highgui.h"  
#include <math.h>  
typedef  unsigned long uint32;
typedef  unsigned int  uint16;
typedef  unsigned char uint8;

IplImage *src_gray1, *src_gray2, *src_gray3;    
IplImage *temp_gray1, *temp_gray2, *temp_gray3;   

CvPoint CalImageCenter( IplImage* I )    //单通道图像,计算图像重心位置
{
	CvPoint CenterPosition;
	double  m10=0;
	double  m00=0;
	double  m01=0;
    int i,j;
	
	for ( i=0; i<I->height; i++ )
	{
		uint8* ptr = (uint8*)( I->imageData + i*I->widthStep );
		for ( j=0; j<I->width; j++ )
		{
			uint8 Pixel = ptr[j];
			m10 += (j)*Pixel;
			m00 += Pixel;
			m01 += (i)*Pixel;		
			
		}
	}
	CenterPosition.x = m10/m00;
	CenterPosition.y = m01/m00;
	return  CenterPosition; 	
}


double CalCenterMoment( IplImage* I, int CenterX, int CenterY, int ip, int jp )  //计算图像的中心矩
{
	int i,j;
	double ICenterMoment=0;
	for ( i=0; i<I->height; i++ )
	{
		uint8* ptr = (uint8*)( I->imageData + i*I->widthStep );
		for ( j=0; j<I->width; j++ )
		{
			uint8 Pixel = ptr[j];
			double temp;       //中间值
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值