В этом примере показано, как создать угловой инструмент измерения с помощью модульных инструментов и объектов ROI. Пример отображает изображение в окне рисунка и накладывает простой угловой инструмент измерения по изображению. Когда вы перемещаете линии в угловой инструмент измерения, функция вычисляет угол, сформированный этими двумя линиями, и отображает угол в заголовке.
Создайте функцию, которая принимает изображение как аргумент и отображает угловой инструмент измерения по изображению в окне рисунка. Этот код включает вторую функцию, используемую в качестве функции обратного вызова, которая вычисляет угол и отображает угол в фигуре.
function my_angle_measurement_tool(im) % Create figure, setting up properties figure('Name','My Angle Measurement Tool',... 'NumberTitle','off',... 'IntegerHandle','off'); % Display image in the axes % Display image imshow(im) % Get size of image. m = size(im,1); n = size(im,2); % Get center point of image for initial positioning. midy = ceil(m/2); midx = ceil(n/2); % Position first point vertically above the middle. firstx = midx; firsty = midy - ceil(m/4); lastx = midx + ceil(n/4); lasty = midy; % Create a two-segment right-angle polyline centered in the image. h = impoly(gca,[firstx,firsty;midx,midy;lastx,lasty],'Closed',false); api = iptgetapi(h); initial_position = api.getPosition() % Display initial position updateAngle(initial_position) % set up callback to update angle in title. api.addNewPositionCallback(@updateAngle); fcn = makeConstrainToRectFcn('impoly',get(gca,'XLim'),get(gca,'YLim')); api.setPositionConstraintFcn(fcn); % % Callback function that calculates the angle and updates the title. % Function receives an array containing the current x,y position of % the three vertices. function updateAngle(p) % Create two vectors from the vertices. % v1 = [x1 - x2, y1 - y2] % v2 = [x3 - x2, Y3 - y2] v1 = [p(1,1)-p(2,1), p(1,2)-p(2,2)]; v2 = [p(3,1)-p(2,1), p(3,2)-p(2,2)]; % Find the angle. theta = acos(dot(v1,v2)/(norm(v1)*norm(v2))); % Convert it to degrees. angle_degrees = (theta * (180/pi)); % Display the angle in the title of the figure. title(sprintf('(%1.0f) degrees',angle_degrees))
Считайте изображение в рабочую область.
I = imread('gantrycrane.png');
Откройте угловой инструмент измерения, задав изображение в качестве аргумента. Инструмент создает окно фигуры, отображая изображение с угловым инструментом меры, сосредоточенным по изображению в прямом углу. Переместите указатель через любую из вершин инструмента, чтобы измерить любой угол в изображении. В следующем рисунке инструмент измеряет угол в изображении. Отметьте размер угла, отображенного в заголовке фигуры.
my_angle_measurement_tool(I);