I want to implement Hough transform on image without using inbuilt function. Some papers say that the image is first flipped before applying Hough transform. I do not understand how Matlab is doing it.
I have written the code below, but the H matrix by Matlab and houghMatrix generated by me are not same.
I have used default values of rhoResolution as 0.5 and thetaResolution as 0.5 also. I tried to do it without rotating image but then also not getting same matrices.
RGB = imread('gantrycrane.png');
I = rgb2gray(RGB); % convert to intensity
BW = edge(I,'canny'); % extract edges
BW = BW(end:-1:1,1:1:end);
theta = -90:0.5:(90-0.5);
D = sqrt((size(BW,1) - 1)^2 + (size(BW,2) - 1)^2);
rho = -ceil(D):0.5:ceil(D);
houghMatrix = zeros(size(rho,2),size(theta,2));
for i=1:size(BW,1)
for j=1:size(BW,2)
if(BW(i,j)==1)
for ii=1:size(theta,2)
rho1 = i*cosd(theta(1,ii)) + j*sind(theta(1,ii));
rhotemp = rho1 - floor(rho1);
if(rhotemp>(0.5+0.25))
rho1 = ceil(rho1);
elseif(rhotemp>0.25)
rho1 = floor(rho1) + 0.5;
else
rho1 = floor(rho1);
end
position = (rho1 - rho(1,1))/0.5;
houghMatrix(position+1,ii) = houghMatrix(position+1,ii) + 1;
end
end
end
end
[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89.5);
I need to implement this in C code after that, and the functionality should be same as Matlab code. So I need to have a similar matrix like Matlab (if error of +-5 then it is acceptable but this is two totally different matrices).