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

📄 getobjectcrop.m

📁 This code can parse any image in matlab. Very elaborate code
💻 M
字号:
function [crop,imgCrop,mask] = getObjectCrop(object, img)
% Compute object crop
% [crop,imgCrop,mask] = getObjectCrop(object, img)
% Input:
%   object:  D{:}.annotation.object(i) or D(:).annotation.object(i).parts(j)
%   img:     input image to be cropped
% 
% Output:
%   crop:    [4*1] matrix denote the crop boundary
%   imCrop:  cropped image
%   mask:    0/1 mask of the object


[nrows ncols c] = size(img);
X=[];Y=[];
Nregions = length(object.regions);
for i=1:Nregions
    [a,b] = getLHIpoints(object.regions(i));
    X = [X;a]; Y = [Y;b];
end

Nsubgraphs = length(object.subgraphs);
for i=1:Nsubgraphs
    Ncurves = length(object.subgraphs(i).curves);
    for j=1:Ncurves
        [a,b] = getLHIpoints(object.subgraphs(i).curves(j));
        X = [X;a]; Y = [Y;b];
    end
end
crop(1) = max(min(X)-2,1);
crop(2) = min(max(X)+2,ncols);
crop(3) = max(min(Y)-2,1);
crop(4) = min(max(Y)+2,nrows);
crop = round(crop);

if nargout > 1
    imgCrop = img(crop(3):crop(4), crop(1):crop(2), :);
end

%% A slow way to compute mask, a faster version is to make use of the labelmap
% Segmentation mask 
if nargout > 2 
    disp('Begin computing mask, it may take a few minutes if image is large');
    mask = logical(zeros(size(imgCrop,1),size(imgCrop,2)));
    [x,y] = meshgrid(1:size(imgCrop,2),1:size(imgCrop,1));
    for i=1:Nregions
        [a,b] = getLHIpoints(object.regions(i));
        a = a-crop(1);
        b = b-crop(3);
        mask = mask | logical(inpolygon(x, y, a, b));
    end
end

⌨️ 快捷键说明

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