几何畸变矫正

相同条件下拍到的棋盘图和日历钟表图,尝试建立几何畸变关系,并对它们进行恢复。

几何畸变矫正_第1张图片几何畸变矫正_第2张图片

由棋盘的畸变图像我们可以看出,畸变主要是由纵向畸变产生,相当于将一副矩形的图像高度方向压缩成一个椭圆,复原的思路就是构建一个椭圆向矩形转换的映射,将图像的每一列像素按坐标比例进行拉伸,假设畸变图像外圈椭圆坐标为(x1,y1),对应同列矩形坐标为(x2,y2),其满足的转换关系如下:

几何畸变矫正_第3张图片

利用这个比率将同一列的所有坐标进行拉伸,就得到了复原的图像.

Matlab代码如下:

clear
img1 = imread('1.png');
[m,n,k] = size(img1);
img2 = zeros(m,n,k);
a = round(n/2);
b = round(m/2);
for ii = 1:3
    for i = b:m 
        for j = (a-1):-1:1
            cx = round(j-a);
            cy = round(i-b);
            d =round(cy*sqrt(1-(cx^2)/(a^2)));
            img2(i,j,ii) = img1(b+d,j,ii);
        end
        for j = a:n
            cx = round(j-a);
            cy = round(i-b);
            d =round(cy*sqrt(1-(cx^2)/(a^2)));
            img2(i,j,ii) = img1(b+d,j,ii);
        end
    end
    for i = b-1:-1:1
        for j = (a-1):-1:1
            cx = round(j-a);
            cy = round(i-b);
            d =round(cy*sqrt(1-(cx^2)/(a^2)));
            img2(i,j,ii) = img1(b+d,j,ii);
        end
        for j = a:n
            cx = round(j-a);
            cy = round(i-b);
            d =round(cy*sqrt(1-(cx^2)/(a^2)));
            img2(i,j,ii) = img1(b+d,j,ii);
        end
    end
end
figure,imshow(img1)
title('畸变图像')
img2 = uint8(img2);
figure,imshow(img2)
title('复原图像')
结果


几何畸变矫正_第4张图片几何畸变矫正_第5张图片

同理时钟图片恢复结果为

    几何畸变矫正_第6张图片几何畸变矫正_第7张图片

你可能感兴趣的:(几何畸变矫正)