Asked by saravanakumar D
on 27 Dec 2013

I can't understand the technique how to analyse the shape. So any please help me to understand this concept.

Code is below

function W = Classify(ImageRead) RGB = imread('test.bmp'); figure, imshow(RGB), title('Original Image');

GRAY = rgb2gray(RGB); figure, imshow(GRAY), title('Gray Image');

threshold = graythresh(GRAY); BW = im2bw(GRAY, threshold); figure, imshow(BW), title('Binary Image');

BW = ~ BW; figure, imshow(BW), title('Inverted Binary Image');

[B,L] = bwboundaries(BW, 'noholes');

STATS = regionprops(L, 'all'); % we need 'BoundingBox' and 'Extent'

% Step 7: Classify Shapes according to properties % Square = 3 = (1 + 2) = (X=Y + Extent = 1) % Rectangular = 2 = (0 + 2) = (only Extent = 1) % Circle = 1 = (1 + 0) = (X=Y , Extent < 1) % UNKNOWN = 0

figure, imshow(RGB), title('Results'); hold on for i = 1 : length(STATS) W(i) = uint8(abs(STATS(i).BoundingBox(3)-STATS(i).BoundingBox(4)) < 0.1); W(i) = W(i) + 2 * uint8((STATS(i).Extent - 1) == 0 ); centroid = STATS(i).Centroid; switch W(i) case 1 plot(centroid(1),centroid(2),'wO'); case 2 plot(centroid(1),centroid(2),'wX'); case 3 plot(centroid(1),centroid(2),'wS'); end end return

Answer by Image Analyst
on 27 Dec 2013

Accepted Answer

What are the kinds of shapes you have there?

- polygons (everything is a polygon)
- quadrilaterals, polygons, and ellipsoids
- quadrilaterals, rectangles, polygons, and ellipsoids
- quadrilaterals, rectangles, polygons, circles, and ellipsoids
- quadrilaterals, rectangles, squares, polygons, circles, and ellipsoids

You might look at the solidity, area, and perimeter. And the circularity = perimeter.^2 ./ (4*pi*area).

You may also find this useful to determine how many sides a polygon has: http://matlab.wikia.com/wiki/FAQ#How_do_I_find_.22kinks.22_in_a_curve.3F

saravanakumar D
on 27 Dec 2013

i want to know why programmer using boundingbox in this programme. what is meaning of BoundingBox(3)and BoundingBox(4)

hold on for i = 1 : length(STATS) W(i) = uint8(abs(STATS(i).BoundingBox(3)-STATS(i).BoundingBox(4)) < 0.1); W(i) = W(i) + 2 * uint8((STATS(i).Extent - 1) == 0 ); centroid = STATS(i).Centroid; switch W(i) case 1 plot(centroid(1),centroid(2),'wO'); case 2 plot(centroid(1),centroid(2),'wX'); case 3 plot(centroid(1),centroid(2),'wS'); end

Marc
on 27 Dec 2013

Boundingbox is a property from regionprops. It's being stored in the structure STATS.

doc regionprops

I assume you have the image processing toolbox?

Image Analyst
on 27 Dec 2013

bounding box won't help unless one of the shape classes bounding box size is known in advance and specified as a characteristic of that shape. In other words "if the width of the bounding box is this and the height of the bounding box is that, then the shape *must* be this (circle or whatever)."

Log in to comment.

Answer by sss
on 26 Dec 2016

Edited by Image Analyst
on 26 Dec 2016

what is the meaning of this for loop? -----

for i = 1 : length(STATS) W(i) = uint8(abs(STATS(i).BoundingBox(3)-STATS(i).BoundingBox(4)) < 0.1); W(i) = W(i) + 2 * uint8((STATS(i).Extent - 1) == 0 ); centroid = STATS(i).Centroid; switch W(i) case 1 plot(centroid(1),centroid(2),'wO'); case 2 plot(centroid(1),centroid(2),'wX'); case 3 plot(centroid(1),centroid(2),'wS'); end

Image Analyst
on 26 Dec 2016

It plots w0, wx, or xS at the centroid of blobs in a binary image. If the blob is roughly square it puts a wS at the centroid. If it's a rectangle it will put up wX. Otherwise it will put up w0 for arbitrarily-shaped blobs that fit in a bounding box that is roughly square. I don't see anything being put up for arbitrarily-shaped blobs that have a rectangular bounding box.

Log in to comment.

Related Content

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

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments

Log in to comment.