i have mini project to do about homography , but i am really a beginner in matlab . i have calculated the homography matrix easily by taking a set pixels from both images but the problem is how to apply this matrix to all pixels of the original image (i think it's difficult to treat each pixel individually ) . here is the original image :
i want to apply the homography to this image ( i have already extracted the homography matrix ) to get a frontal view of the cover.
so with my weak knowledge of matlab , i applied the folowing operations:
i get 4 points from the corners of the original image and the corresponding points in the output image
i have estimated the homography :
0.9638 -0.0960 52.5754;
0.2449 1.3808 -17.0081;
-0.0001 0.0013 1.0000
then i have applied it on the image using this poor matlab code:
function [Ired] = affect(I,P)
I1=im2double(I);
for i=1:308
i
for j=1:288
v1 = [j;i;1];
v2 = P*v1;
v3 =v2/v2(3,1);
if (v3(1,1) <0 || v3(2,1)<0 || v3(3,1)<0)
continue;
else
Ired(round(1+v3(2,1)),round(1+v3(1,1)))=I1(i,j);
end
end
end
and the result is the following:
- but the problem with this code is it takes a lot of time (sometimes 10 minutes) to perform the operation on the image especially if the size of the image is high so is there a way to implement this code without loops to make it faster? .
- i get these black dots all over the image , i can do a dilation but the image will be distorted , do you have an idea how to eliminate this dots without distorting the image ?.