备战第16届智能车-图像处理进阶-逆透视算法

一、前言

逆透视的原理在网上有许多的说明,但是实际可以使用的代码却并不多。
代码并非完全原创,但是这种形式对于初学者会更友好

二、代码说明

1、定义部分

定义输入输出图像尺寸及数组

//输入图片尺寸
#define CAMERA_H  60
#define CAMERA_W  94

//输出图片尺寸
#define OUT_H  60
#define OUT_W  94

uint8 image[CAMERA_H][CAMERA_W];      //原图像
uint8 image_final[OUT_H][OUT_W];      //逆变换图像
double map_square[CAMERA_H][CAMERA_W][2];//现实映射
int map_int[OUT_H][OUT_W][2];//图像映射

2、模型计算部分

此部分用于计算现实与图像之间的映射关系
同一摄像头角度和高度对应的模型完全相同,只需要在主程序开始前计算一次即可
具体的参数调节详见注释

void Calculate(void)//计算逆变换模型 一般放在最早只运算一次 比较费时间 同一摄像头角度以及高度模型完全一样
{
   
   
	double angle = 0.8;//摄像头俯仰角 必须小于1 摄像头越平值越大
    double dep = 3.8;//视点到投影面距离


    double prop_j = 1;//上下宽度矫正,大于1
    double prop_i = 0;//密度修正系数,大于-1,小于1


    double j_large = 1.6;//横向放大倍数
    uint8 i_abodon = 7;//上方舍弃的行距离 舍弃行数越多图像前瞻越少,图像也越宽

    double hight = 50;//摄像头高度(调节也没有效果,只改变参数坐标)


    uint8 i;//图像从上到下行数
    uint8 j;//图像从左到右行数
    uint8 ii;
    //图片坐标
	double xg;
	double yg;
	//原始坐标
    double x0;
	double y0;

	double zt;

    double sin_a;
    double cos_a;
    sin_a = sin(angle);
    cos_a = cos(angle);

    //初始化摄像头坐标系
	for (i=0; i<CAMERA_H; i++)
	{
   
   
		for (j=0; j<CAMERA_W; j++)
		{
   
   
		    map_square[i][j][0] = ((float)CAMERA_H/2  - (float)i + 0.5)/10;
		    map_square[i][j][1] = ((float)j - (float)CAMERA_W/2 + 0.5)/10;
		}
	}

    //横向拉伸(微调)
    for (i=0; i<CAMERA_H; i++)
	{
   
   
		for (j=0; j<CAMERA_W; j++)
		{
   
   
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值