⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mlsdeformimage.m

📁 meshless method programme for moving least square approximation
💻 M
字号:
function MLSDeformImage(img,p,step,type,mode,outputName)% MLSDEFORMPOINTS  Deform a set of point interactively% Check params:if nargin<2 || isempty(p)    % Selecting the line case:    if nargin>=2 && size(p,1)==4        % Getting the segment extremes:        fig=figure; imshow(img);        p=getpoints;        close(fig);                % Cropping the last odd element:        if mod(size(p,2),2)==1            p = p(:,1:end-1);        end                % Mixing the coords:        p = [p(:,1:2:end);p(:,2:2:end)];    else        % Getting the pivot points:        fig=figure; imshow(img);        p=getpoints;        close(fig);    endendif nargin<3 step=5; endif nargin<4 type='rigid'; endif nargin<5 mode='linear'; endif nargin<6 outputName='imgo'; end% Generating the grid:[X,Y] = meshgrid(1:step:size(img,2),1:step:size(img,1));v = [X(:)';Y(:)'];% Generating the mlsd:if size(p,1)==4    % Segments case:    mlsd = MLSD2DlinesPrecompute(p,v,type);else    % Points case:    mlsd = MLSD2DpointsPrecompute(p,v,type);end% Generate the figure:fig = figure;plh = imshow(img); hold on;title(['Deformation type: ',mlsd.type,' over ',mlsd.constr]);% Generating the set of moving points:handles = [];for i=1:size(mlsd.p,2)    % Getting the api:    if size(p,1)==4        % Segments case:        h = imline(gca,mlsd.p([1,3],i),mlsd.p([2,4],i));    else        % Points case:        h = impoint(gca,mlsd.p(1,i),mlsd.p(2,i));    end    handles = [handles,h];    api = iptgetapi(h);        % Adding the callback:    api.addNewPositionCallback(@Deform);end% Adding to the figure my data:data.mlsd = mlsd;data.q = mlsd.p;data.handles = handles;data.plh = plh;data.img = img;data.X = X;data.Y = Y;data.mode = mode;data.outputName = outputName;set(fig,'UserData',data);% Adding the closing funciton:set(fig,'CloseRequestFcn',@Closing);% ------------------------ LOCAL FUNCTIONS ------------------------% Saving the morphed image:function Closing(varargin)% Getting the current figure:fig = varargin{1};% Getting the data:data = get(fig,'UserData');% Getting the output image:imgo = get(data.plh,'CData');% Saving the image:assignin('base', data.outputName, imgo);% Closing:closereq;% -----------------------------------------------------------------% The deformation function:function Deform(np)% Getting the figure:fig = gcf;% Getting the data:data = get(fig,'UserData');% Obtaining the actual positions:if size(data.q,1)==4    % Looking for the handler position:    h = get(gco,'Parent');    pos = find(data.handles==h);    % Lines case:    data.q(:,pos) = [np(1,:)';np(2,:)'];else    % Looking for the handler position:    h = gco;    pos = find(data.handles==h);    % Points case:    data.q(:,pos) = np(:);end% Deforming:imgo = MLSD2DWarp( ...    data.img,data.mlsd,data.q,data.X,data.Y,data.mode);% Plotting:set(data.plh,'CData',imgo);% Saving the data:set(fig,'UserData',data);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -