图像匹配之距离变换匹配法

本文介绍了距离变换在图像匹配中的应用,通过计算图像中任意位置到最近边缘点的距离进行匹配。采用欧式距离并进行近似,4邻域相邻点距离设为0.3,8邻域为0.7,其余点为1。opencv实现该方法,用于模板匹配。

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

距离变换是一种常见的二值图像处理算法,用来计算图像中任意位置到最近边缘点的距离,常见的距离测度函数有切削距离,街区距离和欧式距。切削距离和街区距离是欧式距离的一种近似。

基于距离变换的匹配的原理是计算模板图覆盖下的那块子图与模板图之间的距离,也就是计算子图中的边缘点到模板图中最近的边缘点的距离,这里采用欧式距离,并对欧式距离进行近似,认为与边缘4邻域相邻的点的距离为0.3,8邻域相邻的点的距离为0.7,不相邻的点的距离都为1。

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; 
IplImage *Dist;
uint8    TemplatePixelm10 = 0;
uint8    TemplatePixelm01 = 0;
uint8    TemplatePixeln01 = 0;
uint8    TemplatePixeln10 = 0;
uint8    TemplatePixelm1n1 = 0;
uint8    TemplatePixelm1n0 = 0;
uint8    TemplatePixelm0n1 = 0;
uint8    TemplatePixelm0n0 = 0;
void AllocateImage(IplImage* I,IplImage* T)   //给图像分配大小    
{    
    CvSize sz   = cvGetSize(I);    
    CvSize sz_T = cvGetSize(T);    
        
    
    src_gray1 = cvCreateImage( sz, IPL_DEPTH_8U, 1);    //原图的三个通道    
    src_gray2 = cvCreateImage( sz, IPL_DEPTH_8U, 1);    
    src_gray3 = cvCreateImage( sz, IPL_DEPTH_8U, 1);    
    
    temp_gray1 = cvCreateImage( sz_T, IPL_DEPTH_8U, 1);    //模板的三个通道    
    temp_gray2 = cvCreateImage( sz_T, IPL_DEPTH_8U, 1);    
    temp_gray3 = cvCreateImage( sz_T, IPL_DEPTH_8U, 1);    

	Dist = cvCreateImage(sz_T,IPL_DEPTH_8U,1);
    
} 

void CalTemplateDist(IplImage* I,IplImage* Dist, long* Nb)    //计算在模板图对应位置上的距离
{
	int i,j;
	float dis;
	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];
			if(Pixel==0)
			{
				dis = 0;
				(*Nb)++;
			}
			else
			{
				
				if( i==0 && j==0 )                     //第一行第一个点
				{
					TemplatePixelm10  = ptr[j+1];
					TemplatePixeln10  = *( I->imageData + (i+1)*I->widthS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值