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

*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

Log in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Log in to comment.