1.一种快速图像融合方法,其特征在于,所述方法包括:
获取同一时刻鱼眼镜头采集的多幅鱼眼图像,从中取出融合区;在所述融合区内找出最优融合中心线;利用所述最优融合中心线计算线性映射查找表;根据所述线性映射查找表进行图像融合;
在所述融合区内找出最优融合中心线的步骤包括:计算融合区的边缘特征;计算边缘特征与绝对灰度差值的和;寻找最小累加差值及其路径从而得到最优融合中心线;
所述计算融合区的边缘特征的具体步骤如下:利用Canny边缘检测算子提取所述融合区中相互重叠的区域I1和I2的边缘特征,其中第一步:利用高斯滤波模板平滑I1和I2:首先生成方差σ=1.4的高斯滤波模板h(x,y,σ),然后对I1和I2进行高斯平滑处理,得到去除噪声后的相互重叠区域g1(x,y)和g2(x,y),I1和I2内(x,y)处灰度化后灰度值分别用I1(x,y)和I2(x,y)表示,所用公式如下所示:
<mrow>
<mi>h</mi>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>,</mo>
<mi>&sigma;</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mn>2</mn>
<msup>
<mi>&pi;&sigma;</mi>
<mn>2</mn>
</msup>
</mrow>
</mfrac>
<mi>exp</mi>
<mrow>
<mo>(</mo>
<mo>-</mo>
<mfrac>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mi>y</mi>
<mn>2</mn>
</msup>
</mrow>
<mrow>
<mn>2</mn>
<msup>
<mi>&sigma;</mi>
<mn>2</mn>
</msup>
</mrow>
</mfrac>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
</mrow>
<mrow>
<msub>
<mi>g</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mi>h</mi>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>,</mo>
<mi>&sigma;</mi>
<mo>)</mo>
</mrow>
<mo>*</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
</mrow>
<mrow>
<msub>
<mi>g</mi>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mi>h</mi>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>,</mo>
<mi>&sigma;</mi>
<mo>)</mo>
</mrow>
<mo>*</mo>
<msub>
<mi>I</mi>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
<mo>;</mo>
</mrow>
第二步:利用一阶偏导的有限差分进行计算梯度的幅值和方向:已经平滑滤波后的相互重叠区域g1(x,y)和g2(x,y)的梯度用2*2的一阶有限差分近似式来计算x和y方向上的偏导数;g1(x,y)在x和y方向上的偏导数分别为Gx(x,y)和Gy(x,y)表示:
<mrow>
<msub>
<mi>G</mi>
<mi>x</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfrac>
<mrow>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>+</mo>
<mn>1</mn>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>-</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>+</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>+</mo>
<mn>1</mn>
<mo>,</mo>
<mi>y</mi>
<mo>+</mo>
<mn>1</mn>
<mo>)</mo>
</mrow>
<mo>-</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>+</mo>
<mn>1</mn>
<mo>)</mo>
</mrow>
</mrow>
<mn>2</mn>
</mfrac>
<mo>;</mo>
</mrow>
<mrow>
<msub>
<mi>G</mi>
<mi>y</mi>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfrac>
<mrow>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>+</mo>
<mn>1</mn>
<mo>)</mo>
</mrow>
<mo>-</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>+</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>+</mo>
<mn>1</mn>
<mo>,</mo>
<mi>y</mi>
<mo>+</mo>
<mn>1</mn>
<mo>)</mo>
</mrow>
<mo>-</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>+</mo>
<mn>1</mn>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
</mrow>
<mn>2</mn>
</mfrac>
<mo>;</mo>
</mrow>
根据x与y方向的梯度可以计算g1(x,y)像素点的梯度幅值G(x,y)与角度θ(x,y):
<mrow>
<mi>G</mi>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msqrt>
<mrow>
<msubsup>
<mi>G</mi>
<mi>x</mi>
<mn>2</mn>
</msubsup>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>+</mo>
<msubsup>
<mi>G</mi>
<mi>y</mi>
<mn>2</mn>
</msubsup>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
</mrow>
</msqrt>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
</mrow>
<mrow>
<mi>&theta;</mi>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msup>
<mi>tan</mi>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mrow>
<mo>(</mo>
<msub>
<mi>G</mi>
<mi>y</mi>
</msub>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
</mrow>
<mo>)</mo>
<mo>/</mo>
<msub>
<mi>G</mi>
<mi>x</mi>
</msub>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
</mrow>
<mo>)</mo>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
<mo>;</mo>
</mrow>
第三步:对梯度幅值进行非极大值抑制;将梯度角离散为圆周的四个扇区之一,然后用3*3的模板作抑制运算;对于每个像素点,邻域的中心像素梯度幅值G(x,y)与沿着梯度线的两个像素的梯度值相比,如果G(x,y)不比沿梯度线的两个相邻像素梯度值大,则令G(x,y)=0;第四步:用双阈值算法检测和连接边缘:对非极大值抑制后的重叠区域g1(x,y)用低阈值t1和高阈值t2进行判断,其中t1=0.4×t2;把任意边缘像素梯度值小于t1的像素丢弃,把任意边缘像素梯度值大于t2的像素保留,把任意边缘像素梯度值在t1与t2之间的,如能通过边缘连接到一个像素大于t2而且边缘所有像素大于最小阈值t1的则保留,否则丢弃;对一个融合区,利用双阈值算法检测得到融合区的边缘特征G1(x,y)和G2(x,y);
所述计算边缘特征与绝对灰度差值的和的具体步骤如下:计算对准之后重叠区域中像素对的绝对灰度差值imgdiff,像素对的绝对灰度差值计算方法如下:
<mrow>
<msub>
<mi>img</mi>
<mrow>
<mi>d</mi>
<mi>i</mi>
<mi>f</mi>
<mi>f</mi>
</mrow>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mo>|</mo>
<msub>
<mi>I</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>-</mo>
<msub>
<mi>I</mi>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>|</mo>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
<mo>;</mo>
</mrow>
将边缘特征G1(x,y)和G2(x,y)叠加到绝对灰度差值imgdiff(x,y)中;
<mrow>
<msub>
<mi>Img</mi>
<mrow>
<mi>d</mi>
<mi>i</mi>
<mi>f</mi>
<mi>f</mi>
</mrow>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msub>
<mi>img</mi>
<mrow>
<mi>d</mi>
<mi>i</mi>
<mi>f</mi>
<mi>f</mi>
</mrow>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>+</mo>
<msub>
<mi>G</mi>
<mn>1</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>+</mo>
<msub>
<mi>G</mi>
<mn>2</mn>
</msub>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
<mo>;</mo>
</mrow>
所述寻找最小累加差值及其路径从而得到最优融合中心线的具体步骤如下:选取32个起始点,并将其初始位置保存在path中;在极小邻域内计算每个起始点走过一行的最小累加误差及其最小路径;获取最小累加差值及其路径;
寻找最小累加差值及其路径从而得到最优融合中心线:选取32个起始点,并将其初始位置保存在path中;在极小邻域内计算每个起始点走过一行的最小累加误差及其最小路径;获取最小累加差值及其路径;所述选取32个起始点并将其初始位置保存在path中的具体步骤如下:获取边缘特征与绝对灰度差值的和Imgdiff(x,y),将其第一行中间的32个像素作为生长起始点,并将这32个起始点在Imgdiff(x,y)中的位置保存在path(x,y)中,这32个起始点的像素值作为第一行的最小累加差值保存在acc_error(cur,y)中,同时将其赋值给acc_error(pre,y),其中i∈1......32;
所述在极小邻域内计算每个起始点走过一行的最小累加误差及其最小路径的具体步骤如下:对于acc_error(pre,y)中的每一元素,我们限定它在Imgdiff(x,y)的所有路径在一个极小的邻域w中,其中3≤w≤5;获取每一路径点在融合区内当前行的位置信息,找出与这些位置相对应的Imgdiff(x,y)的邻域,然后在这一邻域内计算所有元素的最小值,将它与acc_error(pre,y)进行叠加,就可以得到acc_error(cur,y),同时将邻域内取得最小值的位置保存在path(x,y)中;最小累加差值的计算公式如下:
acc_error_min=min(Imgdiff(x,path(x-1,y)),Imgdiff(x,path(x-1,y)+1),Imgdiff(x,path(x-1,y)-1))←
<mrow>
<mi>a</mi>
<mi>c</mi>
<mi>c</mi>
<mo>_</mo>
<mi>e</mi>
<mi>r</mi>
<mi>r</mi>
<mi>o</mi>
<mi>r</mi>
<mrow>
<mo>(</mo>
<mi>c</mi>
<mi>u</mi>
<mi>r</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mi>a</mi>
<mi>c</mi>
<mi>c</mi>
<mo>_</mo>
<mi>e</mi>
<mi>r</mi>
<mi>r</mi>
<mi>o</mi>
<mi>r</mi>
<mo>_</mo>
<mi>min</mi>
<mo>+</mo>
<mi>a</mi>
<mi>c</mi>
<mi>c</mi>
<mo>_</mo>
<mi>e</mi>
<mi>r</mi>
<mi>r</mi>
<mi>o</mi>
<mi>r</mi>
<mrow>
<mo>(</mo>
<mi>p</mi>
<mi>r</mi>
<mi>e</mi>
<mo>,</mo>
<mi>y</mi>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>x</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>H</mi>
<mo>,</mo>
<mo>&ForAll;</mo>
<mi>y</mi>
<mo>&Element;</mo>
<mn>1......</mn>
<mi>W</mi>
<mo>;</mo>
</mrow>
所述获取最小累加差值及其路径的具体步骤如下:逐行从上至下遍历整个融合区,得到从所有路径起始点开始走过整个融合区的最小累加差值以及与之对应的最小路径线;在最后一行的acc_error(cur,y)中选取最小的那个元素所在的位置,找到这个位置在path(x,y)矩阵中对应的那一列,即找出的最优融合中心线的位置;
所述利用最优融合中心线计算线性映射查找表的具体步骤如下:其中blend_w表示进行实际线性融合宽度;
<mrow>
<mi>t</mi>
<mi>a</mi>
<mi>b</mi>
<mi>l</mi>
<mi>e</mi>
<mrow>
<mo>(</mo>
<mi>y</mi>
<mo>,</mo>
<mi>x</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mfenced open = "{" close = "">
<mtable>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mrow>
<mn>1</mn>
<mo>&le;</mo>
<mi>x</mi>
<mo><</mo>
<mrow>
<mo>(</mo>
<mi>s</mi>
<mi>e</mi>
<mi>a</mi>
<mi>m</mi>
<mo>_</mo>
<mi>l</mi>
<mi>i</mi>
<mi>n</mi>
<mi>e</mi>
<mo>(</mo>
<mi>y</mi>
<mo>)</mo>
<mo>-</mo>
<mfrac>
<mrow>
<mi>b</mi>
<mi>l</mi>
<mi>e</mi>
<mi>n</mi>
<mi>d</mi>
<mo>_</mo>
<mi>w</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mrow>
<mo>(</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mi>b</mi>
<mi>l</mi>
<mi>e</mi>
<mi>n</mi>
<mi>d</mi>
<mo>_</mo>
<mi>w</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mfrac>
<mo>)</mo>
</mrow>
<mo>&times;</mo>
<mi>x</mi>
<mo>+</mo>
<mn>3</mn>
<mo>/</mo>
<mn>2</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>(</mo>
<mi>s</mi>
<mi>e</mi>
<mi>a</mi>
<mi>m</mi>
<mo>_</mo>
<mi>l</mi>
<mi>i</mi>
<mi>n</mi>
<mi>e</mi>
<mo>(</mo>
<mi>y</mi>
<mo>)</mo>
<mo>-</mo>
<mfrac>
<mrow>
<mi>b</mi>
<mi>l</mi>
<mi>e</mi>
<mi>n</mi>
<mi>d</mi>
<mo>_</mo>
<mi>w</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
<mn>2</mn>
</mfrac>
<mo>)</mo>
<mo>&le;</mo>
<mi>x</mi>
<mo>&le;</mo>
<mo>(</mo>
<mi>s</mi>
<mi>e</mi>
<mi>a</mi>
<mi>m</mi>
<mo>_</mo>
<mi>l</mi>
<mi>i</mi>
<mi>n</mi>
<mi>e</mi>
<mo>(</mo>
<mi>y</mi>
<mo>)</mo>
<mo>+</mo>
<mfrac>
<mrow>
<mi>b</mi>
<mi>l</mi>
<mi>e</mi>
<mi>n</mi>
<mi>d</mi>
<mo>_</mo>
<mi>w</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mrow>
<mo>(</mo>
<mi>s</mi>
<mi>e</mi>
<mi>a</mi>
<mi>m</mi>
<mo>_</mo>
<mi>l</mi>
<mi>i</mi>
<mi>n</mi>
<mi>e</mi>
<mo>(</mo>
<mi>y</mi>
<mo>)</mo>
<mo>+</mo>
<mfrac>
<mrow>
<mi>b</mi>
<mi>l</mi>
<mi>e</mi>
<mi>n</mi>
<mi>d</mi>
<mo>_</mo>
<mi>w</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
<mn>2</mn>
</mfrac>
<mo>)</mo>
<mo><</mo>
<mi>x</mi>
<mo>&le;</mo>
<mi>W</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</mfenced>
<mo>.</mo>
</mrow>