我被这个单应性问题困扰。我必须应用单应性,然后进行二维双线性插值法来渲染图像,以便看到鸟瞰图。
我成功计算了单应性(我想)。我无法弄清楚如何将此单应性矩阵应用于源图像以在空白940x500图像上生成输出图像。
到目前为止是我的代码:
I = imread('basketball-court.ppm');
imshow(I)
% Mark more than 4 input points
[x,y] = getpts
% Generating a blank 940x500 image
whiteImage = ones(940, 500, 3, 'uint8');
xp = [0; 500; 500; 0;];
yp = [0; 0; 940; 940;];
for i=1:4
A(2*i-1,:) = [x(i), y(i), 1, 0, 0, 0, -x(i)*xp(i), -xp(i)*y(i), -xp(i)];
A(2*i,:) = [0, 0, 0, x(i), y(i), 1, -x(i)*yp(i), -yp(i)*y(i), -yp(i)];
end
[U,S,V] = svd(A);
h = V(:,9);
H = reshape(h,3,3);
我如何将此H矩阵应用于源图像?
您可以使用projective2d和imwarp:
tform = projective2d(H);
outputImage = imwarp(I, tform);
我不理解您所举的示例,因此我无法说是否需要反转H
。
可能是我的答案是错误的-我无法执行您的代码示例来验证解决方案。
请让我知道它是否可以解决您的问题。