14 views (last 30 days)

Show older comments

Image Analyst
on 4 Oct 2013

Edited: Image Analyst
on 4 Oct 2013

Put a ruler, a tape measure, a standard sheet of paper, or anything else of known length into the scene. Then snap a picture of it and use imdistline() to find the length in pixels. For example, let's say you laid down a sheet of A4 paper and measured it's distance as 2100 pixels. Knowing that it is 21 cm long, you get a spatial calibration factor of 21/2100, which you multiply your distances in pixels by to get the distance in cm. Multiply by that calibration factor squared to convert the area in pixels to the area in square centimeters.

calibrationFactor = 21/2100;

distanceInCm = distanceInPixels * calibrationFactor;

areaInSquareCm = areaInPixels * calibrationFactor ^ 2;

See my demo attached below for a really nice demo.

Image Analyst
on 20 Nov 2014

Roche de Guzman
on 30 Jan 2021

global h; h = imdistline; % activates the fx for drawing and measuring line

setLabelTextFormatter(h,'measure'); % message

addNewPositionCallback(h,@ShowDistance); % new position callback

%% Custom fx

function ShowDistance(pos)

global h xc yc; % sets line handles and x and y conversion factors to global

X = pos(:,1)*xc; Y = pos(:,2)*yc; % converts x and y positions from px to target unit

d = norm(diff([X Y])); % distance in target unit

setLabelTextFormatter(h,[num2str(d,'%.1f') ' target unit']); % updates measurement

end

Matt J
on 4 Oct 2013

Multiply by the length (in cm) of one pixel.

leylin fatqiyah
on 12 Feb 2015

this is my image https://www.mathworks.com/matlabcentral/answers/177673-how-to-measuring-curve-line-of-an-image

thank you

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!