Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image MATLAB中用于图像拼接的单应矩阵_Image_Matlab_Homography - Fatal编程技术网

Image MATLAB中用于图像拼接的单应矩阵

Image MATLAB中用于图像拼接的单应矩阵,image,matlab,homography,Image,Matlab,Homography,我一直在尝试使用从两幅图像中手动选择的对应点,在matlab中计算单应矩阵。以下是我目前的代码: spoints = [330.756756756757,923.310810810811; %points from source image 335.945945945946,1016.71621621622; 495.081081081081,771.094594594595; 498.540540540540,933.689189189189]; dpo

我一直在尝试使用从两幅图像中手动选择的对应点,在matlab中计算单应矩阵。以下是我目前的代码:

    spoints = [330.756756756757,923.310810810811; %points from source image
    335.945945945946,1016.71621621622;
    495.081081081081,771.094594594595;
    498.540540540540,933.689189189189];
    dpoints = [310.000000000000,477.040540540540; %points from destination image
    320.378378378378,558.337837837838;
    462.216216216216,319.635135135135;
    469.135135135135,471.851351351351];
    %/////////////homography matrix///////////////////
    n = size(spoints, 1); 
    A = zeros(n*2,8); 
    b = zeros(n*2,1); 
    j=1;
    for i=1:n
        A(j,:)=[dpoints(i,1) dpoints(i,2) 1 0 0 0 -spoints(i,1)*dpoints(i,1) - spoints(i,1)*dpoints(i,2)];
        b(j,1)=spoints(i,1);
        j=j+1;
        A(j,:)=[0 0 0 dpoints(i,1) dpoints(i,2) 1 -spoints(i,2)*dpoints(i,1) -spoints(i,2)*dpoints(i,2)];
        b(j,1)=spoints(i,2);
        j=j+1;
    end

    x = (A\b);
    H = [x(1,1) x(2,1) x(3,1);
        x(4,1) x(5,1) x(6,1);
        x(7,1) x(8,1) 1];
这并没有给出正确的H矩阵。我通过

    bla = zeros(4,3);
    bla(1,:,:)=H*[dpoints(1,:),1]';
    bla(2,:,:)=H*[dpoints(2,:),1]';
    bla(3,:,:)=H*[dpoints(3,:),1]';
    bla(4,:,:)=H*[dpoints(4,:),1]';

bla矩阵应该等于spoints矩阵,但不是。我做错了什么?

我不会在第一步就这么做。
在2D和3D中有类似(直接线性变换)的算法,它们一直在这样做,其中大多数使用SVD奇异值分解技术。SVD是用MATLAB实现的,大家可以阅读一下。您可以使用SVD代替A\b。

解决了它。只需将SPOINT与DPOINT切换,即可完成