像素精度计算

像素精度——一像素对应多少毫米——距离不同像素精度也不同

将棋盘格与相机CCD平面大致平行摆放,通过【每个点处的近似像素精度=相邻两个角点之间的实际距离(棋盘格尺寸已知)/ 棋盘格上检出的相邻两个角点之间的像素距离】,两两角点之间计算像素精度,最后取平均

示例:一张1280*1024像素的图片里,其中的棋盘格是6*9,物理尺寸为12mm*12mm

#include"opencv2/opencv.hpp"
using namespace cv;
int main()
{
Mat srcimg = imread("6.bmp");
Mat gray;
cvtColor(srcimg,gray,CV_RGB2GRAY);
Size board_sz = Size(,);
vector<Point2f>corners;
bool found = findChessboardCorners(srcimg, board_sz, corners,CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS);
printf("检测到的原始角点坐标");
for (size_t i = ; i < corners.size(); i++)
{
printf("第%d个点(%f,%f)\n",i,corners[i].x,corners[i].y);
}
if (found)
{
printf("成功检测到角点\n");
//检测的角点时以右下角为原点的
cornerSubPix(gray,corners,Size(11,11),Size(-1,-1),TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,0.1));//输入的图像,必须是8位的灰度或者彩色图像。
drawChessboardCorners(srcimg,board_sz,corners,found);
Mat dstimg;
resize(srcimg,dstimg,Size(,));
imshow("亚像素角点图", dstimg);
waitKey();
printf("检测到的0.1亚像素斜的图像角点坐标\n");
float jingdux = , jinduy = ;
int j = ;
bool flag = false;
for (size_t i = ; i < corners.size(); i++)
{
if (i==)
{
}
else
{
jingdux=sqrt((corners[i].x - corners[i - 1].x)*(corners[i].x - corners[i - 1].x) + (corners[i].y - corners[i - 1].y)*(corners[i].y - corners[i - 1].y));
jingdux = 12.0 / jingdux;
}
printf("第%d个点(%f,%f)\n", i, corners[i].x, corners[i].y);
printf("其像素精度为:%f/像素\n", jingdux);
}
}
waitKey();
return ;
}

由此可以得到其相机的像素精度是0.17mm/像素(其是相机在某个固定高度上时得出的,相机离目标面越远,则这个值越大,即精度降低了),其后面的几位都一直改变,是因为相机标定板也可能倾斜,或者像素长度计算误差。

物理精度计算

只考虑像素精度是没有意义的,因为很多相机可以检测亚像素

像素精度0.17mm/像素,0.1亚像素精度,则其实际定位的物理精度为0.017mm。

这是理想状况下的,一般还有很多外部影响导致误差增大,如果考虑外部因素的话定位精度会比理想的多几倍。

我们的物理精度到了0.017mm,也不代表我们能检测0.017mm的物体,因为1个亚像素往往凸显不出特征

误差处理

如果是通过物体所占的像素多少来计算其长度时,则会出现像素的误差积累,因为我们是拿一个固定值来与像素相乘的。例如某个尺子长度在此高度的相机里拍到的图像里所占的像素为100像素,则实际的0.17mm的误差会累计,假如其误差是0.01mm,其是固定误差,即实际的是0.16mm,其固定误差就会累计成100*0.01mm=1mm的误差。

现实中有些东西是不会成线性增加,是因为这些误差是随机误差,不是固定误差,随机误差积分时误差之间会进行抵消。改进方法是要使用很密的棋盘格来对应图像里的像素点,从而来提高精度,即定位物体的头跟尾的像素位置,然后把其转换到以标定纸为坐标系的物理坐标,然后进行相减则可以得出其高精度长度,不会有累计误差。

棋盘格 测量 相机近似精度 (像素精度&物理精度)的更多相关文章

  1. CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport

    1.PX(CSS pixels) 1.1 定义 虚拟像素,可以理解为“直觉”像素,CSS和JS使用的抽象单位,浏览器内的一切长度都是以CSS像素为单位的,CSS像素的单位是px. 1.2 注意 在CS ...

  2. pixel像素与物理像素

  3. 移动端适配(绝对单位、相对单位、CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport)

    在某公司做了一次分享,主题是‘移动端和pc端开发的区别’.可以说,这总结的原版就是在这样的契机下完成的.因为我只是习惯了移动端就应该那么写(设置viewport等),要是让我给大家分条讲下所以然,还真 ...

  4. pt和px区别 pt是逻辑像素,px是物理像素

    pt和px区别 pt是逻辑像素,px是物理像素字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢?先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点:pt就是po ...

  5. D3D9 浮点精度的问题

    最近在对我们的渲染引擎进行优化的时候,发现一个奇怪的现象,因为我们做了Pre-Z(把比较大的物体先绘制一遍,这个时候关闭颜色写,只开启深度测试和写入,目的是为了减少后面一些不可见像素的计算.),面在绘 ...

  6. ACCESS-关于DELPHI中操作ACCESS数据库中单精度数据的问题

    在近日几个帖子里面,和QQ群的讨论里面,我发现很多网友都遇到的问题都是因为不恰当地使用了单精度/双精度数值.因此想专门就这个话题谈一下. 单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面) ...

  7. 支持无限精度无限大数的类BigNumber实现

    介绍 本篇是MathAssist的第二篇,在前言中粗略地展示了MathAssist的“计算和证明”能力,本篇开始将详细介绍其实现原理. 从计算开始说起,要实现任意大数的计算器首先得有一个类支持大数运算 ...

  8. php浮点型以及精度问题

    浮点型(也叫浮点数 float,双精度数 double 或实数 real) 浮点数的形式表示: LNUM [0-9]+DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9 ...

  9. 设置浮点数的显示精度&precision(0)

    /*    设置浮点数的显示精度    cout.precision(int)可以设置浮点数的显示精度(不包括小数点)        注: 1.如果设置的精度大于浮点数的位数,如果浮点数能根据IEEE ...

随机推荐

  1. 关于mysqli_free_result($result)报错

    运行原来的一个原生的php写的项目,出现mysqli_free_result($result)的警告 Warning: mysqli_free_result() expects parameter 1 ...

  2. 彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题(转)

    PS: 本文为转载而来,如有冲突,请与我联系,将立即删除. 最近在使用静态库时,总是出现这个问题.下面总结一下我得解决方法: 1. .m文件没有导入   在Build Phases里的Compile ...

  3. 数据库事务隔离级别<转>

    数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复 ...

  4. iPhone开发秘籍(第2版)--具体书签版

    http://download.csdn.net/download/fksec/4872499

  5. VB.NET &amp; 策略模式(下机用户类型选择)

    上篇文章讲述了对于下机操作和基本数据设定的时间联系,今天主要就是应用"策略模式"来了解了解对于固定用户,以及暂时用户之间的选择,看学习设计模式的时候自己对于策略模式的理解,我们能够 ...

  6. Spring.Net框架一:Spring.Net简介

    一.Spring.Net简介 Spring.NET为建立企业级应用提供了一套轻量级的解决方案.通过Spring.NET,我们可以用统一且透明的方式来配置应用程序.Spring.NET的重点是为中间层提 ...

  7. CSS(五):背景、列表、超链接伪类、鼠标形状控制属性

    一.背景属性 1.背景属性用来设置页面元素的背景样式. 2.常见背景属性 属性 描述 background-color 用来设置页面的背景色,取值如red,#ff0000 background-ima ...

  8. Lua中的字符串函数库

    字符串库中的一些函数是非常简单的: string.len(s)          返回字符串s的长度:string.rep(s, n)      返回重复n次字符串s的串:你使用string.rep( ...

  9. 线段树 + 字符串Hash - Codeforces 580E Kefa and Watch

    Kefa and Watch Problem's Link Mean: 给你一个长度为n的字符串s,有两种操作: 1 L R C : 把s[l,r]全部变为c; 2 L R d : 询问s[l,r]是 ...

  10. 构造 - Codeforces Round #319 (Div. 1)C. Points on Plane

    Points on Plane Problem's Link Mean: 在二维坐标中给定n个点,求一条哈密顿通路. analyse: 一开始忽略了“无需保证路径最短”这个条件,一直在套最短哈密顿通路 ...