Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

detect square in image

Asked by Abdul

Abdul (view profile)

on 29 Dec 2011
Latest activity Edited by John Kelly

John Kelly (view profile)

on 14 Nov 2013 i want to detect square shape only in image. how can i do this using matlab?



Abdul (view profile)


No products are associated with this question.

3 Answers

Answer by Chandra Kurniawan

Chandra Kurniawan (view profile)

on 29 Dec 2011
Accepted answer


Is your goal only to detect square in this picture?

If so, you don't need to do shape recognition, etc.

You just need to perform some morphologichal operations only.

I = imread('3617ca70.png');
Ibw = ~im2bw(I,graythresh(I));
Ifill = imfill(Ibw,'holes');
Iarea = bwareaopen(Ifill,100);
Ifinal = bwlabel(Iarea);
stat = regionprops(Ifinal,'boundingbox');
imshow(I); hold on;
for cnt = 1 : numel(stat)
    bb = stat(cnt).BoundingBox;

And the result :

Is this what you need?

1 Comment


Abdul (view profile)

on 3 Jan 2012

yes, thanks a lot. how about detecting circle in image?

Chandra Kurniawan

Chandra Kurniawan (view profile)

Answer by Sean de Wolski

Sean de Wolski (view profile)

on 29 Dec 2011

Those squares are very well defined.

  • Set a less than threshold to make the dark colors true and everything else false. ( BW = I<thresh )
  • Perform a connected components analysis ( doc bwconncomp)
  • Then regionprops with EulerNumber specified.
  • Apply a threshold to the regions matching the EulerNumber ( idx = [stats(:).EulerNumber] == x ) of a sample square.
  • Build a new matrix of false. ( BWnew = false(CC.ImageSize))
  • Set the indices in the connected components analysis corresponding to the matching EulerNumber to true. ( BWnew(vertcat(CC.PixelIdxList{idx})) = true)

In theory you'll have a mask of the boxes.


Sean de Wolski

Sean de Wolski (view profile)

Answer by Naz

Naz (view profile)

on 29 Dec 2011
Edited by John Kelly

John Kelly (view profile)

on 14 Nov 2013

I just thought of an alternative idea. Instead of detecting a square, you should register the image (filled form) of interest with the raw image. Then, since you know the coordinates of each square, you can just check the pixels at those coordinates for the white/black values.



Naz (view profile)

Contact us