精华内容
下载资源
问答
  • normal_calibrate:基于OPENCV2与OPENCV3通用的函数实现,可实现USB摄像头实时畸变校正; fishey_calibrate:基于OPENCV3独有的fishyey结构体实现,可实现USB摄像头实时畸变校正; fishey_calibrate_img:基于OPENCV...
  • 本程序实现一个去畸变的功能,使用的是OpenCV的库函数实现...程序的主要功能是通过已知相机内参及畸变系数实现去畸变(从摄像头或从保存序列帧文件的目录)。 其中次要功能包括从目录中读取所有该目录的文件;创建目录。
  • 摄像头畸变处理

    千次阅读 2018-03-15 19:09:28
    # 获取标定板角点的位置(9*6分别为竖着的畸变点和横向的畸变点) objp = np.zeros(( 9 * 6 , 3 ), np.float32) objp[:,: 2 ] = np.mgrid[ 0 : 9 , 0 : 6 ].T.reshape(- 1 , 2 ) # 将世界坐标系建在标定板上,...

    摄像机标定是机器人视觉进行目标定位跟踪的首要环节,通过标定板标定好摄像机的内外参数,将参数返回给摄像机,然后进行后续的定位识别工作。

    下面是利用python语言结合OpenCV进行摄像机标定的代码:

    import cv2  
    import numpy as np  
    import glob  
    
    # 设置寻找亚像素角点的参数,采用的停止准则是最大循环次数30和最大误差容限0.001  
    criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)  
    
    # 获取标定板角点的位置(9*6分别为竖着的畸变点和横向的畸变点)
    objp = np.zeros((9*6,3), np.float32)  
    objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)  # 将世界坐标系建在标定板上,所有点的Z坐标全部为0,所以只需要赋值x和y  
    
    obj_points = []    # 存储3D点  
    img_points = []    # 存储2D点
    images = glob.glob("img\jibian1.jpeg")  
    for fname in images:  
        img = cv2.imread(fname)  
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
        size = gray.shape[::-1]
        print('size')
        print(size)
        ret, corners = cv2.findChessboardCorners(gray, (9,6), None)  
        print(ret)
        print(corners)
        if ret:  
            obj_points.append(objp)  
    
            corners2 = cv2.cornerSubPix(gray, corners, (5,5), (-1,-1), criteria)  # 在原角点的基础上寻找亚像素角点  
            if corners2.any():  
                img_points.append(corners2)  
            else:  
                img_points.append(corners)  
    
            cv2.drawChessboardCorners(img, (9,6), corners, ret)   # 记住,OpenCV的绘制函数一般无返回值  
            cv2.imshow('img', img)  
            cv2.waitKey(500000)  
    
    print(len(img_points))  
    cv2.destroyAllWindows()  
    
    # 标定  
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points,size, None, None)  
    
    print("ret:",ret)  
    print("mtx:\n",mtx )       # 内参数矩阵  
    print("dist:\n",dist )     # 畸变系数   distortion cofficients = (k_1,k_2,p_1,p_2,k_3)  
    print("rvecs:\n",rvecs )   # 旋转向量  # 外参数  
    print("tvecs:\n",tvecs)    # 平移向量  # 外参数  
    
    print("-----------------------------------------------------")  
    # 畸变校正  
    img = cv2.imread(images[0])  
    h, w = img.shape[:2]  
    newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),1,(w,h))  
    print(newcameramtx)  
    print("------------------使用undistort函数-------------------")  
    dst = cv2.undistort(img,mtx,dist,None,newcameramtx)  
    x,y,w,h = roi  
    dst1 = dst[y:y+h,x:x+w]  
    cv2.imwrite('calibresult11.jpg', dst1)  
    print("方法一:dst的大小为:", dst1.shape)  
    
    # undistort方法二  
    print("-------------------使用重映射的方式-----------------------")  
    mapx,mapy = cv2.initUndistortRectifyMap(mtx,dist,None,newcameramtx,(w,h),5)  # 获取映射方程  
    #dst = cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)      # 重映射  
    dst = cv2.remap(img,mapx,mapy,cv2.INTER_CUBIC)        # 重映射后,图像变小了  
    x,y,w,h = roi  
    dst2 = dst[y:y+h,x:x+w]  
    cv2.imwrite('calibresult11_2.jpg', dst2)  
    print("方法二:dst的大小为:", dst2.shape)        # 图像比方法一的小  
    
    print("-------------------计算反向投影误差-----------------------")  
    tot_error = 0  
    for i in range(len(obj_points)):  
        img_points2, _ = cv2.projectPoints(obj_points[i],rvecs[i],tvecs[i],mtx,dist)  
        error = cv2.norm(img_points[i],img_points2, cv2.NORM_L2)/len(img_points2)  
        tot_error += error  
    
    mean_error = tot_error/len(obj_points)  
    print("total error: ", tot_error)  
    print("mean error: ", mean_error)
    cv2.waitKey(0)
    

    http://blog.csdn.net/firemicrocosm/article/details/48594897

    展开全文
  • 1.基础知识 成像的过程实质上是几个坐标系的转换。首先空间中的一点由 世界坐标系 转换到 摄像机坐标系 ,然后再将其投影到成像平面 ( 图像物理坐标系 ) ,最后再将成像...2) 畸变系数:畸变数学模型的5个参数 D...

    1.基础知识

            成像的过程实质上是几个坐标系的转换。首先空间中的一点由 世界坐标系 转换到 摄像机坐标系 ,然后再将其投影到成像平面 ( 图像物理坐标系 ) ,最后再将成像平面上的数据转换到图像平面 ( 图像像素坐标系 ) 。

    2. 什么是摄像头参数

    1)相机矩阵:包括焦距(fx,fy),光学中心(Cx,Cy),完全取决于相机本身,是相机的固有属性,只需要计算一次,可用矩阵表示如下:[fx, 0, Cx; 0, fy, cy; 0,0,1];

    2) 畸变系数:畸变数学模型的5个参数 D = (k1,k2, P1, P2, k3);

    3)相机内参:相机矩阵和畸变系数统称为相机内参,在不考虑畸变的时候,相机矩阵也会被称为相机内参;

    4) 相机外参:通过旋转和平移变换将3D的坐标转换为相机2维的坐标,其中的旋转矩阵和平移矩阵就被称为相机的外参;描述的是将世界坐标系转换成相机坐标系的过程。

     

    3. 摄像头标定的流程

    相机的标定过程实际上就是在4个坐标系转化的过程中求出相机的内参和外参的过程。这4个坐标系分别是:世界坐标系(描述物体真实位置),相机坐标系(摄像头镜头中心),图像坐标系(图像传感器成像中心,图片中心,影布中心,单位mm),像素坐标系(图像左上角为原点,描述像素的位置,单位是多少行,多少列)。

    (1)世界坐标系 -> 相机坐标系:求解摄像头外参(旋转和平移矩阵);

    (2)相机坐标系 -> 图像坐标系:求解相机内参(摄像头矩阵和畸变系数);

    (3)图像坐标系 -> 像素坐标系:求解像素转化矩阵(可简单理解为原点从图片中心到左上角,单位厘米变行列)

    展开全文
  • 从汽车四路通过鱼眼摄像头所曾现的视频中取出一帧图像,图像可用于畸变矫正测试。
  • 镜头厂家提供鱼眼镜头畸变表,如下图:

     镜头厂家提供鱼眼镜头畸变表,如下图:

    展开全文
  • 摄像头标定矫正主要解决径向畸变和切向畸变。 径向畸变是图像像素点以畸变中心为中心点,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变。 图像径向畸变是成像过程中最主要的畸变,同时也是对成像效果影响...

    摘自:https://www.cnblogs.com/wujianming-110117/p/12488105.html

    摄像头标定矫正主要解决径向畸变和切向畸变。

    径向畸变是图像像素点以畸变中心为中心点,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变。

    图像径向畸变是成像过程中最主要的畸变,同时也是对成像效果影响最大的畸变,广角或者鱼眼的畸变效果,

    切向畸变,这是由于透镜与成像平面不可能绝对平行造成的。

    这种畸变会造成图像中的某些点看上去的位置会比我们认为的位置要近一些。

    摄像头Camera 标定Calibration原理Theory

    摄像头Camera 标定Calibration原理Theory

    cv2.cameraCalibration

    Pinhole camera calibration calls camera vision from 3D objects in the real world and transforms them into a 2D image.

    摄像头标定这里指利用常规(小孔成像)摄像头观察真实三位物体对二维图像的矫正转换。

     

     

    We named points from objects as objects point and points in image as image points.

    3D的点被叫做物体点,而2D的图像点被叫做图像点。

    To calibrate camera, we need to undistort radial distortion and tangential distortion.

    Radial Distortion: Radial Distortion is the most common type that affects the images, In which when a camera captured pictures of straight lines appeared slightly curved or bent.

    Tangential distortion: Tangential distortion occurs mainly because the lens is not parallely aligned to the imaging plane, that makes the image to be extended a little while longer or tilted, it makes the objects appear farther away or even closer than they actually are.

    摄像头标定矫正主要解决径向畸变和切向畸变。

    径向畸变是图像像素点以畸变中心为中心点,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变。

    图像径向畸变是成像过程中最主要的畸变,同时也是对成像效果影响最大的畸变,广角或者鱼眼的畸变效果,

     

     

     

    矫正算法采用多项式拟合:

     

     

    切向畸变,这是由于透镜与成像平面不可能绝对平行造成的。

    这种畸变会造成图像中的某些点看上去的位置会比我们认为的位置要近一些。

     

     

     

     

     

    Five Distortion Coefficients 五个畸变系数:

     

     

     

     

     

    In math, the Transformation from 3D object points, P of X, Y and Z to X and Y is done by a transformative matrix called the camera matrix(C), we’ll be using this to calibrate the camera.

    max = 摄像机矩阵 = 摄像机的内部参数(焦距和光学中心)

    内部参数是摄像机本身具有的,包括的信息有焦距(f x ,f y ),光学中心(c x ,c y )。

     

     

     

    dist = 外部参数(旋转和变换向量)

    外部参数与旋转和变换向量相对应,它可以将 3D 点的坐标转换到坐标系统中。

    It’s recommended to use at least 20 images to get a reliable calibration, For this, we have a lot of images here, each chess board has eight by six corners to detect

    于是必须要提供一些包含明显图案模式的样本棋盘图片,一般至少需要 10 个(部分中文资料)建议20个这样的图案模式。

     

     

    or

     

     

     

     

     

    where

    (X, Y, Z) are the coordinates of a 3D point in the world coordinate space

    (u, v) are the coordinates of the projection point in pixels

    A is a camera matrix, or a matrix of intrinsic parameters

    (cx, cy) is a principal point that is usually at the image center

    fx, fy are the focal lengths expressed in pixel units.

    A chessboard is great for calibration because it's regular, high contrast pattern makes it easy to detect automatically. And we know how an undistorted flat chessboard looks like. So, if we use our camera to take pictures of Chessboard at different angles

     

    棋盘主要是通过角点来计算畸变,

     

     

    import numpy as np

    import cv2, glob

    calibrate_source_path = './data/camera_cal/*.jpg'

    calibrate_test_path = './data/test_image.jpg'

    # define

    objpoints = []

    imgpoints = []

    nx = 8

    ny = 6

    objp = np.zeros((ny*nx,3),np.float32)

    objp[:,:2] = np.mgrid[0:nx,0:ny].T.reshape(-1,2)

    # chessboard

    for path in glob.glob(calibrate_source_path):

     gray = cv2.cvtColor(cv2.imread(path),cv2.COLOR_BGR2GRAY)

     ret,corners = cv2.findChessboardCorners(gray,(nx,ny))

     if ret:

     objpoints.append(objp)

     imgpoints.append(corners);

     # gray = cv2.drawChessboardCorners(gray, (nx,ny), corners, ret)

    # execute

    img = cv2.imread(calibrate_test_path)

    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img.shape[1:], None, None)

    dst = cv2.undistort(img, mtx, dist, None, mtx)

    # display

    cv2.imshow(None, cv2.pyrDown(np.hstack((img,dst))))

    cv2.waitKey(0); cv2.destroyAllWindows()

    计算机视觉与自动驾驶

    好文要顶 关注我 收藏该文

    吴建明wujianming
    关注 - 0
    粉丝 - 79

    +加关注

    0

    0

    « 上一篇: 目标检测算法进展大盘点
    » 下一篇: 摄像头和相机模型和内参原理

    posted @ 2020-03-13 18:15  吴建明wujianming  阅读(256)  评论(0)  编辑  收藏

    展开全文
  • 这是摄像头厂商给的畸变参数,如何根据这些数据进行畸变校正,大神们能给个思路吗? ![图片说明](https://img-ask.csdn.net/upload/202007/08/1594199469_412391.jpg)
  • 摄像头内参与畸变校正关系

    千次阅读 2018-09-06 15:43:55
    对于opencv中基本是给定畸变图获取校正图,那么为了明白校正和畸变的原理,我们需要知道正确的图如何生成畸变图的。那个,在给定的正确的二维点如何得到畸变图像的点呢?是经过如下公式: 在此公式中,假如我们...
  • 如何去除相机畸变

    千次阅读 2018-10-27 17:34:15
    假设小伙伴们对相机的内参比较熟悉的情况下,可以快速理解,如有疑问,可先移步内外参链接:还没写,度娘都有的 第一步:将图像坐标系...其中,X[i]、Y[i]为摄像机去畸变前坐标,x[i]、y[i]为图像坐标系坐标,剩余...
  • 广角摄像头畸变校正(1)-标定

    千次阅读 2020-11-13 15:35:11
    1.标定 (1)利用Matlab标定工具箱 ... compute 根据需要决定是否计算错切和桶形畸变 -> Calibrate开始标定 -> Show Undistorted显示校正后棋盘格->Export Camera Parameters导出参数。 (2)C++程序标定 // // C
  • 即将3D空间中的点投影到Zc=1的2D平面上,同时也等价于f=1时的感光平面上的坐标,从另一个角度看,内参矩阵也反映了图像像素平面和成像归一化平面之间的单应性关系,该原理在普通摄像头和鱼眼摄像头去畸变的过程中会...
  • 鱼眼摄像头畸变校正的方法: 1. 棋盘矫正法 2. 经纬度矫正法。 相机为什么会出现畸变? 当前相机的畸变主要分为径向畸变和切向畸变两种。 径向畸变产生的原因:相机的光学镜头厚度不均匀,离镜头越远场景的...
  • 搞了个摄像头,拍摄有畸变,拍摄出的直线是弧线形状,类似于鱼眼相机,需要正常输出,遂使用OpenCV进行相机标定 1、畸变参数的提取 大哥用MATLAB提取的畸变内参和畸变系数,用来矫正,我不会,此博客主要说参数的...
  • 图像矫正去畸变

    万次阅读 多人点赞 2018-09-03 22:23:14
    摄像头成像畸变的数学模型 (符合的对应关系有问题,可能会造成一些干扰,公式主要看后面推导的过程) 2.2. 公式推导 公式推导: 3.畸变校正 3.1. 理论推导 我们已知的是畸变后的图像,要得到...
  • 图像畸变去畸变

    万次阅读 2019-06-28 10:49:24
    本文主要介绍图像畸变产生的原因,广角镜头的一般畸变模型和去畸变的方法。 1.图像畸变 图像畸变是由于透镜制造精度以及组装工艺的偏差会引入畸变,导致原始图像失真。镜头的畸变分为径向畸变和切向畸变两类。 ...
  • ") 步骤三:读取广角摄像头图像 打开广角摄像头,进行矫正,分别获得原图像、矫正图像和裁剪图像。 import cv2 import pickle if __name__ == '__main__': # 获取矫正参数 f = pickle.load(open('parameter', 'rb'))...
  • 去畸变 opencv

    2020-05-03 11:05:42
    <p>&nbsp; &nbsp; &nbsp; 从摄像机成像畸变的产生于是其“天生”的,<a href="https://www.baidu.com/s?wd=%E4%B8%8D%E5%8F%AF%E9%81%BF%E5%85%8D&amp;tn=24004469_oe...
  • 使用python+opencv进行图像的去畸变

    千次阅读 2020-10-28 14:42:06
    使用python+opencv进行图像的去畸变
  • 利用opencv图像算法库实现对鱼眼相机内外参的标定,并利用标定结果对畸变图像进行校正。
  • 智能车摄像头图像畸变矫正的研究一文通过图像矫正与坐标转换算法进行验证。
  • 首先介绍了针孔相机的成像原理以及实际坐标和像素坐标的转换方法。然后根据实际相机存在的一些问题,引入了畸变模型,并给出了去畸变的公式方法以及详细示例程序。
  • opencv鱼眼畸变

    2020-09-21 15:45:07
    https://www.jianshu.com/p/9047cd267ef7
  • // // Created by root on 2020/10/31. // #include "opencv2/opencv.hpp" #include <iostream> using namespace cv; using namespace std;... String InputFile = "/home/cynthia/fov/lattice.jpeg";...
  • opencv) https://zhuanlan.zhihu.com/p/55648494 有C++和opencv的实践代码 opencv-python 实现鱼眼矫正 棋盘矫正法: https://blog.csdn.net/hpuhjl/article/details/80899931  鱼眼摄像头畸变矫正方法-python+...
  • C#-Winform 海康网络摄像机Opencv去畸变显示1 标定原理及C++Opencv相机标定1.1 世界坐标系->相机坐标系 三维点到三维点1.2 相机坐标系->图像坐标系 三维点到二维点1.3 图像坐标系->像素坐标系1.4 相机畸变...
  • 目录畸变径向畸变切向畸变去畸变原理代码参考 畸变 产生原因:透镜不能完全满足针孔模型假设 径向畸变 畸变程度都是从中心开始,用一个半径画圆的话,半径越大,圆周上的畸变程度也越大。这个就是由于相机透镜的形状...
  • 用于摄像头质量测试,及量化分析的操作规范。介绍了摄像头的解析度,锐度,色散,色彩还原,白平衡,镜头畸变,噪声等等指标的测试。
  • 本文将梳理一种单目摄像头标定和矫正的方法,在梳理的过程中,首先使用网上离线的图片数据跑通流程,然后接入自己的camera,手动采集标定图像,实时矫正相机的畸变,然后输出矫正后的图像。全文基于Opencv使用C++...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,392
精华内容 1,356
关键字:

去畸变摄像头