?? lineseg.m
字號:
% LINESEG - Form straight line segements from an edge list.%% Usage: seglist = lineseg(edgelist, tol)%% Arguments: edgelist - Cell array of edgelists where each edgelist is an% Nx2 array of (row col) coords.% tol - Maximum deviation from straight line before a% segment is broken in two (measured in pixels).% Returns:% seglist - A cell array of in the same format of the input% edgelist but each seglist is a subsampling of its% corresponding edgelist such that straight line% segments between these subsampled points do not% deviate from the original points by more than tol.%% This function takes each array of edgepoints in edgelist, finds the% size and position of the maximum deviation from the line that joins the% endpoints, if the maximum deviation exceeds the allowable tolerance the% edge is shortened to the point of maximum deviation and the test is% repeated. In this manner each edge is broken down to line segments,% each of which adhere to the original data with the specified tolerance.%% See also: EDGELINK, MAXLINEDEV, DRAWEDGELIST%% Copyright (c) 2000-2006 Peter Kovesi% School of Computer Science & Software Engineering% The University of Western Australia% http://www.csse.uwa.edu.au/% % Permission is hereby granted, free of charge, to any person obtaining a copy% of this software and associated documentation files (the "Software"), to deal% in the Software without restriction, subject to the following conditions:% % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software.%% The Software is provided "as is", without warranty of any kind.% December 2000 - Original version% February 2003 - Added the returning of nedgelist data.% December 2006 - Changed so that separate cell arrays of line segments are% formed, in the same format used for edgelistsfunction seglist = lineseg(edgelist, tol) Nedge = length(edgelist); seglist = cell(1,Nedge); for e = 1:Nedge y = edgelist{e}(:,1); % Note that (col, row) corresponds to (x,y) x = edgelist{e}(:,2); fst = 1; % Indices of first and last points in edge lst = length(x); % segment being considered. Npts = 1; seglist{e}(Npts,:) = [y(fst) x(fst)]; while fst<lst [m,i] = maxlinedev(x(fst:lst),y(fst:lst)); % Find size & posn of % maximum deviation. while m > tol % While deviation is > tol lst = i+fst-1; % Shorten line to point of max deviation by adjusting lst [m,i] = maxlinedev(x(fst:lst),y(fst:lst)); end Npts = Npts+1; seglist{e}(Npts,:) = [y(lst) x(lst)]; fst = lst; % reset fst and lst for next iteration lst = length(x); end end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -