Friday, 3 July 2015

MatLab - Can not detect all lines in a "simple" image using houghlines


I try to detect all lines in an image with some common geometric figures. The obvious choice, hough of MATLAB wouldn't print out the desired results.


I used the following MATLAB code:


[H,T,R]=hough(BW);  
P=houghpeaks(H,10,'threshold',ceil(0.2*max(H(:))));

LINES=houghlines(BW,T,R,P,'FillGap',2,'MinLength',3);
figure, imshow(BW),hold on;


for k=1:length(LINES)
xy=[LINES(k).point1; LINES(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',1,'Color','Green');

plot(xy(1,1),xy(1,2),'x','LineWidth',1,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',1,'Color','red');
end

EDIT 1: Including the original RGB image here: enter image description here


And the image stored in the BW: enter image description here



The result of this code is shown in the next image. enter image description here


I think it is visible that hough method did not detect every line leaving quiet a few still to be detected. Does someone have a solution as to why it did not detect those lines and how to optimize the code so that it does detect them?



Answer



houghpeaks function in MATLAB accepts a parameter named NHoodSize that specifies the size of the neighborhood where a non-maximum suppression (NMS) is carried out. In simple terms, NMS removes all duplicate peaks which lie in a certain window. This is what explains your double-lines with a single line. If you set the window size lower, such as $[7,7]$, you will see that it will start detecting them. For instance, modify the call as:



P=houghpeaks(H,20,'threshold',ceil(0.3*max(H(:))), 'NHoodSize',[7 7]);



You will then see the following result: enter image description here


You should play with those parameters till you find your ideal setting: Not many lines, and correct ones not missed.


No comments:

Post a Comment

readings - Appending 内 to a company name is read ない or うち?

For example, if I say マイクロソフト内のパートナーシップは強いです, is the 内 here read as うち or ない? Answer 「内」 in the form: 「Proper Noun + 内」 is always read 「ない...