发明名称 一种鱼眼图像校正方法
摘要 本发明涉及一种鱼眼图像校正方法,对曲变的圆球形鱼眼图像修正恢复成正常可视的图像。通过先对角线扫描确定鱼眼图像圆形有效区域并计算圆心和半径,然后建立经线校正模型和半圆修正模型,然后分别对横坐标和纵坐标进行校正,最后再分别进行修正,形成最终的校正图像。本发明属于计算机视觉与图像处理领域。本发明设计出的对鱼眼图像的校正方法,可以应用于鱼眼图像的校正,恢复曲变图像,还原被摄物体的正常可视成像,同时算法简单易于实现。
申请公布号 CN103268592A 申请公布日期 2013.08.28
申请号 CN201310144924.4 申请日期 2013.04.24
申请人 南京邮电大学 发明人 杨庚;斯闻豪;王欣宇;陈文靖;程欢
分类号 G06T5/00(2006.01)I 主分类号 G06T5/00(2006.01)I
代理机构 南京经纬专利商标代理有限公司 32200 代理人 叶连生
主权项 一种鱼眼图像校正方法,其特征在于该方法包括以下步骤:步骤一:对角线扫描该步骤通过对角线扫描像素的方法确定鱼眼图像的圆形有效区域:1.1)、对一幅鱼眼图像P,设其像素数为N×M,对其所有像素进行灰度转换,转换方法为:Gray=0.072169B+0.715160G+0.202671R      (1)其中R、G、B表示每个像素的红、绿、蓝的值,Gray是转换后的值,将彩色图的每个像素经过如此变换后得到灰度图T;N为图像横坐标方向的像素值,M为图像纵坐标方向的像素值;1.2)、计算鱼眼图像的宽高比,设鱼眼图像像素数为N×M,则宽高比为: <mrow> <mi>k</mi> <mo>=</mo> <mfrac> <mi>N</mi> <mi>M</mi> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>1.3)、设原始点为A(0,0);1.4)、将点A的纵坐标加1,横坐标加k,1.5)、记点A坐标为(x1,y1),对点A的横坐标x1向下取整为x1',纵坐标不变得到点A'(x1',y1);判断点A'(x1',y1)和点A"(x1'+1,y1)的灰度值是否都大于t,其中t为一预先选定的值;如果是,则点A'(x1',y1)即为鱼眼图像左上角边界点,转步骤(1.6);如果不是,判断点A"(x1'+1,y1)和点(x1'+2,y1)的灰度值是否都大于t;如果是,则点A"(x1'+1,y1)即为鱼眼图像左上角边界点,转步骤(1.6);如果不是,转步骤(1.4);1.6)、记点B为(N‑1,0);1.7)、将点B的纵坐标加1,横坐标减k;1.8)、记此时点B坐标为(x2,y2),对点B的横坐标x2向上取整为x2',纵坐标不变得点B'(x2',y2),判断点B'(x2',y2)和点B"(x2'‑1,y2)的灰度值是否都大于t;如果是,则点B'(x2',y2)即为鱼眼图像右上角边界点,转步骤(1.9);如果不是,判断点B"(x2'‑1,y2)和点(x2'‑2,y2)的灰度值是否都大于t;如果是,则点B"(x2'‑1,y2)即为鱼眼图像右上角边界点,转步骤(1.9);如果不是,转步骤(1.7);1.9)、记点C为(0,M‑1);1.10)、将点C的纵坐标减1,横坐标加k;1.11)、记此时点C的坐标为(x3,y3),对点C的横坐标x3向下取整为x3',纵坐标不变得点C'(x3',y3),判断点C'(x3',y3)和点C"(x3'+1,y3)的灰度值是否都大于t;如果是,则点C'(x3',y3)即为鱼眼图像左下角边界点,转步骤(1.12);如果不是,判断点C"(x3'+1,y3)和点(x3'+2,y3)的灰度值是否都大于t;如果是,则点C"(x3'+1,y3)即为鱼眼图像左下角边界点,转步骤(1.12);如果不是,转步骤(1.10);1.12)、记点D为(N‑1,M‑1);1.13)、将点D的纵坐标减1,横坐标减k;1.14)、记此时点D的坐标为(x4,y4),对点D的横坐标x4向上取整为x4',纵坐标不变得点D'(x4',y4),判断点D'(x4',y4)和点D"(x4'‑1,y4)的灰度值是否都大于t;如果是,则 点D'(x4',y4)即为鱼眼图像右下角边界点;如果不是,判断点D"(x4'‑1,y4)和点(x4'‑2,y4)的灰度值是否都大于t;如果是,则点D"(x4'‑1,y4)即为鱼眼图像右下角边界点;如果不是,转步骤(1.13);步骤二:计算鱼眼图像圆形有效区域的圆心和半径由步骤一,得到鱼眼图像圆形有效区域的四个边界点,设为A(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4),设所求圆心的坐标为O(x0,y0),半径为R,则圆心坐标和半径分别满足以下三个方程组: <mrow> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>1</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>1</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>3</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>3</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>1</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>1</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>4</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>4</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>3</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>3</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mn>4</mn> </msub> <mo>-</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>y</mi> <mn>4</mn> </msub> <mo>-</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>5</mn> <mo>)</mo> </mrow> </mrow>可以求得三组圆心坐标(x01,y01),R1和(x02,y02),R2以及(x03,y03),R3,对这三组解进行平均求得最终的圆心坐标和半径R: <mrow> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>=</mo> <mfrac> <mrow> <msub> <mi>x</mi> <mn>01</mn> </msub> <mo>+</mo> <msub> <mi>x</mi> <mn>02</mn> </msub> <mo>+</mo> <msub> <mi>x</mi> <mn>03</mn> </msub> </mrow> <mn>3</mn> </mfrac> </mtd> </mtr> <mtr> <mtd> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>=</mo> <mfrac> <mrow> <msub> <mi>y</mi> <mn>01</mn> </msub> <mo>+</mo> <msub> <mi>y</mi> <mn>02</mn> </msub> <mo>+</mo> <msub> <mi>y</mi> <mn>03</mn> </msub> </mrow> <mn>3</mn> </mfrac> </mtd> </mtr> <mtr> <mtd> <mi>R</mi> <mo>=</mo> <mfrac> <mrow> <msub> <mi>R</mi> <mn>1</mn> </msub> <mo>+</mo> <msub> <mi>R</mi> <mn>2</mn> </msub> <mo>+</mo> <msub> <mi>R</mi> <mn>3</mn> </msub> </mrow> <mn>3</mn> </mfrac> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo> </mrow> </mrow>步骤三:建立经线校正模型和半圆修正模型3.1)、建立经线校正模型:以鱼眼图像中心点O为原点,以向右为x轴正方向,向下为y轴正方向建立直角坐标系,以鱼眼图像圆形有效区域的半径R为半径,原点O为圆心作一个圆,交x轴于点C1(‑R,0),点C2(R,0),交y轴于点C3(0,‑R),点C4(0,R),作纵向直径C3C4和横向直径C1C2;在圆内,作一簇圆弧做为纵向经线,这一簇圆弧有一条公共弦C3C4,圆心在x轴上移动,再作一簇圆弧做为横向经线,这一簇圆弧有一条公共弦C1C2,圆心在y轴上移动;3.2)、建立半圆修正模型:以鱼眼图像圆形有效区域的半径R为半径,校正图像中心点O'为圆心,作一个上半圆,过点O'作O'T垂直于半圆直径交半圆于点T,过点T作一条切线l,半圆直径与校正图像某一行或某一列重合,半圆圆心与该行或该列中点重合,切线l与修正图像对应行或列重合,点T与修正图像该行或该列中点重合;步骤四:校正设鱼眼图像像素数为N×M,鱼眼图像圆形有效区域的半径为R,校正图像像素数为2R×2R,点(u0,v0)为鱼眼图像中心点坐标,点(x0',y0')为校正图像中心点坐标;根据步骤一建立的经线校正模型,分别对鱼眼图像圆形有效区域的每个像素点的的横坐标和纵坐标进行校正,设鱼眼图像中某一像素点的坐标为(u,v),校正后该像素点在校正图像中的坐标为(x',y'):4.1)、对于横坐标:处于同一条纵向经线上的每个点的横坐标校正为该经线与横向直径交点的横坐标,由式(7)对横坐标进行校正: <mrow> <msup> <mi>x</mi> <mo>&prime;</mo> </msup> <mo>=</mo> <mfrac> <mrow> <msup> <mi>R</mi> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>u</mi> <mo>-</mo> <msub> <mi>u</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>v</mi> <mo>-</mo> <msub> <mi>v</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msqrt> <msup> <mrow> <mo>(</mo> <msup> <mrow> <mo>(</mo> <mi>u</mi> <mo>-</mo> <msub> <mi>u</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <mi>v</mi> <mo>-</mo> <msub> <mi>v</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <mn>4</mn> <msup> <mrow> <mo>(</mo> <mi>u</mi> <mo>-</mo> <msub> <mi>u</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <msup> <mi>R</mi> <mn>2</mn> </msup> </msqrt> </mrow> <mrow> <mo>-</mo> <mn>2</mn> <mi>u</mi> </mrow> </mfrac> <mo>+</mo> <msup> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>7</mn> <mo>)</mo> </mrow> </mrow>4.2)、对于纵坐标:处于同一条横向经线上的每个点的纵坐标校正为该经线与纵向直径交点的纵坐标,由式(8)对纵坐标进行校正: <mrow> <msup> <mi>y</mi> <mo>&prime;</mo> </msup> <mo>=</mo> <mfrac> <mrow> <msup> <mi>R</mi> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>u</mi> <mo>-</mo> <msub> <mi>u</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>v</mi> <mo>-</mo> <msub> <mi>v</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msqrt> <msup> <mrow> <mo>(</mo> <msup> <mrow> <mo>(</mo> <mi>u</mi> <mo>-</mo> <msub> <mi>u</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <mi>v</mi> <mo>-</mo> <msub> <mi>v</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msup> <mi>R</mi> <mn>2</mn> </msup> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <mn>4</mn> <msup> <mrow> <mo>(</mo> <mi>v</mi> <mo>-</mo> <msub> <mi>v</mi> <mn>0</mn> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <msup> <mi>R</mi> <mn>2</mn> </msup> </msqrt> </mrow> <mrow> <mo>-</mo> <mn>2</mn> <mi>v</mi> </mrow> </mfrac> <mo>+</mo> <msup> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>8</mn> <mo>)</mo> </mrow> </mrow>步骤五:修正设鱼眼图像圆形有效区域的半径为R,校正图像像素数为2R×2R,修正图像像素数为4R×4R,该步骤分别对步骤二的校正图像中除边缘点外每个像素的横坐标和纵坐标进行修正,设校正图像中某一像素点坐标为(x',y'),修正后该像素点在修正图像中的坐标为(x,y):5.1)、对于横坐标:经过步骤二的校正,将处于同一条纵向经线上的每个点的横坐标校正为该经线与横向直径交点的横坐标,此时采用半圆修正模型对这个横坐标进行修正,由式(9)对此横坐标进行修正: <mrow> <mi>x</mi> <mo>=</mo> <mfrac> <mrow> <msup> <mi>x</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <msup> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> </mrow> <msqrt> <msup> <mi>R</mi> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <msup> <mi>x</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <msup> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mn>2</mn> </msup> </msqrt> </mfrac> <mo>+</mo> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>,</mo> <msup> <mi>x</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <msup> <msub> <mi>x</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> <mo>&le;</mo> <mn>0.89</mn> <mo>&times;</mo> <mi>R</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>9</mn> <mo>)</mo> </mrow> </mrow>其中,(x0',y0')为校正图像中心点坐标,(x0,y0)为修正图像中心点坐标;5.2)、对于纵坐标:经过步骤二的校正,将处于同一条横向经线上的每个点的纵坐标校正为该经线与纵向直径交点的纵坐标,此时采用半圆修正模型对这个纵坐标进行修正,由式(10)对此纵坐标进行修正: <mrow> <mi>y</mi> <mo>=</mo> <mfrac> <mrow> <msup> <mi>y</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <msup> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> </mrow> <msqrt> <msup> <mi>R</mi> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <msup> <mi>y</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <msup> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mn>2</mn> </msup> </msqrt> </mfrac> <mo>+</mo> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>,</mo> <msup> <mi>y</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <msup> <msub> <mi>y</mi> <mn>0</mn> </msub> <mo>&prime;</mo> </msup> <mo>&le;</mo> <mn>0.89</mn> <mo>&times;</mo> <mi>R</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>10</mn> <mo>)</mo> </mrow> </mrow>其中,(x0',y0')为校正图像中心点坐标,(x0,y0)为修正图像中心点坐标。
地址 210003 江苏省南京市鼓楼区新模范马路66号