几何畸变图像恢复 openCV3 - 数字图像处理作业3

几何畸变图像恢复 OpenCV3 - 数字图像处理作业3

作业3:相同条件下拍到的棋盘图和日历钟表图,尝试建立几何畸变关系,并对它们进行恢复。注意:不能采用椭圆的变换。
几何畸变图像恢复 openCV3 - 数字图像处理作业3_第1张图片
几何畸变图像恢复 openCV3 - 数字图像处理作业3_第2张图片

算法步骤

  1. 坐标变换: 在畸变和正常图象之间建立坐标关系。
    几何畸变图像恢复 openCV3 - 数字图像处理作业3_第3张图片
  2. 灰度级插值,最邻近像素灰级代替法
    几何畸变图像恢复 openCV3 - 数字图像处理作业3_第4张图片

实际操作过程:

第一步. 角点检测

调用openCV角点检测函数获取棋盘格角点。

	//cornerMat CV_32FC2 56 rows * 1 cols * 2channel 取值用Point2f 或者 Vec2f
	findChessboardCorners(chessImg, Size(8, 7), cornerMat, CALIB_CB_FILTER_QUADS);
	drawChessboardCorners(chessCorner, Size(8, 7), cornerMat, true);
	imshow("chess with corner", chessCorner);

几何畸变图像恢复 openCV3 - 数字图像处理作业3_第5张图片

第二步. 得到畸变前的网格点位置

通过图片中心畸变小(基本无畸变)的特性,计算得出棋盘格角点畸变前的坐标,见下图绿色点。
几何畸变图像恢复 openCV3 - 数字图像处理作业3_第6张图片

第三步. 控制网格法得出畸变函数

为了拟合该图的函数,双线性变换参数不够,增加参数数量得到如下公式:
x ′ = a 0 + a 1 x + a 2 y + a 3 x y + a 4 x 2 + a 5 y 2 + a 6 x y 2 + a 7 x 2 y x'=a_0+a_1x+a_2y+a_3xy+a_4x^2+a_5y^2+a_6xy^2+a_7x^2y x=a0+a1x+a2y+a3xy+a4x2+a5y2+a6xy2+a7x2y y ′ = b 0 + b 1 x + b 2 y + b 3 x y + b 4 x 2 + b 5 y 2 + b 6 x y 2 + b 7 x 2 y y'=b_0+b_1x+b_2y+b_3xy+b_4x^2+b_5y^2+b_6xy^2+b_7x^2y y=b0+b1x+b2y+b3xy+b4x2+b5y2+b6xy2+b7x2y
一共16个未知数,通过梯度下降算法迭代来拟合函数,计算参数。由于畸变的中心对称性质,注意在参数计算中,将原点设为画面中心的点。

第四步. 最近邻像素插值

通过上一步得到的参数,计算原图中每个点的畸变后位置坐标,取最近邻像素值替代,即可恢复出原图像。
几何畸变图像恢复 openCV3 - 数字图像处理作业3_第7张图片
源代码下载链接

你可能感兴趣的:(opencv,图像恢复)